Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Futurize more
  • Loading branch information
harryterkelsen committed Dec 19, 2023
commit 0ec6420ef515b9749467da22ef28ff7b63889fa7
4 changes: 2 additions & 2 deletions lib/web_ui/lib/src/engine/canvaskit/rasterizer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class Rasterizer {

/// Creates a new frame from this rasterizer's surface, draws the given
/// [LayerTree] into it, and then submits the frame.
void draw(LayerTree layerTree) {
Future<void> draw(LayerTree layerTree) async {
final ui.Size frameSize = view.physicalSize;
if (frameSize.isEmpty) {
// Available drawing area is empty. Skip drawing.
Expand All @@ -49,7 +49,7 @@ class Rasterizer {
compositorFrame.raster(layerTree, ignoreRasterCache: true);

sceneHost.prepend(renderCanvasFactory.baseCanvas.htmlElement);
rasterizeToCanvas(renderCanvasFactory.baseCanvas,
await rasterizeToCanvas(renderCanvasFactory.baseCanvas,
<CkPicture>[pictureRecorder.endRecording()]);

viewEmbedder.submitFrame();
Expand Down
4 changes: 2 additions & 2 deletions lib/web_ui/lib/src/engine/canvaskit/renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ class CanvasKitRenderer implements Renderer {
CkParagraphBuilder(style);

@override
void renderScene(ui.Scene scene, ui.FlutterView view) {
Future<void> renderScene(ui.Scene scene, ui.FlutterView view) async {
// "Build finish" and "raster start" happen back-to-back because we
// render on the same thread, so there's no overhead from hopping to
// another thread.
Expand All @@ -417,7 +417,7 @@ class CanvasKitRenderer implements Renderer {
"Unable to render to a view which hasn't been registered");
final Rasterizer rasterizer = _rasterizers[view.viewId]!;

rasterizer.draw((scene as LayerScene).layerTree);
await rasterizer.draw((scene as LayerScene).layerTree);
frameTimingsOnRasterFinish();
}

Expand Down
22 changes: 9 additions & 13 deletions lib/web_ui/lib/src/engine/canvaskit/surface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -115,22 +115,18 @@ class Surface {
_surface!.flush();

if (browserSupportsCreateImageBitmap) {
DomImageBitmap bitmap;
JSObject bitmapSource;
if (Surface.offscreenCanvasSupported) {
bitmap = (await createImageBitmap(_offscreenCanvas! as JSObject, (
x: 0,
y: _pixelHeight - frameSize.height.toInt(),
width: frameSize.width.toInt(),
height: frameSize.height.toInt(),
)).toDart)! as DomImageBitmap;
bitmapSource = _offscreenCanvas! as JSObject;
} else {
bitmap = (await createImageBitmap(_canvasElement! as JSObject, (
x: 0,
y: _pixelHeight - frameSize.height.toInt(),
width: frameSize.width.toInt(),
height: frameSize.height.toInt()
)).toDart)! as DomImageBitmap;
bitmapSource = _canvasElement! as JSObject;
}
final DomImageBitmap bitmap = await createImageBitmap(bitmapSource, (
x: 0,
y: _pixelHeight - frameSize.height.toInt(),
width: frameSize.width.toInt(),
height: frameSize.height.toInt(),
));
canvas.render(bitmap);
} else {
// If the browser doesn't support `createImageBitmap` (e.g. Safari 14)
Expand Down
8 changes: 5 additions & 3 deletions lib/web_ui/lib/src/engine/dom.dart
Original file line number Diff line number Diff line change
Expand Up @@ -210,14 +210,16 @@ external JSPromise<JSAny?> _createImageBitmap2(
JSNumber width,
JSNumber height,
);
JSPromise<JSAny?> createImageBitmap(JSAny source,
Future<DomImageBitmap> createImageBitmap(JSAny source,
[({int x, int y, int width, int height})? bounds]) {
JSPromise<JSAny?> jsPromise;
if (bounds != null) {
return _createImageBitmap2(source, bounds.x.toJS, bounds.y.toJS,
jsPromise = _createImageBitmap2(source, bounds.x.toJS, bounds.y.toJS,
bounds.width.toJS, bounds.height.toJS);
} else {
return _createImageBitmap1(source);
jsPromise = _createImageBitmap1(source);
}
return js_util.promiseToFuture<DomImageBitmap>(jsPromise);
}

@JS()
Expand Down
2 changes: 1 addition & 1 deletion lib/web_ui/lib/src/engine/html/renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ class HtmlRenderer implements Renderer {
CanvasParagraphBuilder(style as EngineParagraphStyle);

@override
void renderScene(ui.Scene scene, ui.FlutterView view) {
Future<void> renderScene(ui.Scene scene, ui.FlutterView view) async {
final EngineFlutterView implicitView = EnginePlatformDispatcher.instance.implicitView!;
implicitView.dom.setScene((scene as SurfaceScene).webOnlyRootElement!);
frameTimingsOnRasterFinish();
Expand Down
2 changes: 1 addition & 1 deletion lib/web_ui/lib/src/engine/renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -222,5 +222,5 @@ abstract class Renderer {

ui.ParagraphBuilder createParagraphBuilder(ui.ParagraphStyle style);

FutureOr<void> renderScene(ui.Scene scene, ui.FlutterView view);
Future<void> renderScene(ui.Scene scene, ui.FlutterView view);
}
2 changes: 1 addition & 1 deletion lib/web_ui/lib/src/engine/skwasm/skwasm_stub/renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ class SkwasmRenderer implements Renderer {
}

@override
void renderScene(ui.Scene scene, ui.FlutterView view) {
Future<void> renderScene(ui.Scene scene, ui.FlutterView view) {
throw UnimplementedError('Skwasm not implemented on this platform.');
}

Expand Down
1 change: 1 addition & 0 deletions lib/web_ui/test/engine/semantics/semantics_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ void main() {

Future<void> testMain() async {
await bootstrapAndRunApp();
setUpRenderingForTests();
runSemanticsTests();
}

Expand Down