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

Unified Diff: runtime/vm/handles.h

Issue 11428067: Merge the Merlin heap tracing to top-of-trunk. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: address review comments Created 8 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/gc_sweeper.cc ('k') | runtime/vm/handles_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/handles.h
diff --git a/runtime/vm/handles.h b/runtime/vm/handles.h
index a4fe592b77790f59c04dc2e1995c1c87ce5cec7d..7d317c495233e4b7a886f8274166ca8ca6104a0f 100644
--- a/runtime/vm/handles.h
+++ b/runtime/vm/handles.h
@@ -75,7 +75,8 @@ class Handles {
Handles()
: zone_blocks_(NULL),
first_scoped_block_(NULL),
- scoped_blocks_(&first_scoped_block_) {
+ scoped_blocks_(&first_scoped_block_),
+ last_visited_block_(NULL) {
}
~Handles() {
DeleteAll();
@@ -84,6 +85,16 @@ class Handles {
// Visit all object pointers stored in the various handles.
void VisitObjectPointers(ObjectPointerVisitor* visitor);
+ // Visit all the scoped handles.
+ void VisitScopedHandles(ObjectPointerVisitor* visitor);
+
+ // Visit all blocks that have been added since the last time
+ // this method was called.
+ // Be careful with this, since multiple users of this method could
+ // interfere with eachother.
+ // Currently only used by GC trace facility.
+ void VisitUnvisitedScopedHandles(ObjectPointerVisitor* visitor);
+
// Visit all of the various handles.
void Visit(HandleVisitor* visitor);
@@ -126,7 +137,8 @@ class Handles {
class HandlesBlock {
public:
explicit HandlesBlock(HandlesBlock* next)
- : next_handle_slot_(0),
+ : last_visited_handle_(0),
+ next_handle_slot_(0),
next_block_(next) { }
~HandlesBlock();
@@ -156,6 +168,10 @@ class Handles {
// Visit all object pointers in the handle block.
void VisitObjectPointers(ObjectPointerVisitor* visitor);
+ // Visit all the object pointers in the block since the last time this
+ // method was called.
+ void VisitUnvisitedObjectPointers(ObjectPointerVisitor* visitor);
+
// Visit all of the handles in the handle block.
void Visit(HandleVisitor* visitor);
@@ -176,6 +192,10 @@ class Handles {
void set_next_block(HandlesBlock* next) { next_block_ = next; }
private:
+ // Last handle visited by VisitUnvisitedObjectPointers. Handles
+ // at, or beyond this index are new.
+ intptr_t last_visited_handle_;
+
uword data_[kHandleSizeInWords * kHandlesPerChunk]; // Handles area.
intptr_t next_handle_slot_; // Next slot for allocation in current block.
HandlesBlock* next_block_; // Link to next block of handles.
@@ -212,6 +232,8 @@ class Handles {
HandlesBlock* zone_blocks_; // List of zone handles.
HandlesBlock first_scoped_block_; // First block of scoped handles.
HandlesBlock* scoped_blocks_; // List of scoped handles.
+ // Last block visited by VisitUnvisitedHandles.
+ HandlesBlock* last_visited_block_;
friend class HandleScope;
friend class Symbols;
« no previous file with comments | « runtime/vm/gc_sweeper.cc ('k') | runtime/vm/handles_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698