OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // Generate a snapshot file after loading all the scripts specified on the | 5 // Generate a snapshot file after loading all the scripts specified on the |
6 // command line. | 6 // command line. |
7 | 7 |
8 #include <stdio.h> | 8 #include <stdio.h> |
9 #include <stdlib.h> | 9 #include <stdlib.h> |
10 #include <string.h> | 10 #include <string.h> |
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
988 // |CleanupEntryPointsCollection| | 988 // |CleanupEntryPointsCollection| |
989 return entries; | 989 return entries; |
990 } | 990 } |
991 | 991 |
992 | 992 |
993 static Dart_QualifiedFunctionName* ParseEntryPointsManifestIfPresent() { | 993 static Dart_QualifiedFunctionName* ParseEntryPointsManifestIfPresent() { |
994 Dart_QualifiedFunctionName* entries = ParseEntryPointsManifestFiles(); | 994 Dart_QualifiedFunctionName* entries = ParseEntryPointsManifestFiles(); |
995 if ((entries == NULL) && IsSnapshottingForPrecompilation()) { | 995 if ((entries == NULL) && IsSnapshottingForPrecompilation()) { |
996 Log::PrintErr( | 996 Log::PrintErr( |
997 "Could not find native embedder entry points during precompilation\n"); | 997 "Could not find native embedder entry points during precompilation\n"); |
998 exit(255); | 998 exit(kErrorExitCode); |
999 } | 999 } |
1000 return entries; | 1000 return entries; |
1001 } | 1001 } |
1002 | 1002 |
1003 | 1003 |
1004 static void CreateAndWriteSnapshot() { | 1004 static void CreateAndWriteSnapshot() { |
1005 ASSERT(!IsSnapshottingForPrecompilation()); | 1005 ASSERT(!IsSnapshottingForPrecompilation()); |
1006 Dart_Handle result; | 1006 Dart_Handle result; |
1007 uint8_t* vm_isolate_buffer = NULL; | 1007 uint8_t* vm_isolate_buffer = NULL; |
1008 intptr_t vm_isolate_size = 0; | 1008 intptr_t vm_isolate_size = 0; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1074 } | 1074 } |
1075 | 1075 |
1076 | 1076 |
1077 static void SetupForUriResolution() { | 1077 static void SetupForUriResolution() { |
1078 // Set up the library tag handler for this isolate. | 1078 // Set up the library tag handler for this isolate. |
1079 Dart_Handle result = Dart_SetLibraryTagHandler(Loader::LibraryTagHandler); | 1079 Dart_Handle result = Dart_SetLibraryTagHandler(Loader::LibraryTagHandler); |
1080 if (Dart_IsError(result)) { | 1080 if (Dart_IsError(result)) { |
1081 Log::PrintErr("%s", Dart_GetError(result)); | 1081 Log::PrintErr("%s", Dart_GetError(result)); |
1082 Dart_ExitScope(); | 1082 Dart_ExitScope(); |
1083 Dart_ShutdownIsolate(); | 1083 Dart_ShutdownIsolate(); |
1084 exit(255); | 1084 exit(kErrorExitCode); |
1085 } | 1085 } |
1086 // This is a generic dart snapshot which needs builtin library setup. | 1086 // This is a generic dart snapshot which needs builtin library setup. |
1087 Dart_Handle library = | 1087 Dart_Handle library = |
1088 LoadGenericSnapshotCreationScript(Builtin::kBuiltinLibrary); | 1088 LoadGenericSnapshotCreationScript(Builtin::kBuiltinLibrary); |
1089 VerifyLoaded(library); | 1089 VerifyLoaded(library); |
1090 } | 1090 } |
1091 | 1091 |
1092 | 1092 |
1093 static void SetupForGenericSnapshotCreation() { | 1093 static void SetupForGenericSnapshotCreation() { |
1094 SetupForUriResolution(); | 1094 SetupForUriResolution(); |
1095 | 1095 |
1096 Dart_Handle library = LoadGenericSnapshotCreationScript(Builtin::kIOLibrary); | 1096 Dart_Handle library = LoadGenericSnapshotCreationScript(Builtin::kIOLibrary); |
1097 VerifyLoaded(library); | 1097 VerifyLoaded(library); |
1098 Dart_Handle result = Dart_FinalizeLoading(false); | 1098 Dart_Handle result = Dart_FinalizeLoading(false); |
1099 if (Dart_IsError(result)) { | 1099 if (Dart_IsError(result)) { |
1100 const char* err_msg = Dart_GetError(library); | 1100 const char* err_msg = Dart_GetError(library); |
1101 Log::PrintErr("Errors encountered while loading: %s\n", err_msg); | 1101 Log::PrintErr("Errors encountered while loading: %s\n", err_msg); |
1102 Dart_ExitScope(); | 1102 Dart_ExitScope(); |
1103 Dart_ShutdownIsolate(); | 1103 Dart_ShutdownIsolate(); |
1104 exit(255); | 1104 exit(kErrorExitCode); |
1105 } | 1105 } |
1106 } | 1106 } |
1107 | 1107 |
1108 | 1108 |
1109 static Dart_Isolate CreateServiceIsolate(const char* script_uri, | 1109 static Dart_Isolate CreateServiceIsolate(const char* script_uri, |
1110 const char* main, | 1110 const char* main, |
1111 const char* package_root, | 1111 const char* package_root, |
1112 const char* package_config, | 1112 const char* package_config, |
1113 Dart_IsolateFlags* flags, | 1113 Dart_IsolateFlags* flags, |
1114 void* data, | 1114 void* data, |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1159 CommandLineOptions cmdline_url_mapping(argc); | 1159 CommandLineOptions cmdline_url_mapping(argc); |
1160 DartUtils::url_mapping = &cmdline_url_mapping; | 1160 DartUtils::url_mapping = &cmdline_url_mapping; |
1161 | 1161 |
1162 // Initialize the entrypoints array. | 1162 // Initialize the entrypoints array. |
1163 CommandLineOptions entry_points_files_array(argc); | 1163 CommandLineOptions entry_points_files_array(argc); |
1164 entry_points_files = &entry_points_files_array; | 1164 entry_points_files = &entry_points_files_array; |
1165 | 1165 |
1166 // Parse command line arguments. | 1166 // Parse command line arguments. |
1167 if (ParseArguments(argc, argv, &vm_options, &app_script_name) < 0) { | 1167 if (ParseArguments(argc, argv, &vm_options, &app_script_name) < 0) { |
1168 PrintUsage(); | 1168 PrintUsage(); |
1169 return 255; | 1169 return kErrorExitCode; |
1170 } | 1170 } |
1171 | 1171 |
1172 Thread::InitOnce(); | 1172 Thread::InitOnce(); |
1173 Loader::InitOnce(); | 1173 Loader::InitOnce(); |
1174 DartUtils::SetOriginalWorkingDirectory(); | 1174 DartUtils::SetOriginalWorkingDirectory(); |
1175 // Start event handler. | 1175 // Start event handler. |
1176 TimerUtils::InitOnce(); | 1176 TimerUtils::InitOnce(); |
1177 EventHandler::Start(); | 1177 EventHandler::Start(); |
1178 | 1178 |
1179 #if !defined(PRODUCT) | 1179 #if !defined(PRODUCT) |
1180 // Constant true in PRODUCT mode. | 1180 // Constant true in PRODUCT mode. |
1181 vm_options.AddArgument("--load_deferred_eagerly"); | 1181 vm_options.AddArgument("--load_deferred_eagerly"); |
1182 #endif | 1182 #endif |
1183 | 1183 |
1184 if (IsSnapshottingForPrecompilation()) { | 1184 if (IsSnapshottingForPrecompilation()) { |
1185 vm_options.AddArgument("--precompilation"); | 1185 vm_options.AddArgument("--precompilation"); |
| 1186 vm_options.AddArgument("--print_snapshot_sizes"); |
1186 #if TARGET_ARCH_ARM | 1187 #if TARGET_ARCH_ARM |
1187 // This is for the iPod Touch 5th Generation (and maybe other older devices) | 1188 // This is for the iPod Touch 5th Generation (and maybe other older devices) |
1188 vm_options.AddArgument("--no-use_integer_division"); | 1189 vm_options.AddArgument("--no-use_integer_division"); |
1189 #endif | 1190 #endif |
1190 } | 1191 } |
1191 | 1192 |
1192 Dart_SetVMFlags(vm_options.count(), vm_options.arguments()); | 1193 Dart_SetVMFlags(vm_options.count(), vm_options.arguments()); |
1193 | 1194 |
1194 // Initialize the Dart VM. | 1195 // Initialize the Dart VM. |
1195 // Note: We don't expect isolates to be created from dart code during | 1196 // Note: We don't expect isolates to be created from dart code during |
(...skipping 10 matching lines...) Expand all Loading... |
1206 init_params.file_open = DartUtils::OpenFile; | 1207 init_params.file_open = DartUtils::OpenFile; |
1207 init_params.file_read = DartUtils::ReadFile; | 1208 init_params.file_read = DartUtils::ReadFile; |
1208 init_params.file_write = DartUtils::WriteFile; | 1209 init_params.file_write = DartUtils::WriteFile; |
1209 init_params.file_close = DartUtils::CloseFile; | 1210 init_params.file_close = DartUtils::CloseFile; |
1210 init_params.entropy_source = DartUtils::EntropySource; | 1211 init_params.entropy_source = DartUtils::EntropySource; |
1211 | 1212 |
1212 char* error = Dart_Initialize(&init_params); | 1213 char* error = Dart_Initialize(&init_params); |
1213 if (error != NULL) { | 1214 if (error != NULL) { |
1214 Log::PrintErr("VM initialization failed: %s\n", error); | 1215 Log::PrintErr("VM initialization failed: %s\n", error); |
1215 free(error); | 1216 free(error); |
1216 return 255; | 1217 return kErrorExitCode; |
1217 } | 1218 } |
1218 | 1219 |
1219 IsolateData* isolate_data = new IsolateData(NULL, commandline_package_root, | 1220 IsolateData* isolate_data = new IsolateData(NULL, commandline_package_root, |
1220 commandline_packages_file); | 1221 commandline_packages_file); |
1221 Dart_Isolate isolate = | 1222 Dart_Isolate isolate = |
1222 Dart_CreateIsolate(NULL, NULL, NULL, NULL, isolate_data, &error); | 1223 Dart_CreateIsolate(NULL, NULL, NULL, NULL, isolate_data, &error); |
1223 if (isolate == NULL) { | 1224 if (isolate == NULL) { |
1224 Log::PrintErr("Error: %s", error); | 1225 Log::PrintErr("Error: %s", error); |
1225 free(error); | 1226 free(error); |
1226 exit(255); | 1227 exit(kErrorExitCode); |
1227 } | 1228 } |
1228 | 1229 |
1229 Dart_Handle result; | 1230 Dart_Handle result; |
1230 Dart_Handle library; | 1231 Dart_Handle library; |
1231 Dart_EnterScope(); | 1232 Dart_EnterScope(); |
1232 | 1233 |
1233 result = Dart_SetEnvironmentCallback(EnvironmentCallback); | 1234 result = Dart_SetEnvironmentCallback(EnvironmentCallback); |
1234 CHECK_RESULT(result); | 1235 CHECK_RESULT(result); |
1235 | 1236 |
1236 ASSERT(vm_isolate_snapshot_filename != NULL); | 1237 ASSERT(vm_isolate_snapshot_filename != NULL); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1269 const uint8_t* kernel = NULL; | 1270 const uint8_t* kernel = NULL; |
1270 intptr_t kernel_length = 0; | 1271 intptr_t kernel_length = 0; |
1271 const bool is_kernel_file = | 1272 const bool is_kernel_file = |
1272 TryReadKernel(app_script_name, &kernel, &kernel_length); | 1273 TryReadKernel(app_script_name, &kernel, &kernel_length); |
1273 Dart_Isolate isolate = | 1274 Dart_Isolate isolate = |
1274 is_kernel_file | 1275 is_kernel_file |
1275 ? Dart_CreateIsolateFromKernel(NULL, NULL, kernel, kernel_length, | 1276 ? Dart_CreateIsolateFromKernel(NULL, NULL, kernel, kernel_length, |
1276 NULL, isolate_data, &error) | 1277 NULL, isolate_data, &error) |
1277 : Dart_CreateIsolate(NULL, NULL, NULL, NULL, isolate_data, &error); | 1278 : Dart_CreateIsolate(NULL, NULL, NULL, NULL, isolate_data, &error); |
1278 if (isolate == NULL) { | 1279 if (isolate == NULL) { |
1279 fprintf(stderr, "%s", error); | 1280 Log::PrintErr("%s", error); |
1280 free(error); | 1281 free(error); |
1281 exit(255); | 1282 exit(kErrorExitCode); |
1282 } | 1283 } |
1283 Dart_EnterScope(); | 1284 Dart_EnterScope(); |
1284 result = Dart_SetEnvironmentCallback(EnvironmentCallback); | 1285 result = Dart_SetEnvironmentCallback(EnvironmentCallback); |
1285 CHECK_RESULT(result); | 1286 CHECK_RESULT(result); |
1286 | 1287 |
1287 // Set up the library tag handler in such a manner that it will use the | 1288 // Set up the library tag handler in such a manner that it will use the |
1288 // URL mapping specified on the command line to load the libraries. | 1289 // URL mapping specified on the command line to load the libraries. |
1289 result = Dart_SetLibraryTagHandler(CreateSnapshotLibraryTagHandler); | 1290 result = Dart_SetLibraryTagHandler(CreateSnapshotLibraryTagHandler); |
1290 CHECK_RESULT(result); | 1291 CHECK_RESULT(result); |
1291 | 1292 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1339 EventHandler::Stop(); | 1340 EventHandler::Stop(); |
1340 return 0; | 1341 return 0; |
1341 } | 1342 } |
1342 | 1343 |
1343 } // namespace bin | 1344 } // namespace bin |
1344 } // namespace dart | 1345 } // namespace dart |
1345 | 1346 |
1346 int main(int argc, char** argv) { | 1347 int main(int argc, char** argv) { |
1347 return dart::bin::main(argc, argv); | 1348 return dart::bin::main(argc, argv); |
1348 } | 1349 } |
OLD | NEW |