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

Side by Side Diff: runtime/vm/clustered_snapshot.h

Issue 2622053002: Refactor snapshots pieces to include a section for loading instructions into the heap of a regular … (Closed)
Patch Set: . Created 3 years, 11 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/vm/benchmark_test.cc ('k') | runtime/vm/clustered_snapshot.cc » ('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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 #ifndef RUNTIME_VM_CLUSTERED_SNAPSHOT_H_ 5 #ifndef RUNTIME_VM_CLUSTERED_SNAPSHOT_H_
6 #define RUNTIME_VM_CLUSTERED_SNAPSHOT_H_ 6 #define RUNTIME_VM_CLUSTERED_SNAPSHOT_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/allocation.h" 9 #include "vm/allocation.h"
10 #include "vm/bitfield.h" 10 #include "vm/bitfield.h"
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 public: 116 public:
117 Serializer(Thread* thread, 117 Serializer(Thread* thread,
118 Snapshot::Kind kind, 118 Snapshot::Kind kind,
119 uint8_t** buffer, 119 uint8_t** buffer,
120 ReAlloc alloc, 120 ReAlloc alloc,
121 intptr_t initial_size, 121 intptr_t initial_size,
122 InstructionsWriter* instructions_writer_); 122 InstructionsWriter* instructions_writer_);
123 ~Serializer(); 123 ~Serializer();
124 124
125 intptr_t WriteVMSnapshot(const Array& symbols, const Array& scripts); 125 intptr_t WriteVMSnapshot(const Array& symbols, const Array& scripts);
126 void WriteFullSnapshot(intptr_t num_base_objects, ObjectStore* object_store); 126 void WriteIsolateSnapshot(intptr_t num_base_objects,
127 ObjectStore* object_store);
127 128
128 void AddVMIsolateBaseObjects(); 129 void AddVMIsolateBaseObjects();
129 130
130 void AddBaseObject(RawObject* base_object) { 131 void AddBaseObject(RawObject* base_object) {
131 AssignRef(base_object); 132 AssignRef(base_object);
132 num_base_objects_++; 133 num_base_objects_++;
133 } 134 }
134 135
135 void AssignRef(RawObject* object) { 136 void AssignRef(RawObject* object) {
136 ASSERT(next_ref_index_ != 0); 137 ASSERT(next_ref_index_ != 0);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 200
200 void FillHeader(Snapshot::Kind kind) { 201 void FillHeader(Snapshot::Kind kind) {
201 int64_t* data = reinterpret_cast<int64_t*>(stream_.buffer()); 202 int64_t* data = reinterpret_cast<int64_t*>(stream_.buffer());
202 data[Snapshot::kLengthIndex] = stream_.bytes_written(); 203 data[Snapshot::kLengthIndex] = stream_.bytes_written();
203 data[Snapshot::kSnapshotFlagIndex] = kind; 204 data[Snapshot::kSnapshotFlagIndex] = kind;
204 } 205 }
205 206
206 void WriteVersionAndFeatures(); 207 void WriteVersionAndFeatures();
207 208
208 void Serialize(); 209 void Serialize();
210 WriteStream* stream() { return &stream_; }
209 intptr_t bytes_written() { return stream_.bytes_written(); } 211 intptr_t bytes_written() { return stream_.bytes_written(); }
210 212
211 // Writes raw data to the stream (basic type). 213 // Writes raw data to the stream (basic type).
212 // sizeof(T) must be in {1,2,4,8}. 214 // sizeof(T) must be in {1,2,4,8}.
213 template <typename T> 215 template <typename T>
214 void Write(T value) { 216 void Write(T value) {
215 WriteStream::Raw<sizeof(T), T>::Write(&stream_, value); 217 WriteStream::Raw<sizeof(T), T>::Write(&stream_, value);
216 } 218 }
217 219
218 void WriteBytes(const uint8_t* addr, intptr_t len) { 220 void WriteBytes(const uint8_t* addr, intptr_t len) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 class Deserializer : public StackResource { 289 class Deserializer : public StackResource {
288 public: 290 public:
289 Deserializer(Thread* thread, 291 Deserializer(Thread* thread,
290 Snapshot::Kind kind, 292 Snapshot::Kind kind,
291 const uint8_t* buffer, 293 const uint8_t* buffer,
292 intptr_t size, 294 intptr_t size,
293 const uint8_t* instructions_buffer, 295 const uint8_t* instructions_buffer,
294 const uint8_t* data_buffer); 296 const uint8_t* data_buffer);
295 ~Deserializer(); 297 ~Deserializer();
296 298
297 void ReadFullSnapshot(ObjectStore* object_store); 299 void ReadIsolateSnapshot(ObjectStore* object_store);
298 void ReadVMSnapshot(); 300 void ReadVMSnapshot();
299 301
300 void AddVMIsolateBaseObjects(); 302 void AddVMIsolateBaseObjects();
301 303
302 static void InitializeHeader(RawObject* raw, 304 static void InitializeHeader(RawObject* raw,
303 intptr_t cid, 305 intptr_t cid,
304 intptr_t size, 306 intptr_t size,
305 bool is_vm_isolate, 307 bool is_vm_isolate,
306 bool is_canonical = false); 308 bool is_canonical = false);
307 309
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 345
344 TokenPosition ReadTokenPosition() { 346 TokenPosition ReadTokenPosition() {
345 return TokenPosition::SnapshotDecode(Read<int32_t>()); 347 return TokenPosition::SnapshotDecode(Read<int32_t>());
346 } 348 }
347 349
348 intptr_t ReadCid() { 350 intptr_t ReadCid() {
349 COMPILE_ASSERT(RawObject::kClassIdTagSize <= 32); 351 COMPILE_ASSERT(RawObject::kClassIdTagSize <= 32);
350 return Read<int32_t>(); 352 return Read<int32_t>();
351 } 353 }
352 354
353 uword GetInstructionsAt(int32_t offset) { 355 RawInstructions* GetInstructionsAt(int32_t offset) {
354 return instructions_reader_->GetInstructionsAt(offset); 356 return instructions_reader_->GetInstructionsAt(offset);
355 } 357 }
356 358
357 RawObject* GetObjectAt(int32_t offset) { 359 RawObject* GetObjectAt(int32_t offset) {
358 return instructions_reader_->GetObjectAt(offset); 360 return instructions_reader_->GetObjectAt(offset);
359 } 361 }
360 362
361 RawApiError* VerifyVersionAndFeatures(); 363 RawApiError* VerifyVersionAndFeatures();
362 364
363 void Prepare(); 365 void Prepare();
(...skipping 16 matching lines...) Expand all
380 RawArray* refs_; 382 RawArray* refs_;
381 intptr_t next_ref_index_; 383 intptr_t next_ref_index_;
382 DeserializationCluster** clusters_; 384 DeserializationCluster** clusters_;
383 }; 385 };
384 386
385 387
386 class FullSnapshotWriter { 388 class FullSnapshotWriter {
387 public: 389 public:
388 static const intptr_t kInitialSize = 64 * KB; 390 static const intptr_t kInitialSize = 64 * KB;
389 FullSnapshotWriter(Snapshot::Kind kind, 391 FullSnapshotWriter(Snapshot::Kind kind,
390 uint8_t** vm_isolate_snapshot_buffer, 392 uint8_t** vm_snapshot_data_buffer,
391 uint8_t** isolate_snapshot_buffer, 393 uint8_t** isolate_snapshot_data_buffer,
392 ReAlloc alloc, 394 ReAlloc alloc,
393 InstructionsWriter* instructions_writer); 395 InstructionsWriter* vm_instructions_writer,
396 InstructionsWriter* iso_instructions_writer);
394 ~FullSnapshotWriter(); 397 ~FullSnapshotWriter();
395 398
396 uint8_t** vm_isolate_snapshot_buffer() const { 399 uint8_t** vm_snapshot_data_buffer() const { return vm_snapshot_data_buffer_; }
397 return vm_isolate_snapshot_buffer_; 400
401 uint8_t** isolate_snapshot_data_buffer() const {
402 return isolate_snapshot_data_buffer_;
398 } 403 }
399 404
400 uint8_t** isolate_snapshot_buffer() const { return isolate_snapshot_buffer_; }
401
402 Thread* thread() const { return thread_; } 405 Thread* thread() const { return thread_; }
403 Zone* zone() const { return thread_->zone(); } 406 Zone* zone() const { return thread_->zone(); }
404 Isolate* isolate() const { return thread_->isolate(); } 407 Isolate* isolate() const { return thread_->isolate(); }
405 Heap* heap() const { return isolate()->heap(); } 408 Heap* heap() const { return isolate()->heap(); }
406 409
407 // Writes a full snapshot of the Isolate. 410 // Writes a full snapshot of the Isolate.
408 void WriteFullSnapshot(); 411 void WriteFullSnapshot();
409 412
410 intptr_t VmIsolateSnapshotSize() const { return vm_isolate_snapshot_size_; } 413 intptr_t VmIsolateSnapshotSize() const { return vm_isolate_snapshot_size_; }
411 intptr_t IsolateSnapshotSize() const { return isolate_snapshot_size_; } 414 intptr_t IsolateSnapshotSize() const { return isolate_snapshot_size_; }
412 415
413 private: 416 private:
414 // Writes a snapshot of the VM Isolate. 417 // Writes a snapshot of the VM Isolate.
415 intptr_t WriteVmIsolateSnapshot(); 418 intptr_t WriteVMSnapshot();
416 419
417 // Writes a full snapshot of a regular Dart Isolate. 420 // Writes a full snapshot of a regular Dart Isolate.
418 void WriteIsolateFullSnapshot(intptr_t num_base_objects); 421 void WriteIsolateSnapshot(intptr_t num_base_objects);
419 422
420 Thread* thread_; 423 Thread* thread_;
421 Snapshot::Kind kind_; 424 Snapshot::Kind kind_;
422 uint8_t** vm_isolate_snapshot_buffer_; 425 uint8_t** vm_snapshot_data_buffer_;
423 uint8_t** isolate_snapshot_buffer_; 426 uint8_t** isolate_snapshot_data_buffer_;
424 ReAlloc alloc_; 427 ReAlloc alloc_;
425 intptr_t vm_isolate_snapshot_size_; 428 intptr_t vm_isolate_snapshot_size_;
426 intptr_t isolate_snapshot_size_; 429 intptr_t isolate_snapshot_size_;
427 ForwardList* forward_list_; 430 ForwardList* forward_list_;
428 InstructionsWriter* instructions_writer_; 431 InstructionsWriter* vm_instructions_writer_;
432 InstructionsWriter* isolate_instructions_writer_;
429 Array& token_streams_; 433 Array& token_streams_;
430 Array& saved_symbol_table_; 434 Array& saved_symbol_table_;
431 Array& new_vm_symbol_table_; 435 Array& new_vm_symbol_table_;
432 436
437 // Stats for benchmarking.
438 intptr_t clustered_vm_size_;
439 intptr_t clustered_isolate_size_;
440 intptr_t mapped_data_size_;
441 intptr_t mapped_instructions_size_;
442
433 DISALLOW_COPY_AND_ASSIGN(FullSnapshotWriter); 443 DISALLOW_COPY_AND_ASSIGN(FullSnapshotWriter);
434 }; 444 };
435 445
436 446
437 class VmIsolateSnapshotReader { 447 class FullSnapshotReader {
438 public: 448 public:
439 VmIsolateSnapshotReader(Snapshot::Kind kind, 449 FullSnapshotReader(const Snapshot* snapshot,
440 const uint8_t* buffer, 450 const uint8_t* instructions_buffer,
441 intptr_t size, 451 Thread* thread);
442 const uint8_t* instructions_buffer, 452 ~FullSnapshotReader() {}
443 const uint8_t* data_buffer,
444 Thread* thread)
445 : kind_(kind),
446 thread_(thread),
447 buffer_(buffer),
448 size_(size),
449 instructions_buffer_(instructions_buffer),
450 data_buffer_(data_buffer) {
451 thread->isolate()->set_compilation_allowed(kind != Snapshot::kAppAOT);
452 }
453 453
454 ~VmIsolateSnapshotReader() {} 454 RawApiError* ReadVMSnapshot();
455 455 RawApiError* ReadIsolateSnapshot();
456 RawApiError* ReadVmIsolateSnapshot();
457 456
458 private: 457 private:
459 Snapshot::Kind kind_; 458 Snapshot::Kind kind_;
460 Thread* thread_;
461 const uint8_t* buffer_;
462 intptr_t size_;
463 const uint8_t* instructions_buffer_;
464 const uint8_t* data_buffer_;
465
466 DISALLOW_COPY_AND_ASSIGN(VmIsolateSnapshotReader);
467 };
468
469
470 class IsolateSnapshotReader {
471 public:
472 IsolateSnapshotReader(Snapshot::Kind kind,
473 const uint8_t* buffer,
474 intptr_t size,
475 const uint8_t* instructions_buffer,
476 const uint8_t* data_buffer,
477 Thread* thread)
478 : kind_(kind),
479 thread_(thread),
480 buffer_(buffer),
481 size_(size),
482 instructions_buffer_(instructions_buffer),
483 data_buffer_(data_buffer) {
484 thread->isolate()->set_compilation_allowed(kind != Snapshot::kAppAOT);
485 }
486
487 ~IsolateSnapshotReader() {}
488
489 RawApiError* ReadFullSnapshot();
490
491 private:
492 Snapshot::Kind kind_;
493 Thread* thread_; 459 Thread* thread_;
494 const uint8_t* buffer_; 460 const uint8_t* buffer_;
495 intptr_t size_; 461 intptr_t size_;
496 const uint8_t* instructions_buffer_; 462 const uint8_t* instructions_buffer_;
497 const uint8_t* data_buffer_; 463 const uint8_t* data_buffer_;
498 464
499 DISALLOW_COPY_AND_ASSIGN(IsolateSnapshotReader); 465 DISALLOW_COPY_AND_ASSIGN(FullSnapshotReader);
500 }; 466 };
501 467
502 } // namespace dart 468 } // namespace dart
503 469
504 #endif // RUNTIME_VM_CLUSTERED_SNAPSHOT_H_ 470 #endif // RUNTIME_VM_CLUSTERED_SNAPSHOT_H_
OLDNEW
« no previous file with comments | « runtime/vm/benchmark_test.cc ('k') | runtime/vm/clustered_snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698