| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import 'dart:async'; | |
| import 'package:ui/src/engine.dart'; | |
| import 'package:ui/ui.dart' as ui; | |
| // The scene that will be rendered in the next call to `onDrawFrame`. | |
| ui.Scene? _sceneToRender; | |
| // Completer that will complete when the call to render completes. | |
| Completer<void>? _sceneCompleter; | |
| /// Sets up rendering so that `onDrawFrame` will render the last requested | |
| /// scene. | |
| void setUpRenderingForTests() { | |
| // Set `onDrawFrame` to call `renderer.renderScene`. | |
| EnginePlatformDispatcher.instance.onDrawFrame = () { | |
| if (_sceneToRender != null) { | |
| EnginePlatformDispatcher.instance.render(_sceneToRender!).then<void>((_) { | |
| _sceneCompleter?.complete(); | |
| }).catchError((Object error) { | |
| _sceneCompleter?.completeError(error); | |
| }); | |
| _sceneToRender = null; | |
| } | |
| }; | |
| } | |
| /// Render the given [scene] in an `onDrawFrame` scope. | |
| Future<void> renderScene(ui.Scene scene) { | |
| _sceneToRender = scene; | |
| _sceneCompleter = Completer<void>(); | |
| EnginePlatformDispatcher.instance.invokeOnDrawFrame(); | |
| return _sceneCompleter!.future; | |
| } |