-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Closed
flutter/engine
#51766Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work liste: engine-toolEngine-specific tooling (i.e. `tools/engine_tool`).Engine-specific tooling (i.e. `tools/engine_tool`).e: web_skwasmSkwasm rendering backend for webSkwasm rendering backend for webengineflutter/engine related. See also e: labels.flutter/engine related. See also e: labels.platform-webWeb applications specificallyWeb applications specificallyteam-webOwned by Web platform teamOwned by Web platform teamtriaged-webTriaged by Web platform teamTriaged by Web platform team
Description
Compiling a toString() method implementation for the SkwasmPaint class produces output that fails to start when running an engine test in Skwasm mode.
To reproduce add the following toString() implementation to SkwasmPaint (the exact same implementation in CkPaint works as expected):
// Must be kept in sync with the default in paint.cc.
static const double _kStrokeMiterLimitDefault = 4.0;
// Must be kept in sync with the default in paint.cc.
static const int _kColorDefault = 0xFF000000;
// Must be kept in sync with the default in paint.cc.
static final int _kBlendModeDefault = ui.BlendMode.srcOver.index;
@override
String toString() {
String resultString = 'Paint()';
assert(() {
final StringBuffer result = StringBuffer();
String semicolon = '';
result.write('Paint(');
if (style == ui.PaintingStyle.stroke) {
result.write('$style');
if (strokeWidth != 0.0) {
result.write(' ${strokeWidth.toStringAsFixed(1)}');
} else {
result.write(' hairline');
}
if (strokeCap != ui.StrokeCap.butt) {
result.write(' $strokeCap');
}
if (strokeJoin == ui.StrokeJoin.miter) {
if (strokeMiterLimit != _kStrokeMiterLimitDefault) {
result.write(' $strokeJoin up to ${strokeMiterLimit.toStringAsFixed(1)}');
}
} else {
result.write(' $strokeJoin');
}
semicolon = '; ';
}
if (!isAntiAlias) {
result.write('${semicolon}antialias off');
semicolon = '; ';
}
if (color != const ui.Color(_kColorDefault)) {
result.write('$semicolon$color');
semicolon = '; ';
}
if (blendMode.index != _kBlendModeDefault) {
result.write('$semicolon$blendMode');
semicolon = '; ';
}
if (colorFilter != null) {
result.write('${semicolon}colorFilter: $colorFilter');
semicolon = '; ';
}
if (maskFilter != null) {
result.write('${semicolon}maskFilter: $maskFilter');
semicolon = '; ';
}
if (filterQuality != ui.FilterQuality.none) {
result.write('${semicolon}filterQuality: $filterQuality');
semicolon = '; ';
}
if (shader != null) {
result.write('${semicolon}shader: $shader');
semicolon = '; ';
}
if (imageFilter != null) {
result.write('${semicolon}imageFilter: $imageFilter');
semicolon = '; ';
}
if (invertColors) {
result.write('${semicolon}invert: $invertColors');
}
result.write(')');
resultString = result.toString();
return true;
}());
return resultString;
}Then run the text_style_test.dart as follows:
dev/felt test --browser=chrome --renderer=skwasm --compiler=dart2wasm test/ui/text_style_test.dart
Expected behavior
The test runs and succeeds or fails.
Actual behavior
The test gets stuck after printing the following:
Running `dart pub get` in 'engine/src/flutter/lib/web_ui'
Copying Skwasm...
Compiling test bundle dart2wasm-skwasm-ui...
Completed compilation of dart2wasm-skwasm-ui in 3046ms.
[chrome-dart2wasm-skwasm-ui] Running...
00:00 +0: loading text_style_test.dart
[CHROME STDERR]:
[CHROME STDERR]:DevTools listening on ws://127.0.0.1:12345/devtools/browser/98972871-cdcd-4a81-84f2-c563f0aeeb2d
The felt process never exits after printing this line. I'm suspecting the wasm module is failing to bootstrap, but I didn't have time to investigate.
Metadata
Metadata
Assignees
Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work liste: engine-toolEngine-specific tooling (i.e. `tools/engine_tool`).Engine-specific tooling (i.e. `tools/engine_tool`).e: web_skwasmSkwasm rendering backend for webSkwasm rendering backend for webengineflutter/engine related. See also e: labels.flutter/engine related. See also e: labels.platform-webWeb applications specificallyWeb applications specificallyteam-webOwned by Web platform teamOwned by Web platform teamtriaged-webTriaged by Web platform teamTriaged by Web platform team