mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 14:32:49 +00:00
- Add an isolate field to visitors.
Review URL: https://chromiumcodereview.appspot.com//10502004 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@8337 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
parent
a4711ef435
commit
6a5ef0e692
|
@ -120,7 +120,7 @@ class MarkingVisitor : public ObjectPointerVisitor {
|
||||||
Heap* heap,
|
Heap* heap,
|
||||||
PageSpace* page_space,
|
PageSpace* page_space,
|
||||||
MarkingStack* marking_stack)
|
MarkingStack* marking_stack)
|
||||||
: isolate_(isolate),
|
: ObjectPointerVisitor(isolate),
|
||||||
heap_(heap),
|
heap_(heap),
|
||||||
vm_heap_(Dart::vm_isolate()->heap()),
|
vm_heap_(Dart::vm_isolate()->heap()),
|
||||||
page_space_(page_space),
|
page_space_(page_space),
|
||||||
|
@ -143,7 +143,7 @@ class MarkingVisitor : public ObjectPointerVisitor {
|
||||||
|
|
||||||
// Mark the object and push it on the marking stack.
|
// Mark the object and push it on the marking stack.
|
||||||
ASSERT(!raw_obj->IsMarked());
|
ASSERT(!raw_obj->IsMarked());
|
||||||
RawClass* raw_class = isolate_->class_table()->At(raw_obj->GetClassId());
|
RawClass* raw_class = isolate()->class_table()->At(raw_obj->GetClassId());
|
||||||
raw_obj->SetMarkBit();
|
raw_obj->SetMarkBit();
|
||||||
marking_stack_->Push(raw_obj);
|
marking_stack_->Push(raw_obj);
|
||||||
|
|
||||||
|
@ -178,7 +178,6 @@ class MarkingVisitor : public ObjectPointerVisitor {
|
||||||
MarkAndPush(raw_obj);
|
MarkAndPush(raw_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
Isolate* isolate_;
|
|
||||||
Heap* heap_;
|
Heap* heap_;
|
||||||
Heap* vm_heap_;
|
Heap* vm_heap_;
|
||||||
PageSpace* page_space_;
|
PageSpace* page_space_;
|
||||||
|
|
|
@ -2287,7 +2287,8 @@ class Code : public Object {
|
||||||
// An object finder visitor interface.
|
// An object finder visitor interface.
|
||||||
class FindRawCodeVisitor : public FindObjectVisitor {
|
class FindRawCodeVisitor : public FindObjectVisitor {
|
||||||
public:
|
public:
|
||||||
explicit FindRawCodeVisitor(uword pc) : pc_(pc) { }
|
explicit FindRawCodeVisitor(uword pc)
|
||||||
|
: FindObjectVisitor(Isolate::Current()), pc_(pc) { }
|
||||||
virtual ~FindRawCodeVisitor() { }
|
virtual ~FindRawCodeVisitor() { }
|
||||||
|
|
||||||
// Check if object matches find condition.
|
// Check if object matches find condition.
|
||||||
|
|
|
@ -252,7 +252,7 @@ intptr_t RawObject::SizeFromClass() const {
|
||||||
|
|
||||||
intptr_t RawObject::VisitPointers(ObjectPointerVisitor* visitor) {
|
intptr_t RawObject::VisitPointers(ObjectPointerVisitor* visitor) {
|
||||||
intptr_t size = 0;
|
intptr_t size = 0;
|
||||||
NoHandleScope no_handles(Isolate::Current());
|
NoHandleScope no_handles(visitor->isolate());
|
||||||
|
|
||||||
// Only reasonable to be called on heap objects.
|
// Only reasonable to be called on heap objects.
|
||||||
ASSERT(IsHeapObject());
|
ASSERT(IsHeapObject());
|
||||||
|
|
|
@ -47,8 +47,9 @@ static inline void ForwardTo(uword orignal, uword target) {
|
||||||
|
|
||||||
class ScavengerVisitor : public ObjectPointerVisitor {
|
class ScavengerVisitor : public ObjectPointerVisitor {
|
||||||
public:
|
public:
|
||||||
explicit ScavengerVisitor(Scavenger* scavenger)
|
explicit ScavengerVisitor(Isolate* isolate, Scavenger* scavenger)
|
||||||
: scavenger_(scavenger),
|
: ObjectPointerVisitor(isolate),
|
||||||
|
scavenger_(scavenger),
|
||||||
heap_(scavenger->heap_),
|
heap_(scavenger->heap_),
|
||||||
vm_heap_(Dart::vm_isolate()->heap()) {}
|
vm_heap_(Dart::vm_isolate()->heap()) {}
|
||||||
|
|
||||||
|
@ -377,7 +378,7 @@ void Scavenger::Scavenge(bool invoke_api_callbacks) {
|
||||||
Timer timer(FLAG_verbose_gc, "Scavenge");
|
Timer timer(FLAG_verbose_gc, "Scavenge");
|
||||||
timer.Start();
|
timer.Start();
|
||||||
// Setup the visitor and run a scavenge.
|
// Setup the visitor and run a scavenge.
|
||||||
ScavengerVisitor visitor(this);
|
ScavengerVisitor visitor(isolate, this);
|
||||||
Prologue(isolate, invoke_api_callbacks);
|
Prologue(isolate, invoke_api_callbacks);
|
||||||
IterateRoots(isolate, &visitor, !invoke_api_callbacks);
|
IterateRoots(isolate, &visitor, !invoke_api_callbacks);
|
||||||
ProcessToSpace(&visitor);
|
ProcessToSpace(&visitor);
|
||||||
|
|
|
@ -570,7 +570,8 @@ class ScriptSnapshotWriter : public SnapshotWriter {
|
||||||
// objects to a snap shot.
|
// objects to a snap shot.
|
||||||
class SnapshotWriterVisitor : public ObjectPointerVisitor {
|
class SnapshotWriterVisitor : public ObjectPointerVisitor {
|
||||||
public:
|
public:
|
||||||
explicit SnapshotWriterVisitor(SnapshotWriter* writer) : writer_(writer) {}
|
explicit SnapshotWriterVisitor(SnapshotWriter* writer)
|
||||||
|
: ObjectPointerVisitor(Isolate::Current()), writer_(writer) {}
|
||||||
|
|
||||||
virtual void VisitPointers(RawObject** first, RawObject** last);
|
virtual void VisitPointers(RawObject** first, RawObject** last);
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ void VerifyPointersVisitor::VisitPointers(RawObject** first, RawObject** last) {
|
||||||
!Dart::vm_isolate()->heap()->Contains(obj_addr)) {
|
!Dart::vm_isolate()->heap()->Contains(obj_addr)) {
|
||||||
FATAL1("Invalid object pointer encountered 0x%lx\n", obj_addr);
|
FATAL1("Invalid object pointer encountered 0x%lx\n", obj_addr);
|
||||||
}
|
}
|
||||||
raw_obj->Validate(isolate_);
|
raw_obj->Validate(isolate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,15 +29,15 @@ class RawObject;
|
||||||
// the pointers visited are contained in the isolate heap.
|
// the pointers visited are contained in the isolate heap.
|
||||||
class VerifyPointersVisitor : public ObjectPointerVisitor {
|
class VerifyPointersVisitor : public ObjectPointerVisitor {
|
||||||
public:
|
public:
|
||||||
explicit VerifyPointersVisitor(Isolate* isolate) : isolate_(isolate) {}
|
explicit VerifyPointersVisitor(Isolate* isolate)
|
||||||
|
: ObjectPointerVisitor(isolate) {
|
||||||
|
}
|
||||||
|
|
||||||
virtual void VisitPointers(RawObject** first, RawObject** last);
|
virtual void VisitPointers(RawObject** first, RawObject** last);
|
||||||
|
|
||||||
static void VerifyPointers();
|
static void VerifyPointers();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Isolate* isolate_;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(VerifyPointersVisitor);
|
DISALLOW_COPY_AND_ASSIGN(VerifyPointersVisitor);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,17 @@
|
||||||
namespace dart {
|
namespace dart {
|
||||||
|
|
||||||
// Forward declarations.
|
// Forward declarations.
|
||||||
|
class Isolate;
|
||||||
class RawObject;
|
class RawObject;
|
||||||
|
|
||||||
// An object pointer visitor interface.
|
// An object pointer visitor interface.
|
||||||
class ObjectPointerVisitor {
|
class ObjectPointerVisitor {
|
||||||
public:
|
public:
|
||||||
|
explicit ObjectPointerVisitor(Isolate* isolate) : isolate_(isolate) {}
|
||||||
virtual ~ObjectPointerVisitor() {}
|
virtual ~ObjectPointerVisitor() {}
|
||||||
|
|
||||||
|
Isolate* isolate() const { return isolate_; }
|
||||||
|
|
||||||
// Range of pointers to visit 'first' <= pointer <= 'last'.
|
// Range of pointers to visit 'first' <= pointer <= 'last'.
|
||||||
virtual void VisitPointers(RawObject** first, RawObject** last) = 0;
|
virtual void VisitPointers(RawObject** first, RawObject** last) = 0;
|
||||||
|
|
||||||
|
@ -26,16 +30,27 @@ class ObjectPointerVisitor {
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisitPointer(RawObject** p) { VisitPointers(p , p); }
|
void VisitPointer(RawObject** p) { VisitPointers(p , p); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
Isolate* isolate_;
|
||||||
|
|
||||||
|
DISALLOW_IMPLICIT_CONSTRUCTORS(ObjectPointerVisitor);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// An object finder visitor interface.
|
// An object finder visitor interface.
|
||||||
class FindObjectVisitor {
|
class FindObjectVisitor {
|
||||||
public:
|
public:
|
||||||
|
explicit FindObjectVisitor(Isolate* isolate) : isolate_(isolate) {}
|
||||||
virtual ~FindObjectVisitor() {}
|
virtual ~FindObjectVisitor() {}
|
||||||
|
|
||||||
// Check if object matches find condition.
|
// Check if object matches find condition.
|
||||||
virtual bool FindObject(RawObject* obj) = 0;
|
virtual bool FindObject(RawObject* obj) = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Isolate* isolate_;
|
||||||
|
|
||||||
|
DISALLOW_IMPLICIT_CONSTRUCTORS(FindObjectVisitor);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace dart
|
} // namespace dart
|
||||||
|
|
Loading…
Reference in a new issue