| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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_PAGES_H_ | 5 #ifndef VM_PAGES_H_ |
| 6 #define VM_PAGES_H_ | 6 #define VM_PAGES_H_ |
| 7 | 7 |
| 8 #include "vm/freelist.h" | 8 #include "vm/freelist.h" |
| 9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
| 10 #include "vm/lockers.h" | 10 #include "vm/lockers.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 class Heap; | 24 class Heap; |
| 25 class JSONObject; | 25 class JSONObject; |
| 26 class ObjectPointerVisitor; | 26 class ObjectPointerVisitor; |
| 27 | 27 |
| 28 // A page containing old generation objects. | 28 // A page containing old generation objects. |
| 29 class HeapPage { | 29 class HeapPage { |
| 30 public: | 30 public: |
| 31 enum PageType { | 31 enum PageType { |
| 32 kData = 0, | 32 kData = 0, |
| 33 kExecutable, | 33 kExecutable, |
| 34 kReadOnlyData, |
| 34 kNumPageTypes | 35 kNumPageTypes |
| 35 }; | 36 }; |
| 36 | 37 |
| 37 HeapPage* next() const { return next_; } | 38 HeapPage* next() const { return next_; } |
| 38 void set_next(HeapPage* next) { next_ = next; } | 39 void set_next(HeapPage* next) { next_ = next; } |
| 39 | 40 |
| 40 bool Contains(uword addr) { | 41 bool Contains(uword addr) { |
| 41 return memory_->Contains(addr); | 42 return memory_->Contains(addr); |
| 42 } | 43 } |
| 43 | 44 |
| 44 uword object_start() const { | 45 uword object_start() const { |
| 45 return memory_->start() + ObjectStartOffset(); | 46 return memory_->start() + ObjectStartOffset(); |
| 46 } | 47 } |
| 47 uword object_end() const { | 48 uword object_end() const { |
| 48 return object_end_; | 49 return object_end_; |
| 49 } | 50 } |
| 50 | 51 |
| 51 PageType type() const { | 52 PageType type() const { |
| 52 return executable_ ? kExecutable : kData; | 53 return type_; |
| 53 } | 54 } |
| 54 | 55 |
| 55 void VisitObjects(ObjectVisitor* visitor) const; | 56 void VisitObjects(ObjectVisitor* visitor) const; |
| 56 void VisitObjectPointers(ObjectPointerVisitor* visitor) const; | 57 void VisitObjectPointers(ObjectPointerVisitor* visitor) const; |
| 57 | 58 |
| 58 RawObject* FindObject(FindObjectVisitor* visitor) const; | 59 RawObject* FindObject(FindObjectVisitor* visitor) const; |
| 59 | 60 |
| 60 void WriteProtect(bool read_only); | 61 void WriteProtect(bool read_only); |
| 61 | 62 |
| 62 static intptr_t ObjectStartOffset() { | 63 static intptr_t ObjectStartOffset() { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 73 static HeapPage* Initialize(VirtualMemory* memory, PageType type); | 74 static HeapPage* Initialize(VirtualMemory* memory, PageType type); |
| 74 static HeapPage* Allocate(intptr_t size_in_words, PageType type); | 75 static HeapPage* Allocate(intptr_t size_in_words, PageType type); |
| 75 | 76 |
| 76 // Deallocate the virtual memory backing this page. The page pointer to this | 77 // Deallocate the virtual memory backing this page. The page pointer to this |
| 77 // page becomes immediately inaccessible. | 78 // page becomes immediately inaccessible. |
| 78 void Deallocate(); | 79 void Deallocate(); |
| 79 | 80 |
| 80 VirtualMemory* memory_; | 81 VirtualMemory* memory_; |
| 81 HeapPage* next_; | 82 HeapPage* next_; |
| 82 uword object_end_; | 83 uword object_end_; |
| 83 bool executable_; | 84 PageType type_; |
| 84 | 85 |
| 85 friend class PageSpace; | 86 friend class PageSpace; |
| 86 | 87 |
| 87 DISALLOW_ALLOCATION(); | 88 DISALLOW_ALLOCATION(); |
| 88 DISALLOW_IMPLICIT_CONSTRUCTORS(HeapPage); | 89 DISALLOW_IMPLICIT_CONSTRUCTORS(HeapPage); |
| 89 }; | 90 }; |
| 90 | 91 |
| 91 | 92 |
| 92 // The history holds the timing information of the last garbage collection | 93 // The history holds the timing information of the last garbage collection |
| 93 // runs. | 94 // runs. |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 // and illegal in debug mode. | 340 // and illegal in debug mode. |
| 340 uword TryAllocateSmiInitializedLocked(intptr_t size, | 341 uword TryAllocateSmiInitializedLocked(intptr_t size, |
| 341 GrowthPolicy growth_policy); | 342 GrowthPolicy growth_policy); |
| 342 | 343 |
| 343 // Bump block allocation from generated code. | 344 // Bump block allocation from generated code. |
| 344 uword* TopAddress() { return &bump_top_; } | 345 uword* TopAddress() { return &bump_top_; } |
| 345 uword* EndAddress() { return &bump_end_; } | 346 uword* EndAddress() { return &bump_end_; } |
| 346 static intptr_t top_offset() { return OFFSET_OF(PageSpace, bump_top_); } | 347 static intptr_t top_offset() { return OFFSET_OF(PageSpace, bump_top_); } |
| 347 static intptr_t end_offset() { return OFFSET_OF(PageSpace, bump_end_); } | 348 static intptr_t end_offset() { return OFFSET_OF(PageSpace, bump_end_); } |
| 348 | 349 |
| 349 void SetupInstructionsSnapshotPage(void* pointer, uword size); | 350 void SetupExternalPage(void* pointer, uword size, bool is_executable); |
| 350 | 351 |
| 351 private: | 352 private: |
| 352 // Ids for time and data records in Heap::GCStats. | 353 // Ids for time and data records in Heap::GCStats. |
| 353 enum { | 354 enum { |
| 354 // Time | 355 // Time |
| 355 kMarkObjects = 0, | 356 kMarkObjects = 0, |
| 356 kResetFreeLists = 1, | 357 kResetFreeLists = 1, |
| 357 kSweepPages = 2, | 358 kSweepPages = 2, |
| 358 kSweepLargePages = 3, | 359 kSweepLargePages = 3, |
| 359 // Data | 360 // Data |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 friend class HeapIterationScope; | 449 friend class HeapIterationScope; |
| 449 friend class PageSpaceController; | 450 friend class PageSpaceController; |
| 450 friend class SweeperTask; | 451 friend class SweeperTask; |
| 451 | 452 |
| 452 DISALLOW_IMPLICIT_CONSTRUCTORS(PageSpace); | 453 DISALLOW_IMPLICIT_CONSTRUCTORS(PageSpace); |
| 453 }; | 454 }; |
| 454 | 455 |
| 455 } // namespace dart | 456 } // namespace dart |
| 456 | 457 |
| 457 #endif // VM_PAGES_H_ | 458 #endif // VM_PAGES_H_ |
| OLD | NEW |