| Index: src/heap.cc
|
| diff --git a/src/heap.cc b/src/heap.cc
|
| index b3e8cd72cc2cf7ec8879a8c547dcc7be21e44200..24e4039422cc8ae010b17c9f700f32061d2cd204 100644
|
| --- a/src/heap.cc
|
| +++ b/src/heap.cc
|
| @@ -129,6 +129,8 @@ Heap::Heap()
|
| old_gen_exhausted_(false),
|
| store_buffer_rebuilder_(store_buffer()),
|
| hidden_string_(NULL),
|
| + global_gc_prologue_callback_(NULL),
|
| + global_gc_epilogue_callback_(NULL),
|
| gc_safe_size_of_old_object_(NULL),
|
| total_regexp_code_generated_(0),
|
| tracer_(NULL),
|
| @@ -1053,17 +1055,12 @@ bool Heap::PerformGarbageCollection(GarbageCollector collector,
|
|
|
|
|
| void Heap::CallGCPrologueCallbacks(GCType gc_type, GCCallbackFlags flags) {
|
| + if (gc_type == kGCTypeMarkSweepCompact && global_gc_prologue_callback_) {
|
| + global_gc_prologue_callback_();
|
| + }
|
| for (int i = 0; i < gc_prologue_callbacks_.length(); ++i) {
|
| if (gc_type & gc_prologue_callbacks_[i].gc_type) {
|
| - if (!gc_prologue_callbacks_[i].pass_isolate_) {
|
| - v8::GCPrologueCallback callback =
|
| - reinterpret_cast<v8::GCPrologueCallback>(
|
| - gc_prologue_callbacks_[i].callback);
|
| - callback(gc_type, flags);
|
| - } else {
|
| - v8::Isolate* isolate = reinterpret_cast<v8::Isolate*>(this->isolate());
|
| - gc_prologue_callbacks_[i].callback(isolate, gc_type, flags);
|
| - }
|
| + gc_prologue_callbacks_[i].callback(gc_type, flags);
|
| }
|
| }
|
| }
|
| @@ -1072,18 +1069,12 @@ void Heap::CallGCPrologueCallbacks(GCType gc_type, GCCallbackFlags flags) {
|
| void Heap::CallGCEpilogueCallbacks(GCType gc_type) {
|
| for (int i = 0; i < gc_epilogue_callbacks_.length(); ++i) {
|
| if (gc_type & gc_epilogue_callbacks_[i].gc_type) {
|
| - if (!gc_epilogue_callbacks_[i].pass_isolate_) {
|
| - v8::GCPrologueCallback callback =
|
| - reinterpret_cast<v8::GCPrologueCallback>(
|
| - gc_epilogue_callbacks_[i].callback);
|
| - callback(gc_type, kNoGCCallbackFlags);
|
| - } else {
|
| - v8::Isolate* isolate = reinterpret_cast<v8::Isolate*>(this->isolate());
|
| - gc_epilogue_callbacks_[i].callback(
|
| - isolate, gc_type, kNoGCCallbackFlags);
|
| - }
|
| + gc_epilogue_callbacks_[i].callback(gc_type, kNoGCCallbackFlags);
|
| }
|
| }
|
| + if (gc_type == kGCTypeMarkSweepCompact && global_gc_epilogue_callback_) {
|
| + global_gc_epilogue_callback_();
|
| + }
|
| }
|
|
|
|
|
| @@ -4319,7 +4310,6 @@ MaybeObject* Heap::AllocateWithAllocationSite(Map* map, AllocationSpace space,
|
| AllocationMemento* alloc_memento = reinterpret_cast<AllocationMemento*>(
|
| reinterpret_cast<Address>(result) + map->instance_size());
|
| alloc_memento->set_map_no_write_barrier(allocation_memento_map());
|
| - ASSERT(allocation_site->map() == allocation_site_map());
|
| alloc_memento->set_allocation_site(*allocation_site, SKIP_WRITE_BARRIER);
|
| return result;
|
| }
|
| @@ -5063,7 +5053,6 @@ MaybeObject* Heap::CopyJSObjectWithAllocationSite(
|
| AllocationMemento* alloc_memento;
|
| if (maybe_alloc_memento->To(&alloc_memento)) {
|
| alloc_memento->set_map_no_write_barrier(allocation_memento_map());
|
| - ASSERT(site->map() == allocation_site_map());
|
| alloc_memento->set_allocation_site(site, SKIP_WRITE_BARRIER);
|
| }
|
| }
|
| @@ -5086,7 +5075,6 @@ MaybeObject* Heap::CopyJSObjectWithAllocationSite(
|
| AllocationMemento* alloc_memento = reinterpret_cast<AllocationMemento*>(
|
| reinterpret_cast<Address>(clone) + object_size);
|
| alloc_memento->set_map_no_write_barrier(allocation_memento_map());
|
| - ASSERT(site->map() == allocation_site_map());
|
| alloc_memento->set_allocation_site(site, SKIP_WRITE_BARRIER);
|
| }
|
|
|
| @@ -7080,17 +7068,15 @@ void Heap::TearDown() {
|
| }
|
|
|
|
|
| -void Heap::AddGCPrologueCallback(v8::Isolate::GCPrologueCallback callback,
|
| - GCType gc_type,
|
| - bool pass_isolate) {
|
| +void Heap::AddGCPrologueCallback(GCPrologueCallback callback, GCType gc_type) {
|
| ASSERT(callback != NULL);
|
| - GCPrologueCallbackPair pair(callback, gc_type, pass_isolate);
|
| + GCPrologueCallbackPair pair(callback, gc_type);
|
| ASSERT(!gc_prologue_callbacks_.Contains(pair));
|
| return gc_prologue_callbacks_.Add(pair);
|
| }
|
|
|
|
|
| -void Heap::RemoveGCPrologueCallback(v8::Isolate::GCPrologueCallback callback) {
|
| +void Heap::RemoveGCPrologueCallback(GCPrologueCallback callback) {
|
| ASSERT(callback != NULL);
|
| for (int i = 0; i < gc_prologue_callbacks_.length(); ++i) {
|
| if (gc_prologue_callbacks_[i].callback == callback) {
|
| @@ -7102,17 +7088,15 @@ void Heap::RemoveGCPrologueCallback(v8::Isolate::GCPrologueCallback callback) {
|
| }
|
|
|
|
|
| -void Heap::AddGCEpilogueCallback(v8::Isolate::GCEpilogueCallback callback,
|
| - GCType gc_type,
|
| - bool pass_isolate) {
|
| +void Heap::AddGCEpilogueCallback(GCEpilogueCallback callback, GCType gc_type) {
|
| ASSERT(callback != NULL);
|
| - GCEpilogueCallbackPair pair(callback, gc_type, pass_isolate);
|
| + GCEpilogueCallbackPair pair(callback, gc_type);
|
| ASSERT(!gc_epilogue_callbacks_.Contains(pair));
|
| return gc_epilogue_callbacks_.Add(pair);
|
| }
|
|
|
|
|
| -void Heap::RemoveGCEpilogueCallback(v8::Isolate::GCEpilogueCallback callback) {
|
| +void Heap::RemoveGCEpilogueCallback(GCEpilogueCallback callback) {
|
| ASSERT(callback != NULL);
|
| for (int i = 0; i < gc_epilogue_callbacks_.length(); ++i) {
|
| if (gc_epilogue_callbacks_[i].callback == callback) {
|
|
|