From ae9ac9f2113c66e9deb982404abfcbbd1a95e58e Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Wed, 1 Jul 2020 22:53:03 -0700 Subject: [PATCH] [flutter_tools] support starting in canvaskit with FLUTTER_WEB_USE_SKIA=true (#60708) --- .../lib/src/build_runner/devfs_web.dart | 3 ++ .../general.shard/web/devfs_web_test.dart | 51 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/packages/flutter_tools/lib/src/build_runner/devfs_web.dart b/packages/flutter_tools/lib/src/build_runner/devfs_web.dart index abc8cc72f87..3a6d0240e24 100644 --- a/packages/flutter_tools/lib/src/build_runner/devfs_web.dart +++ b/packages/flutter_tools/lib/src/build_runner/devfs_web.dart @@ -660,6 +660,9 @@ class WebDevFS implements DevFS { expressionCompiler, testMode: testMode, ); + if (buildInfo.dartDefines.contains('FLUTTER_WEB_USE_SKIA=true')) { + webAssetServer.canvasKitRendering = true; + } if (hostname == 'any') { _baseUri = Uri.http('localhost:$port', ''); } else { diff --git a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart index 3937b7dfe4b..46477e77475 100644 --- a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart +++ b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart @@ -486,7 +486,9 @@ void main() { expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js'), 'BELLOW'); // Toggle CanvasKit + expect(webDevFS.webAssetServer.canvasKitRendering, false); webDevFS.webAssetServer.canvasKitRendering = true; + expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js'), 'OL'); expect(await webDevFS.webAssetServer.dartSourceContents('dart_sdk.js.map'), 'CHUM'); @@ -650,6 +652,55 @@ void main() { expect(uri, Uri.http('localhost:0', '')); await webDevFS.destroy(); })); + + test('Can start web server with canvaskit enabled', () => testbed.run(() async { + globals.fs.file('.packages').writeAsStringSync('\n'); + final File outputFile = globals.fs.file(globals.fs.path.join('lib', 'main.dart')) + ..createSync(recursive: true); + outputFile.parent.childFile('a.sources').writeAsStringSync(''); + outputFile.parent.childFile('a.json').writeAsStringSync('{}'); + outputFile.parent.childFile('a.map').writeAsStringSync('{}'); + outputFile.parent.childFile('.packages').writeAsStringSync('\n'); + + final ResidentCompiler residentCompiler = MockResidentCompiler(); + when(residentCompiler.recompile( + any, + any, + outputPath: anyNamed('outputPath'), + packageConfig: anyNamed('packageConfig'), + )).thenAnswer((Invocation invocation) async { + return const CompilerOutput('a', 0, []); + }); + + final WebDevFS webDevFS = WebDevFS( + hostname: 'localhost', + port: 0, + packagesFilePath: '.packages', + urlTunneller: null, + useSseForDebugProxy: true, + buildInfo: const BuildInfo( + BuildMode.debug, + '', + treeShakeIcons: false, + dartDefines: [ + 'FLUTTER_WEB_USE_SKIA=true', + ] + ), + enableDwds: false, + entrypoint: Uri.base, + testMode: true, + expressionCompiler: null, + chromiumLauncher: null, + ); + webDevFS.requireJS.createSync(recursive: true); + webDevFS.stackTraceMapper.createSync(recursive: true); + + await webDevFS.create(); + + expect(webDevFS.webAssetServer.canvasKitRendering, true); + + await webDevFS.destroy(); + })); } class MockHttpServer extends Mock implements HttpServer {}