Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(345)

Side by Side Diff: runtime/bin/snapshot_utils.cc

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/bin/security_context_win.cc ('k') | runtime/bin/socket.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 #include "bin/snapshot_utils.h" 5 #include "bin/snapshot_utils.h"
6 6
7 #include "bin/dartutils.h" 7 #include "bin/dartutils.h"
8 #include "bin/error_exit.h" 8 #include "bin/error_exit.h"
9 #include "bin/extensions.h" 9 #include "bin/extensions.h"
10 #include "bin/file.h" 10 #include "bin/file.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 } 64 }
65 } 65 }
66 66
67 private: 67 private:
68 MappedMemory* vm_data_mapping_; 68 MappedMemory* vm_data_mapping_;
69 MappedMemory* vm_instructions_mapping_; 69 MappedMemory* vm_instructions_mapping_;
70 MappedMemory* isolate_data_mapping_; 70 MappedMemory* isolate_data_mapping_;
71 MappedMemory* isolate_instructions_mapping_; 71 MappedMemory* isolate_instructions_mapping_;
72 }; 72 };
73 73
74
75 static AppSnapshot* TryReadAppSnapshotBlobs(const char* script_name) { 74 static AppSnapshot* TryReadAppSnapshotBlobs(const char* script_name) {
76 File* file = File::Open(script_name, File::kRead); 75 File* file = File::Open(script_name, File::kRead);
77 if (file == NULL) { 76 if (file == NULL) {
78 return NULL; 77 return NULL;
79 } 78 }
80 if (file->Length() < kAppSnapshotHeaderSize) { 79 if (file->Length() < kAppSnapshotHeaderSize) {
81 file->Release(); 80 file->Release();
82 return NULL; 81 return NULL;
83 } 82 }
84 int64_t header[5]; 83 int64_t header[5];
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 if (isolate_instr_mapping == NULL) { 146 if (isolate_instr_mapping == NULL) {
148 FATAL1("Failed to memory map snapshot: %s\n", script_name); 147 FATAL1("Failed to memory map snapshot: %s\n", script_name);
149 } 148 }
150 } 149 }
151 150
152 file->Release(); 151 file->Release();
153 return new MappedAppSnapshot(vm_data_mapping, vm_instr_mapping, 152 return new MappedAppSnapshot(vm_data_mapping, vm_instr_mapping,
154 isolate_data_mapping, isolate_instr_mapping); 153 isolate_data_mapping, isolate_instr_mapping);
155 } 154 }
156 155
157
158 #if defined(DART_PRECOMPILED_RUNTIME) 156 #if defined(DART_PRECOMPILED_RUNTIME)
159 class DylibAppSnapshot : public AppSnapshot { 157 class DylibAppSnapshot : public AppSnapshot {
160 public: 158 public:
161 DylibAppSnapshot(void* library, 159 DylibAppSnapshot(void* library,
162 const uint8_t* vm_snapshot_data, 160 const uint8_t* vm_snapshot_data,
163 const uint8_t* vm_snapshot_instructions, 161 const uint8_t* vm_snapshot_instructions,
164 const uint8_t* isolate_snapshot_data, 162 const uint8_t* isolate_snapshot_data,
165 const uint8_t* isolate_snapshot_instructions) 163 const uint8_t* isolate_snapshot_instructions)
166 : library_(library), 164 : library_(library),
167 vm_snapshot_data_(vm_snapshot_data), 165 vm_snapshot_data_(vm_snapshot_data),
(...skipping 14 matching lines...) Expand all
182 } 180 }
183 181
184 private: 182 private:
185 void* library_; 183 void* library_;
186 const uint8_t* vm_snapshot_data_; 184 const uint8_t* vm_snapshot_data_;
187 const uint8_t* vm_snapshot_instructions_; 185 const uint8_t* vm_snapshot_instructions_;
188 const uint8_t* isolate_snapshot_data_; 186 const uint8_t* isolate_snapshot_data_;
189 const uint8_t* isolate_snapshot_instructions_; 187 const uint8_t* isolate_snapshot_instructions_;
190 }; 188 };
191 189
192
193 static AppSnapshot* TryReadAppSnapshotDynamicLibrary(const char* script_name) { 190 static AppSnapshot* TryReadAppSnapshotDynamicLibrary(const char* script_name) {
194 void* library = Extensions::LoadExtensionLibrary(script_name); 191 void* library = Extensions::LoadExtensionLibrary(script_name);
195 if (library == NULL) { 192 if (library == NULL) {
196 return NULL; 193 return NULL;
197 } 194 }
198 195
199 const uint8_t* vm_data_buffer = reinterpret_cast<const uint8_t*>( 196 const uint8_t* vm_data_buffer = reinterpret_cast<const uint8_t*>(
200 Extensions::ResolveSymbol(library, kVmSnapshotDataSymbolName)); 197 Extensions::ResolveSymbol(library, kVmSnapshotDataSymbolName));
201 if (vm_data_buffer == NULL) { 198 if (vm_data_buffer == NULL) {
202 FATAL1("Failed to resolve symbol '%s'\n", kVmSnapshotDataSymbolName); 199 FATAL1("Failed to resolve symbol '%s'\n", kVmSnapshotDataSymbolName);
(...skipping 18 matching lines...) Expand all
221 if (isolate_instructions_buffer == NULL) { 218 if (isolate_instructions_buffer == NULL) {
222 FATAL1("Failed to resolve symbol '%s'\n", 219 FATAL1("Failed to resolve symbol '%s'\n",
223 kIsolateSnapshotInstructionsSymbolName); 220 kIsolateSnapshotInstructionsSymbolName);
224 } 221 }
225 222
226 return new DylibAppSnapshot(library, vm_data_buffer, vm_instructions_buffer, 223 return new DylibAppSnapshot(library, vm_data_buffer, vm_instructions_buffer,
227 isolate_data_buffer, isolate_instructions_buffer); 224 isolate_data_buffer, isolate_instructions_buffer);
228 } 225 }
229 #endif // defined(DART_PRECOMPILED_RUNTIME) 226 #endif // defined(DART_PRECOMPILED_RUNTIME)
230 227
231
232 AppSnapshot* Snapshot::TryReadAppSnapshot(const char* script_name) { 228 AppSnapshot* Snapshot::TryReadAppSnapshot(const char* script_name) {
233 if (File::GetType(script_name, true) != File::kIsFile) { 229 if (File::GetType(script_name, true) != File::kIsFile) {
234 // If 'script_name' refers to a pipe, don't read to check for an app 230 // If 'script_name' refers to a pipe, don't read to check for an app
235 // snapshot since we cannot rewind if it isn't (and couldn't mmap it in 231 // snapshot since we cannot rewind if it isn't (and couldn't mmap it in
236 // anyway if it was). 232 // anyway if it was).
237 return NULL; 233 return NULL;
238 } 234 }
239 AppSnapshot* snapshot = TryReadAppSnapshotBlobs(script_name); 235 AppSnapshot* snapshot = TryReadAppSnapshotBlobs(script_name);
240 if (snapshot != NULL) { 236 if (snapshot != NULL) {
241 return snapshot; 237 return snapshot;
242 } 238 }
243 #if defined(DART_PRECOMPILED_RUNTIME) 239 #if defined(DART_PRECOMPILED_RUNTIME)
244 // For testing AOT with the standalone embedder, we also support loading 240 // For testing AOT with the standalone embedder, we also support loading
245 // from a dynamic library to simulate what happens on iOS. 241 // from a dynamic library to simulate what happens on iOS.
246 snapshot = TryReadAppSnapshotDynamicLibrary(script_name); 242 snapshot = TryReadAppSnapshotDynamicLibrary(script_name);
247 if (snapshot != NULL) { 243 if (snapshot != NULL) {
248 return snapshot; 244 return snapshot;
249 } 245 }
250 #endif // defined(DART_PRECOMPILED_RUNTIME) 246 #endif // defined(DART_PRECOMPILED_RUNTIME)
251 return NULL; 247 return NULL;
252 } 248 }
253 249
254
255 static void WriteSnapshotFile(const char* filename, 250 static void WriteSnapshotFile(const char* filename,
256 bool write_magic_number, 251 bool write_magic_number,
257 const uint8_t* buffer, 252 const uint8_t* buffer,
258 const intptr_t size) { 253 const intptr_t size) {
259 File* file = File::Open(filename, File::kWriteTruncate); 254 File* file = File::Open(filename, File::kWriteTruncate);
260 if (file == NULL) { 255 if (file == NULL) {
261 ErrorExit(kErrorExitCode, "Unable to open file %s for writing snapshot\n", 256 ErrorExit(kErrorExitCode, "Unable to open file %s for writing snapshot\n",
262 filename); 257 filename);
263 } 258 }
264 259
265 if (write_magic_number) { 260 if (write_magic_number) {
266 // Write the magic number to indicate file is a script snapshot. 261 // Write the magic number to indicate file is a script snapshot.
267 DartUtils::WriteMagicNumber(file); 262 DartUtils::WriteMagicNumber(file);
268 } 263 }
269 264
270 if (!file->WriteFully(buffer, size)) { 265 if (!file->WriteFully(buffer, size)) {
271 ErrorExit(kErrorExitCode, "Unable to write file %s for writing snapshot\n", 266 ErrorExit(kErrorExitCode, "Unable to write file %s for writing snapshot\n",
272 filename); 267 filename);
273 } 268 }
274 file->Release(); 269 file->Release();
275 } 270 }
276 271
277
278 static bool WriteInt64(File* file, int64_t size) { 272 static bool WriteInt64(File* file, int64_t size) {
279 return file->WriteFully(&size, sizeof(size)); 273 return file->WriteFully(&size, sizeof(size));
280 } 274 }
281 275
282
283 static void WriteAppSnapshot(const char* filename, 276 static void WriteAppSnapshot(const char* filename,
284 uint8_t* vm_data_buffer, 277 uint8_t* vm_data_buffer,
285 intptr_t vm_data_size, 278 intptr_t vm_data_size,
286 uint8_t* vm_instructions_buffer, 279 uint8_t* vm_instructions_buffer,
287 intptr_t vm_instructions_size, 280 intptr_t vm_instructions_size,
288 uint8_t* isolate_data_buffer, 281 uint8_t* isolate_data_buffer,
289 intptr_t isolate_data_size, 282 intptr_t isolate_data_size,
290 uint8_t* isolate_instructions_buffer, 283 uint8_t* isolate_instructions_buffer,
291 intptr_t isolate_instructions_size) { 284 intptr_t isolate_instructions_size) {
292 File* file = File::Open(filename, File::kWriteTruncate); 285 File* file = File::Open(filename, File::kWriteTruncate);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 isolate_instructions_size)) { 318 isolate_instructions_size)) {
326 ErrorExit(kErrorExitCode, "Unable to write snapshot file '%s'\n", 319 ErrorExit(kErrorExitCode, "Unable to write snapshot file '%s'\n",
327 filename); 320 filename);
328 } 321 }
329 } 322 }
330 323
331 file->Flush(); 324 file->Flush();
332 file->Release(); 325 file->Release();
333 } 326 }
334 327
335
336 void Snapshot::GenerateScript(const char* snapshot_filename) { 328 void Snapshot::GenerateScript(const char* snapshot_filename) {
337 // First create a snapshot. 329 // First create a snapshot.
338 uint8_t* buffer = NULL; 330 uint8_t* buffer = NULL;
339 intptr_t size = 0; 331 intptr_t size = 0;
340 Dart_Handle result = Dart_CreateScriptSnapshot(&buffer, &size); 332 Dart_Handle result = Dart_CreateScriptSnapshot(&buffer, &size);
341 if (Dart_IsError(result)) { 333 if (Dart_IsError(result)) {
342 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result)); 334 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
343 } 335 }
344 336
345 WriteSnapshotFile(snapshot_filename, true, buffer, size); 337 WriteSnapshotFile(snapshot_filename, true, buffer, size);
346 } 338 }
347 339
348
349 void Snapshot::GenerateAppJIT(const char* snapshot_filename) { 340 void Snapshot::GenerateAppJIT(const char* snapshot_filename) {
350 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_DBC) 341 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_DBC)
351 // Snapshots with code are not supported on IA32 or DBC. 342 // Snapshots with code are not supported on IA32 or DBC.
352 uint8_t* isolate_buffer = NULL; 343 uint8_t* isolate_buffer = NULL;
353 intptr_t isolate_size = 0; 344 intptr_t isolate_size = 0;
354 345
355 Dart_Handle result = 346 Dart_Handle result =
356 Dart_CreateSnapshot(NULL, NULL, &isolate_buffer, &isolate_size); 347 Dart_CreateSnapshot(NULL, NULL, &isolate_buffer, &isolate_size);
357 if (Dart_IsError(result)) { 348 if (Dart_IsError(result)) {
358 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result)); 349 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
(...skipping 11 matching lines...) Expand all
370 &isolate_instructions_size); 361 &isolate_instructions_size);
371 if (Dart_IsError(result)) { 362 if (Dart_IsError(result)) {
372 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result)); 363 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
373 } 364 }
374 WriteAppSnapshot(snapshot_filename, NULL, 0, NULL, 0, isolate_data_buffer, 365 WriteAppSnapshot(snapshot_filename, NULL, 0, NULL, 0, isolate_data_buffer,
375 isolate_data_size, isolate_instructions_buffer, 366 isolate_data_size, isolate_instructions_buffer,
376 isolate_instructions_size); 367 isolate_instructions_size);
377 #endif 368 #endif
378 } 369 }
379 370
380
381 void Snapshot::GenerateAppAOTAsBlobs(const char* snapshot_filename) { 371 void Snapshot::GenerateAppAOTAsBlobs(const char* snapshot_filename) {
382 uint8_t* vm_data_buffer = NULL; 372 uint8_t* vm_data_buffer = NULL;
383 intptr_t vm_data_size = 0; 373 intptr_t vm_data_size = 0;
384 uint8_t* vm_instructions_buffer = NULL; 374 uint8_t* vm_instructions_buffer = NULL;
385 intptr_t vm_instructions_size = 0; 375 intptr_t vm_instructions_size = 0;
386 uint8_t* isolate_data_buffer = NULL; 376 uint8_t* isolate_data_buffer = NULL;
387 intptr_t isolate_data_size = 0; 377 intptr_t isolate_data_size = 0;
388 uint8_t* isolate_instructions_buffer = NULL; 378 uint8_t* isolate_instructions_buffer = NULL;
389 intptr_t isolate_instructions_size = 0; 379 intptr_t isolate_instructions_size = 0;
390 Dart_Handle result = Dart_CreateAppAOTSnapshotAsBlobs( 380 Dart_Handle result = Dart_CreateAppAOTSnapshotAsBlobs(
391 &vm_data_buffer, &vm_data_size, &vm_instructions_buffer, 381 &vm_data_buffer, &vm_data_size, &vm_instructions_buffer,
392 &vm_instructions_size, &isolate_data_buffer, &isolate_data_size, 382 &vm_instructions_size, &isolate_data_buffer, &isolate_data_size,
393 &isolate_instructions_buffer, &isolate_instructions_size); 383 &isolate_instructions_buffer, &isolate_instructions_size);
394 if (Dart_IsError(result)) { 384 if (Dart_IsError(result)) {
395 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result)); 385 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
396 } 386 }
397 WriteAppSnapshot(snapshot_filename, vm_data_buffer, vm_data_size, 387 WriteAppSnapshot(snapshot_filename, vm_data_buffer, vm_data_size,
398 vm_instructions_buffer, vm_instructions_size, 388 vm_instructions_buffer, vm_instructions_size,
399 isolate_data_buffer, isolate_data_size, 389 isolate_data_buffer, isolate_data_size,
400 isolate_instructions_buffer, isolate_instructions_size); 390 isolate_instructions_buffer, isolate_instructions_size);
401 } 391 }
402 392
403
404 void Snapshot::GenerateAppAOTAsAssembly(const char* snapshot_filename) { 393 void Snapshot::GenerateAppAOTAsAssembly(const char* snapshot_filename) {
405 uint8_t* assembly_buffer = NULL; 394 uint8_t* assembly_buffer = NULL;
406 intptr_t assembly_size = 0; 395 intptr_t assembly_size = 0;
407 Dart_Handle result = 396 Dart_Handle result =
408 Dart_CreateAppAOTSnapshotAsAssembly(&assembly_buffer, &assembly_size); 397 Dart_CreateAppAOTSnapshotAsAssembly(&assembly_buffer, &assembly_size);
409 if (Dart_IsError(result)) { 398 if (Dart_IsError(result)) {
410 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result)); 399 ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
411 } 400 }
412 WriteSnapshotFile(snapshot_filename, false, assembly_buffer, assembly_size); 401 WriteSnapshotFile(snapshot_filename, false, assembly_buffer, assembly_size);
413 } 402 }
414 403
415 } // namespace bin 404 } // namespace bin
416 } // namespace dart 405 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/security_context_win.cc ('k') | runtime/bin/socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698