Chromium Code Reviews| Index: runtime/bin/main.cc | 
| diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc | 
| index 7a1ef37f8fb338acb6840202c633925cb519926f..8d4df87bb9d98d1b26c4e8d201eeb416e3c338e8 100644 | 
| --- a/runtime/bin/main.cc | 
| +++ b/runtime/bin/main.cc | 
| @@ -123,6 +123,12 @@ static bool parse_all = false; | 
| // of assembly/shared libraries for precompilation. | 
| static bool use_blobs = false; | 
| +// Global flag is used to indicate that we want to obfuscate identifiers. | 
| +static bool obfuscate = false; | 
| 
 
rmacnak
2017/08/24 01:00:27
Flutter will want these options on gen_snapshot.
 
Vyacheslav Egorov (Google)
2017/08/24 14:27:19
I have added these options to the gen_snapshot. I
 
 | 
| + | 
| +// Value of the --save-obfuscation-map= flag. | 
| +static const char* obfuscation_map_filename = NULL; | 
| + | 
| // Global flag that is used to indicate that we want to trace resolution of | 
| // URIs and the loading of libraries, parts and scripts. | 
| static bool trace_loading = false; | 
| @@ -378,6 +384,23 @@ static bool ProcessUseBlobsOption(const char* arg, | 
| return true; | 
| } | 
| +static bool ProcessObfuscateOption(const char* arg, | 
| + CommandLineOptions* vm_options) { | 
| + ASSERT(arg != NULL); | 
| + if (*arg != '\0') { | 
| + return false; | 
| + } | 
| + obfuscate = true; | 
| + return true; | 
| +} | 
| + | 
| +static bool ProcessObfuscationMapFilenameOption( | 
| + const char* filename, | 
| + CommandLineOptions* vm_options) { | 
| + obfuscation_map_filename = filename; | 
| + return true; | 
| +} | 
| + | 
| static bool ProcessSnapshotFilenameOption(const char* filename, | 
| CommandLineOptions* vm_options) { | 
| snapshot_filename = filename; | 
| @@ -587,6 +610,8 @@ static struct { | 
| {"--snapshot-kind=", ProcessSnapshotKindOption}, | 
| {"--snapshot-depfile=", ProcessSnapshotDepsFilenameOption}, | 
| {"--use-blobs", ProcessUseBlobsOption}, | 
| + {"--obfuscate", ProcessObfuscateOption}, | 
| + {"--save-obfuscation-map=", ProcessObfuscationMapFilenameOption}, | 
| {"--save-compilation-trace=", ProcessSaveCompilationTraceOption}, | 
| {"--load-compilation-trace=", ProcessLoadCompilationTraceOption}, | 
| {"--save-feedback=", ProcessSaveFeedbackOption}, | 
| @@ -1414,6 +1439,59 @@ static void ReadFile(const char* filename, uint8_t** buffer, intptr_t* size) { | 
| file->Release(); | 
| } | 
| +static Dart_QualifiedFunctionName standalone_entry_points[] = { | 
| + // Functions. | 
| + {"dart:_builtin", "::", "_getPrintClosure"}, | 
| + {"dart:_builtin", "::", "_getUriBaseClosure"}, | 
| + {"dart:_builtin", "::", "_libraryFilePath"}, | 
| + {"dart:_builtin", "::", "_resolveInWorkingDirectory"}, | 
| + {"dart:_builtin", "::", "_setPackageRoot"}, | 
| + {"dart:_builtin", "::", "_setPackagesMap"}, | 
| + {"dart:_builtin", "::", "_setWorkingDirectory"}, | 
| + {"dart:async", "::", "_setScheduleImmediateClosure"}, | 
| + {"dart:io", "::", "_getWatchSignalInternal"}, | 
| + {"dart:io", "::", "_makeDatagram"}, | 
| + {"dart:io", "::", "_makeUint8ListView"}, | 
| + {"dart:io", "::", "_setupHooks"}, | 
| + {"dart:io", "CertificateException", "CertificateException."}, | 
| + {"dart:io", "Directory", "Directory."}, | 
| + {"dart:io", "File", "File."}, | 
| + {"dart:io", "FileSystemException", "FileSystemException."}, | 
| + {"dart:io", "HandshakeException", "HandshakeException."}, | 
| + {"dart:io", "Link", "Link."}, | 
| + {"dart:io", "OSError", "OSError."}, | 
| + {"dart:io", "TlsException", "TlsException."}, | 
| + {"dart:io", "X509Certificate", "X509Certificate._"}, | 
| + {"dart:io", "_ExternalBuffer", "get:end"}, | 
| + {"dart:io", "_ExternalBuffer", "get:start"}, | 
| + {"dart:io", "_ExternalBuffer", "set:data"}, | 
| + {"dart:io", "_ExternalBuffer", "set:end"}, | 
| + {"dart:io", "_ExternalBuffer", "set:start"}, | 
| + {"dart:io", "_Platform", "set:_nativeScript"}, | 
| + {"dart:io", "_ProcessStartStatus", "set:_errorCode"}, | 
| + {"dart:io", "_ProcessStartStatus", "set:_errorMessage"}, | 
| + {"dart:io", "_SecureFilterImpl", "get:ENCRYPTED_SIZE"}, | 
| + {"dart:io", "_SecureFilterImpl", "get:SIZE"}, | 
| + {"dart:io", "_SecureFilterImpl", "get:buffers"}, | 
| + {"dart:isolate", "::", "_getIsolateScheduleImmediateClosure"}, | 
| + {"dart:isolate", "::", "_setupHooks"}, | 
| + {"dart:isolate", "::", "_startMainIsolate"}, | 
| + {"dart:vmservice_io", "::", "main"}, | 
| + // Fields | 
| + {"dart:_builtin", "::", "_isolateId"}, | 
| + {"dart:_builtin", "::", "_loadPort"}, | 
| + {"dart:_internal", "::", "_printClosure"}, | 
| + {"dart:vmservice_io", "::", "_autoStart"}, | 
| + {"dart:vmservice_io", "::", "_ip"}, | 
| + {"dart:vmservice_io", "::", "_isFuchsia"}, | 
| + {"dart:vmservice_io", "::", "_isWindows"}, | 
| + {"dart:vmservice_io", "::", "_originCheckDisabled"}, | 
| + {"dart:vmservice_io", "::", "_port"}, | 
| + {"dart:vmservice_io", "::", "_signalWatch"}, | 
| + {"dart:vmservice_io", "::", "_traceLoading"}, | 
| + {NULL, NULL, NULL} // Must be terminated with NULL entries. | 
| +}; | 
| + | 
| bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { | 
| // Call CreateIsolateAndSetup which creates an isolate and loads up | 
| // the specified application script. | 
| @@ -1421,9 +1499,17 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { | 
| bool is_main_isolate = true; | 
| int exit_code = 0; | 
| char* isolate_name = BuildIsolateName(script_name, "main"); | 
| + Dart_IsolateFlags flags; | 
| + Dart_IsolateFlagsInitialize(&flags); | 
| + | 
| + if (gen_snapshot_kind == kAppAOT) { | 
| + flags.obfuscate = obfuscate; | 
| + flags.entry_points = standalone_entry_points; | 
| + } | 
| + | 
| Dart_Isolate isolate = CreateIsolateAndSetupHelper( | 
| is_main_isolate, script_name, "main", commandline_package_root, | 
| - commandline_packages_file, NULL, &error, &exit_code); | 
| + commandline_packages_file, &flags, &error, &exit_code); | 
| if (isolate == NULL) { | 
| delete[] isolate_name; | 
| Log::PrintErr("%s\n", error); | 
| @@ -1497,46 +1583,6 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { | 
| } | 
| if (gen_snapshot_kind == kAppAOT) { | 
| - Dart_QualifiedFunctionName standalone_entry_points[] = { | 
| - {"dart:_builtin", "::", "_getPrintClosure"}, | 
| - {"dart:_builtin", "::", "_getUriBaseClosure"}, | 
| - {"dart:_builtin", "::", "_libraryFilePath"}, | 
| - {"dart:_builtin", "::", "_resolveInWorkingDirectory"}, | 
| - {"dart:_builtin", "::", "_setPackageRoot"}, | 
| - {"dart:_builtin", "::", "_setPackagesMap"}, | 
| - {"dart:_builtin", "::", "_setWorkingDirectory"}, | 
| - {"dart:async", "::", "_setScheduleImmediateClosure"}, | 
| - {"dart:io", "::", "_getWatchSignalInternal"}, | 
| - {"dart:io", "::", "_makeDatagram"}, | 
| - {"dart:io", "::", "_makeUint8ListView"}, | 
| - {"dart:io", "::", "_setupHooks"}, | 
| - {"dart:io", "CertificateException", "CertificateException."}, | 
| - {"dart:io", "Directory", "Directory."}, | 
| - {"dart:io", "File", "File."}, | 
| - {"dart:io", "FileSystemException", "FileSystemException."}, | 
| - {"dart:io", "HandshakeException", "HandshakeException."}, | 
| - {"dart:io", "Link", "Link."}, | 
| - {"dart:io", "OSError", "OSError."}, | 
| - {"dart:io", "TlsException", "TlsException."}, | 
| - {"dart:io", "X509Certificate", "X509Certificate._"}, | 
| - {"dart:io", "_ExternalBuffer", "get:end"}, | 
| - {"dart:io", "_ExternalBuffer", "get:start"}, | 
| - {"dart:io", "_ExternalBuffer", "set:data"}, | 
| - {"dart:io", "_ExternalBuffer", "set:end"}, | 
| - {"dart:io", "_ExternalBuffer", "set:start"}, | 
| - {"dart:io", "_Platform", "set:_nativeScript"}, | 
| - {"dart:io", "_ProcessStartStatus", "set:_errorCode"}, | 
| - {"dart:io", "_ProcessStartStatus", "set:_errorMessage"}, | 
| - {"dart:io", "_SecureFilterImpl", "get:ENCRYPTED_SIZE"}, | 
| - {"dart:io", "_SecureFilterImpl", "get:SIZE"}, | 
| - {"dart:io", "_SecureFilterImpl", "get:buffers"}, | 
| - {"dart:isolate", "::", "_getIsolateScheduleImmediateClosure"}, | 
| - {"dart:isolate", "::", "_setupHooks"}, | 
| - {"dart:isolate", "::", "_startMainIsolate"}, | 
| - {"dart:vmservice_io", "::", "main"}, | 
| - {NULL, NULL, NULL} // Must be terminated with NULL entries. | 
| - }; | 
| - | 
| uint8_t* feedback_buffer = NULL; | 
| intptr_t feedback_length = 0; | 
| if (load_feedback_filename != NULL) { | 
| @@ -1558,6 +1604,14 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { | 
| free(feedback_buffer); | 
| } | 
| CHECK_RESULT(result); | 
| + | 
| + if (obfuscate && obfuscation_map_filename != NULL) { | 
| + uint8_t* buffer = NULL; | 
| + intptr_t size = 0; | 
| + result = Dart_GetObfuscationMap(&buffer, &size); | 
| + CHECK_RESULT(result); | 
| + WriteFile(obfuscation_map_filename, buffer, size); | 
| + } | 
| } | 
| if (gen_snapshot_kind == kAppAOT) { |