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

Side by Side Diff: vm/snapshot.h

Issue 10908185: Do not allocate a buffer of 64KB by default when writing a message out. Start (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « vm/object.cc ('k') | vm/snapshot_test.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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 VM_SNAPSHOT_H_ 5 #ifndef VM_SNAPSHOT_H_
6 #define VM_SNAPSHOT_H_ 6 #define VM_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 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 value = SerializedHeaderData::update(id, value); 381 value = SerializedHeaderData::update(id, value);
382 WriteIntptrValue(value); 382 WriteIntptrValue(value);
383 } 383 }
384 384
385 // Write out a buffer of bytes. 385 // Write out a buffer of bytes.
386 void WriteBytes(const uint8_t* addr, intptr_t len) { 386 void WriteBytes(const uint8_t* addr, intptr_t len) {
387 stream_.WriteBytes(addr, len); 387 stream_.WriteBytes(addr, len);
388 } 388 }
389 389
390 protected: 390 protected:
391 BaseWriter(uint8_t** buffer, ReAlloc alloc) : stream_(buffer, alloc) { 391 BaseWriter(uint8_t** buffer,
392 ReAlloc alloc,
393 intptr_t increment_size) : stream_(buffer, alloc, increment_size) {
392 ASSERT(buffer != NULL); 394 ASSERT(buffer != NULL);
393 ASSERT(alloc != NULL); 395 ASSERT(alloc != NULL);
394 } 396 }
395 ~BaseWriter() { } 397 ~BaseWriter() { }
396 398
397 void ReserveHeader() { 399 void ReserveHeader() {
398 // Make room for recording snapshot buffer size. 400 // Make room for recording snapshot buffer size.
399 stream_.set_current(stream_.buffer() + Snapshot::kHeaderSize); 401 stream_.set_current(stream_.buffer() + Snapshot::kHeaderSize);
400 } 402 }
401 403
402 void FillHeader(Snapshot::Kind kind) { 404 void FillHeader(Snapshot::Kind kind) {
403 int32_t* data = reinterpret_cast<int32_t*>(stream_.buffer()); 405 int32_t* data = reinterpret_cast<int32_t*>(stream_.buffer());
404 data[Snapshot::kLengthIndex] = stream_.bytes_written(); 406 data[Snapshot::kLengthIndex] = stream_.bytes_written();
405 data[Snapshot::kSnapshotFlagIndex] = kind; 407 data[Snapshot::kSnapshotFlagIndex] = kind;
406 } 408 }
407 409
408 private: 410 private:
409 WriteStream stream_; 411 WriteStream stream_;
410 412
411 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseWriter); 413 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseWriter);
412 }; 414 };
413 415
414 416
415 class SnapshotWriter : public BaseWriter { 417 class SnapshotWriter : public BaseWriter {
416 protected: 418 protected:
417 SnapshotWriter(Snapshot::Kind kind, uint8_t** buffer, ReAlloc alloc) 419 SnapshotWriter(Snapshot::Kind kind,
418 : BaseWriter(buffer, alloc), 420 uint8_t** buffer,
421 ReAlloc alloc,
422 intptr_t increment_size)
423 : BaseWriter(buffer, alloc, increment_size),
419 kind_(kind), 424 kind_(kind),
420 object_store_(Isolate::Current()->object_store()), 425 object_store_(Isolate::Current()->object_store()),
421 class_table_(Isolate::Current()->class_table()), 426 class_table_(Isolate::Current()->class_table()),
422 forward_list_() { 427 forward_list_() {
423 } 428 }
424 429
425 public: 430 public:
426 // Snapshot kind. 431 // Snapshot kind.
427 Snapshot::Kind kind() const { return kind_; } 432 Snapshot::Kind kind() const { return kind_; }
428 433
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 friend class RawScript; 490 friend class RawScript;
486 friend class RawTokenStream; 491 friend class RawTokenStream;
487 friend class RawTypeArguments; 492 friend class RawTypeArguments;
488 friend class SnapshotWriterVisitor; 493 friend class SnapshotWriterVisitor;
489 DISALLOW_COPY_AND_ASSIGN(SnapshotWriter); 494 DISALLOW_COPY_AND_ASSIGN(SnapshotWriter);
490 }; 495 };
491 496
492 497
493 class FullSnapshotWriter : public SnapshotWriter { 498 class FullSnapshotWriter : public SnapshotWriter {
494 public: 499 public:
500 static const intptr_t kIncrementSize = 64 * KB;
495 FullSnapshotWriter(uint8_t** buffer, ReAlloc alloc) 501 FullSnapshotWriter(uint8_t** buffer, ReAlloc alloc)
496 : SnapshotWriter(Snapshot::kFull, buffer, alloc) { 502 : SnapshotWriter(Snapshot::kFull, buffer, alloc, kIncrementSize) {
497 ASSERT(buffer != NULL); 503 ASSERT(buffer != NULL);
498 ASSERT(alloc != NULL); 504 ASSERT(alloc != NULL);
499 } 505 }
500 ~FullSnapshotWriter() { } 506 ~FullSnapshotWriter() { }
501 507
502 // Writes a full snapshot of the Isolate. 508 // Writes a full snapshot of the Isolate.
503 void WriteFullSnapshot(); 509 void WriteFullSnapshot();
504 510
505 private: 511 private:
506 DISALLOW_COPY_AND_ASSIGN(FullSnapshotWriter); 512 DISALLOW_COPY_AND_ASSIGN(FullSnapshotWriter);
507 }; 513 };
508 514
509 515
510 class ScriptSnapshotWriter : public SnapshotWriter { 516 class ScriptSnapshotWriter : public SnapshotWriter {
511 public: 517 public:
518 static const intptr_t kIncrementSize = 64 * KB;
512 ScriptSnapshotWriter(uint8_t** buffer, ReAlloc alloc) 519 ScriptSnapshotWriter(uint8_t** buffer, ReAlloc alloc)
513 : SnapshotWriter(Snapshot::kScript, buffer, alloc) { 520 : SnapshotWriter(Snapshot::kScript, buffer, alloc, kIncrementSize) {
514 ASSERT(buffer != NULL); 521 ASSERT(buffer != NULL);
515 ASSERT(alloc != NULL); 522 ASSERT(alloc != NULL);
516 } 523 }
517 ~ScriptSnapshotWriter() { } 524 ~ScriptSnapshotWriter() { }
518 525
519 // Writes a partial snapshot of the script. 526 // Writes a partial snapshot of the script.
520 void WriteScriptSnapshot(const Library& lib); 527 void WriteScriptSnapshot(const Library& lib);
521 528
522 private: 529 private:
523 DISALLOW_COPY_AND_ASSIGN(ScriptSnapshotWriter); 530 DISALLOW_COPY_AND_ASSIGN(ScriptSnapshotWriter);
524 }; 531 };
525 532
526 533
527 class MessageWriter : public SnapshotWriter { 534 class MessageWriter : public SnapshotWriter {
528 public: 535 public:
536 static const intptr_t kIncrementSize = 512;
529 MessageWriter(uint8_t** buffer, ReAlloc alloc) 537 MessageWriter(uint8_t** buffer, ReAlloc alloc)
530 : SnapshotWriter(Snapshot::kMessage, buffer, alloc) { 538 : SnapshotWriter(Snapshot::kMessage, buffer, alloc, kIncrementSize) {
531 ASSERT(buffer != NULL); 539 ASSERT(buffer != NULL);
532 ASSERT(alloc != NULL); 540 ASSERT(alloc != NULL);
533 } 541 }
534 ~MessageWriter() { } 542 ~MessageWriter() { }
535 543
536 void WriteMessage(const Object& obj); 544 void WriteMessage(const Object& obj);
537 545
538 private: 546 private:
539 DISALLOW_COPY_AND_ASSIGN(MessageWriter); 547 DISALLOW_COPY_AND_ASSIGN(MessageWriter);
540 }; 548 };
(...skipping 18 matching lines...) Expand all
559 private: 567 private:
560 SnapshotWriter* writer_; 568 SnapshotWriter* writer_;
561 bool as_references_; 569 bool as_references_;
562 570
563 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); 571 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor);
564 }; 572 };
565 573
566 } // namespace dart 574 } // namespace dart
567 575
568 #endif // VM_SNAPSHOT_H_ 576 #endif // VM_SNAPSHOT_H_
OLDNEW
« no previous file with comments | « vm/object.cc ('k') | vm/snapshot_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698