From cf981ae074d8d150efaba02bf790356093eb54da Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Wed, 11 Oct 2017 17:33:22 -0700 Subject: [PATCH] Add an option to specify file byte store location (flutter/engine#4201) --- .../flutter/frontend_server/lib/server.dart | 11 +++- .../frontend_server/test/server_test.dart | 57 +++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/engine/src/flutter/frontend_server/lib/server.dart b/engine/src/flutter/frontend_server/lib/server.dart index e301757e1f4..29ba2b7d0db 100644 --- a/engine/src/flutter/frontend_server/lib/server.dart +++ b/engine/src/flutter/frontend_server/lib/server.dart @@ -26,7 +26,11 @@ ArgParser _argParser = new ArgParser(allowTrailingOptions: true) help: 'Run compiler in incremental mode', defaultsTo: false) ..addOption('sdk-root', help: 'Path to sdk root', - defaultsTo: '../../out/android_debug/flutter_patched_sdk'); + defaultsTo: '../../out/android_debug/flutter_patched_sdk') + ..addOption('byte-store', + help: 'Path to file byte store used to keep incremental compiler state.' + ' If omitted, then memory byte store is used.', + defaultsTo: null); String _usage = ''' Usage: server [options] [input.dart] @@ -120,8 +124,11 @@ class _FrontendCompiler implements CompilerInterface { final String boundaryKey = new Uuid().generateV4(); _outputStream.writeln("result $boundaryKey"); final Uri sdkRoot = _ensureFolderPath(options['sdk-root']); + final String byteStorePath = options['byte-store']; final CompilerOptions compilerOptions = new CompilerOptions() - ..byteStore = new MemoryByteStore() + ..byteStore = byteStorePath != null + ? new FileByteStore(byteStorePath) + : new MemoryByteStore() ..sdkRoot = sdkRoot ..strongMode = false ..target = new FlutterTarget(new TargetFlags()) diff --git a/engine/src/flutter/frontend_server/test/server_test.dart b/engine/src/flutter/frontend_server/test/server_test.dart index 078fdd7a3f6..334f58dd806 100644 --- a/engine/src/flutter/frontend_server/test/server_test.dart +++ b/engine/src/flutter/frontend_server/test/server_test.dart @@ -47,6 +47,63 @@ Future main() async { ).captured; expect(capturedArgs.single['sdk-root'], equals('sdkroot')); }); + + test('compile from command line with file byte store', () async { + final List args = [ + 'server.dart', + '--sdk-root', + 'sdkroot', + '--byte-store', + 'path/to/bytestore' + ]; + final int exitcode = await starter(args, compiler: compiler); + expect(exitcode, equals(0)); + final List capturedArgs = + verify( + compiler.compile( + argThat(equals('server.dart')), + captureAny, + generator: any, + ) + ).captured; + expect(capturedArgs.single['sdk-root'], equals('sdkroot')); + expect(capturedArgs.single['byte-store'], equals('path/to/bytestore')); + }); + }); + + group('interactive file store compile with mocked compiler', () { + final CompilerInterface compiler = new _MockedCompiler(); + + final List args = [ + '--sdk-root', + 'sdkroot', + '--byte-store', + 'path/to/bytestore', + ]; + + test('compile one file', () async { + final StreamController> inputStreamController = + new StreamController>(); + final ReceivePort compileCalled = new ReceivePort(); + when(compiler.compile(any, any, generator: any)).thenAnswer( + (Invocation invocation) { + expect(invocation.positionalArguments[0], equals('server.dart')); + expect(invocation.positionalArguments[1]['sdk-root'], + equals('sdkroot')); + expect(invocation.positionalArguments[1]['byte-store'], + equals('path/to/bytestore')); + compileCalled.sendPort.send(true); + } + ); + + final int exitcode = await starter(args, compiler: compiler, + input: inputStreamController.stream, + ); + expect(exitcode, equals(0)); + inputStreamController.add('compile server.dart\n'.codeUnits); + await compileCalled.first; + inputStreamController.close(); + }); }); group('interactive compile with mocked compiler', () {