From caa56d6ac45471deea52db2b7bf8490f6f0ea307 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Mon, 5 Aug 2019 22:07:35 -0700 Subject: [PATCH] enable track widget creation on debug builds (#37512) --- .../lib/src/build_system/targets/dart.dart | 2 +- .../build_system/targets/dart_test.dart | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/build_system/targets/dart.dart b/packages/flutter_tools/lib/src/build_system/targets/dart.dart index 9d316552905..b2b66ffe4a1 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/dart.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/dart.dart @@ -96,7 +96,7 @@ class KernelSnapshot extends Target { final CompilerOutput output = await compiler.compile( sdkRoot: artifacts.getArtifactPath(Artifact.flutterPatchedSdkPath, mode: buildMode), aot: buildMode != BuildMode.debug, - trackWidgetCreation: false, + trackWidgetCreation: buildMode == BuildMode.debug, targetModel: TargetModel.flutter, targetProductVm: buildMode == BuildMode.release, outputFilePath: environment.buildDir.childFile('app.dill').path, diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/dart_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/dart_test.dart index 28f58d1a487..417a554c6b0 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/dart_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/dart_test.dart @@ -114,6 +114,59 @@ flutter_tools:lib/'''); expect(result.exceptions.values.single.exception, isInstanceOf()); })); + test('kernel_snapshot does not use track widget creation on profile builds', () => testbed.run(() async { + final MockKernelCompiler mockKernelCompiler = MockKernelCompiler(); + when(kernelCompilerFactory.create(any)).thenAnswer((Invocation _) async { + return mockKernelCompiler; + }); + when(mockKernelCompiler.compile( + sdkRoot: anyNamed('sdkRoot'), + aot: anyNamed('aot'), + trackWidgetCreation: false, + targetModel: anyNamed('targetModel'), + targetProductVm: anyNamed('targetProductVm'), + outputFilePath: anyNamed('outputFilePath'), + depFilePath: anyNamed('depFilePath'), + packagesPath: anyNamed('packagesPath'), + mainPath: anyNamed('mainPath') + )).thenAnswer((Invocation _) async { + return const CompilerOutput('example', 0, []); + }); + + await const KernelSnapshot().build([], androidEnvironment); + }, overrides: { + KernelCompilerFactory: () => MockKernelCompilerFactory(), + })); + + test('kernel_snapshot does use track widget creation on debug builds', () => testbed.run(() async { + final MockKernelCompiler mockKernelCompiler = MockKernelCompiler(); + when(kernelCompilerFactory.create(any)).thenAnswer((Invocation _) async { + return mockKernelCompiler; + }); + when(mockKernelCompiler.compile( + sdkRoot: anyNamed('sdkRoot'), + aot: anyNamed('aot'), + trackWidgetCreation: true, + targetModel: anyNamed('targetModel'), + targetProductVm: anyNamed('targetProductVm'), + outputFilePath: anyNamed('outputFilePath'), + depFilePath: anyNamed('depFilePath'), + packagesPath: anyNamed('packagesPath'), + mainPath: anyNamed('mainPath') + )).thenAnswer((Invocation _) async { + return const CompilerOutput('example', 0, []); + }); + + await const KernelSnapshot().build([], Environment( + projectDir: fs.currentDirectory, + defines: { + kBuildMode: 'debug', + kTargetPlatform: getNameForTargetPlatform(TargetPlatform.android_arm), + })); + }, overrides: { + KernelCompilerFactory: () => MockKernelCompilerFactory(), + })); + test('aot_elf_profile Produces correct output directory', () => testbed.run(() async { await buildSystem.build(const AotElfProfile(), androidEnvironment); @@ -321,3 +374,6 @@ class FakeKernelCompiler implements KernelCompiler { return CompilerOutput(outputFilePath, 0, null); } } + +class MockKernelCompilerFactory extends Mock implements KernelCompilerFactory {} +class MockKernelCompiler extends Mock implements KernelCompiler {}