tweaks
diff --git a/benchmarks/lib/complex.dart b/benchmarks/lib/complex.dart
index 55ea57e..b473f1f 100644
--- a/benchmarks/lib/complex.dart
+++ b/benchmarks/lib/complex.dart
@@ -10,7 +10,9 @@
 final math.Random random = math.Random(0);
 
 void main() {
-  ui.setScreenSize(3840, 2160);  // 4k
+  ui.initializeEngine(
+    screenSize: const Size(3840, 2160),  // 4k
+  );
   runApp(MyApp());
 }
 
diff --git a/benchmarks/lib/counter.dart b/benchmarks/lib/counter.dart
index cbe1933..8703c1b 100644
--- a/benchmarks/lib/counter.dart
+++ b/benchmarks/lib/counter.dart
@@ -1,6 +1,10 @@
+import 'package:engine/ui.dart' as ui;
 import 'package:flute/material.dart';
 
 void main() {
+  ui.initializeEngine(
+    screenSize: const Size(3840, 2160),  // 4k
+  );
   runApp(MyApp());
 }
 
diff --git a/engine/lib/src/initialization_io.dart b/engine/lib/src/initialization_io.dart
new file mode 100644
index 0000000..325aed5
--- /dev/null
+++ b/engine/lib/src/initialization_io.dart
@@ -0,0 +1 @@
+Future<void> initializeEngine() async {}
diff --git a/engine/lib/src/initialization_web.dart b/engine/lib/src/initialization_web.dart
new file mode 100644
index 0000000..c18c064
--- /dev/null
+++ b/engine/lib/src/initialization_web.dart
@@ -0,0 +1,10 @@
+import 'package:js/js.dart';
+
+@JS('window.flutterCanvasKit')
+external set _windowFlutterCanvasKit(Object? value);
+
+Future<void> initializeEngine() async {
+  // Pretend that CanvasKit exists. Flute doesn't render anything, but we're
+  // interested in exercising the CanvasKit codepaths in the framework.
+  _windowFlutterCanvasKit = Object();
+}
diff --git a/engine/lib/ui.dart b/engine/lib/ui.dart
index 7b45a79..a852356 100644
--- a/engine/lib/ui.dart
+++ b/engine/lib/ui.dart
@@ -8,6 +8,9 @@
 import 'dart:math' as math;
 import 'dart:typed_data';
 
+import 'src/initialization_io.dart'
+  if (dart.library.js_util) 'src/initialization_web.dart' as initialization;
+
 part 'src/annotations.dart';
 part 'src/channel_buffers.dart';
 part 'src/compositing.dart';
@@ -40,7 +43,12 @@
 double _screenWidth = 1024;
 double _screenHeight = 1024;
 
-void setScreenSize(double width, double height) {
-  _screenWidth = width;
-  _screenHeight = height;
+Future<void> initializeEngine({
+  Size? screenSize,
+}) async {
+  if (screenSize != null) {
+    _screenWidth = screenSize.width;
+    _screenHeight = screenSize.height;
+  }
+  await initialization.initializeEngine();
 }
diff --git a/engine/pubspec.yaml b/engine/pubspec.yaml
index be5c371..babeba2 100644
--- a/engine/pubspec.yaml
+++ b/engine/pubspec.yaml
@@ -3,4 +3,5 @@
 environment:
   sdk: ">=2.17.0-0 <4.0.0"
 dependencies:
+  js: 0.6.5
   meta: 1.8.0
diff --git a/framework/lib/src/foundation/_platform_web.dart b/framework/lib/src/foundation/_platform_web.dart
index 0fb6bf8..84cc723 100644
--- a/framework/lib/src/foundation/_platform_web.dart
+++ b/framework/lib/src/foundation/_platform_web.dart
@@ -40,7 +40,7 @@
 // 0.20ms. As `defaultTargetPlatform` is routinely called dozens of times per
 // frame this value should be cached.
 final platform.TargetPlatform _browserPlatform = () {
-  final String navigatorPlatform = domWindow.navigator.platform?.toLowerCase() ?? '';
+  final String navigatorPlatform = "android" ?? '';
   if (navigatorPlatform.startsWith('mac')) {
     return platform.TargetPlatform.macOS;
   }
diff --git a/script/bin/sync.dart b/script/bin/sync.dart
index 673d371..44450dd 100644
--- a/script/bin/sync.dart
+++ b/script/bin/sync.dart
@@ -80,6 +80,7 @@
 
     if (relPath == p.join('src', 'foundation', '_platform_web.dart')) {
       source = source.replaceAll('if (ui.debugEmulateFlutterTesterEnvironment as bool)', 'if (true)');
+      source = source.replaceAll('domWindow.navigator.platform?.toLowerCase()', '"android"');
     }
 
     bool skip = false;