Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 014a672

Browse files
committed
revert canvaskit changes + use js interop instead of platform messages
1 parent 24217f5 commit 014a672

File tree

5 files changed

+51
-74
lines changed

5 files changed

+51
-74
lines changed

lib/web_ui/lib/src/engine.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ void webOnlyInitializeEngine() {
162162
// initialize framework bindings.
163163
domRenderer;
164164

165+
// Calling this getter to force the [WebExperiments] instance to be created.
166+
webExperiments;
167+
165168
bool waitingForAnimation = false;
166169
ui.webOnlyScheduleFrameCallback = () {
167170
// We're asked to schedule a frame and call `frameHandler` when the frame

lib/web_ui/lib/src/engine/compositor/initialization.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
part of engine;
77

88
/// EXPERIMENTAL: Enable the Skia-based rendering backend.
9-
bool get experimentalUseSkia => webExperiments.useSkia;
9+
const bool experimentalUseSkia =
10+
bool.fromEnvironment('FLUTTER_WEB_USE_SKIA', defaultValue: false);
1011

1112
/// The URL to use when downloading the CanvasKit script and associated wasm.
1213
///

lib/web_ui/lib/src/engine/web_experiments.dart

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,51 +5,39 @@
55
// @dart = 2.6
66
part of engine;
77

8-
const MethodCodec codec = JSONMethodCodec();
9-
108
final WebExperiments webExperiments = WebExperiments._();
119

1210
/// A bag of all experiment flags in the web engine.
1311
///
1412
/// This class also handles platform messages that can be sent to enable/disable
1513
/// certain experiments at runtime without the need to access engine internals.
1614
class WebExperiments {
17-
WebExperiments._();
18-
19-
/// Experiment flag for using the Skia-based rendering backend.
20-
bool get useSkia => _useSkia ?? false;
21-
set useSkia(bool enabled) {
22-
_useSkia = enabled;
15+
WebExperiments._() {
16+
js.context['_flutter_internal_update_experiment'] = updateExperiment;
2317
}
24-
bool _useSkia = const bool.fromEnvironment('FLUTTER_WEB_USE_SKIA');
2518

2619
/// Experiment flag for using canvas-based text measurement.
2720
bool get useCanvasText => _useCanvasText ?? false;
2821
set useCanvasText(bool enabled) {
2922
_useCanvasText = enabled;
3023
}
31-
bool _useCanvasText =
32-
const bool.fromEnvironment('FLUTTER_WEB_USE_EXPERIMENTAL_CANVAS_TEXT');
24+
25+
bool _useCanvasText = const bool.fromEnvironment(
26+
'FLUTTER_WEB_USE_EXPERIMENTAL_CANVAS_TEXT',
27+
defaultValue: null,
28+
);
3329

3430
/// Reset all experimental flags to their default values.
3531
void reset() {
36-
_useSkia = null;
3732
_useCanvasText = null;
3833
}
3934

40-
/// Handles the platform message used to enable/disable web experiments in the
41-
/// web engine.
42-
void enableWebExperiments(Map<String, dynamic> message) {
43-
for (final String name in message.keys) {
44-
final bool enabled = message[name];
45-
switch (name) {
46-
case 'useSkia':
47-
_useSkia = enabled;
48-
break;
49-
case 'useCanvasText':
50-
_useCanvasText = enabled;
51-
break;
52-
}
35+
/// Used to enable/disable experimental flags in the web engine.
36+
void updateExperiment(String name, bool enabled) {
37+
switch (name) {
38+
case 'useCanvasText':
39+
_useCanvasText = enabled;
40+
break;
5341
}
5442
}
5543
}

lib/web_ui/lib/src/engine/window.dart

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -210,16 +210,6 @@ class EngineWindow extends ui.Window {
210210
break;
211211
}
212212
return;
213-
214-
case 'flutter/experiments':
215-
const MethodCodec codec = JSONMethodCodec();
216-
final MethodCall decoded = codec.decodeMethodCall(data);
217-
final Map<String, dynamic> arguments = decoded.arguments;
218-
switch (decoded.method) {
219-
case 'enableWebExperiments':
220-
webExperiments.enableWebExperiments(arguments);
221-
return;
222-
}
223213
}
224214

225215
if (pluginMessageCallHandler != null) {

lib/web_ui/test/engine/web_experiments_test.dart

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
// found in the LICENSE file.
44

55
// @dart = 2.6
6+
import 'dart:html' as html;
7+
import 'dart:js_util' as js_util;
8+
69
import 'package:test/test.dart';
710
import 'package:ui/src/engine.dart';
811

@@ -12,63 +15,55 @@ void main() {
1215
});
1316

1417
test('default web experiment values', () {
15-
expect(webExperiments.useSkia, false);
1618
expect(webExperiments.useCanvasText, false);
1719
});
1820

1921
test('can turn on/off web experiments', () {
20-
webExperiments.enableWebExperiments(<String, bool>{
21-
'useSkia': true,
22-
});
23-
expect(webExperiments.useSkia, true);
24-
expect(webExperiments.useCanvasText, false);
25-
26-
webExperiments.enableWebExperiments(<String, bool>{
27-
'useSkia': false,
28-
'useCanvasText': true,
29-
});
30-
expect(webExperiments.useSkia, false);
22+
webExperiments.updateExperiment('useCanvasText', true);
3123
expect(webExperiments.useCanvasText, true);
3224

33-
webExperiments.enableWebExperiments(<String, bool>{
34-
'useSkia': true,
35-
'useCanvasText': null,
36-
});
37-
expect(webExperiments.useSkia, true);
38-
// Goes back to default value.
25+
webExperiments.updateExperiment('useCanvasText', false);
3926
expect(webExperiments.useCanvasText, false);
4027

41-
webExperiments.enableWebExperiments(<String, bool>{
42-
'useSkia': null,
43-
});
28+
webExperiments.updateExperiment('useCanvasText', null);
4429
// Goes back to default value.
45-
expect(webExperiments.useSkia, false);
30+
expect(webExperiments.useCanvasText, false);
31+
});
32+
33+
test('ignores unknown experiments', () {
34+
expect(webExperiments.useCanvasText, false);
35+
webExperiments.updateExperiment('foobarbazqux', true);
36+
expect(webExperiments.useCanvasText, false);
37+
webExperiments.updateExperiment('foobarbazqux', false);
4638
expect(webExperiments.useCanvasText, false);
4739
});
4840

4941
test('can reset web experiments', () {
50-
webExperiments.enableWebExperiments(<String, bool>{
51-
'useSkia': true,
52-
'useCanvasText': false,
53-
});
42+
webExperiments.updateExperiment('useCanvasText', true);
5443
webExperiments.reset();
55-
expect(webExperiments.useSkia, false);
5644
expect(webExperiments.useCanvasText, false);
5745

58-
webExperiments.enableWebExperiments(<String, bool>{
59-
'useSkia': false,
60-
'useCanvasText': true,
61-
});
46+
webExperiments.updateExperiment('useCanvasText', true);
47+
webExperiments.updateExperiment('foobarbazqux', true);
6248
webExperiments.reset();
63-
expect(webExperiments.useSkia, false);
6449
expect(webExperiments.useCanvasText, false);
50+
});
6551

66-
webExperiments.enableWebExperiments(<String, bool>{
67-
'useSkia': true,
68-
'useCanvasText': true,
69-
});
70-
webExperiments.reset();
71-
expect(webExperiments.useSkia, false);
52+
test('js interop also works', () {
53+
expect(webExperiments.useCanvasText, false);
54+
55+
js_util.callMethod(
56+
html.window,
57+
'_flutter_internal_update_experiment',
58+
<dynamic>['useCanvasText', true],
59+
);
60+
expect(webExperiments.useCanvasText, true);
61+
62+
js_util.callMethod(
63+
html.window,
64+
'_flutter_internal_update_experiment',
65+
<dynamic>['useCanvasText', null],
66+
);
7267
expect(webExperiments.useCanvasText, false);
7368
});
7469
}

0 commit comments

Comments
 (0)