58
58
namespace v8 {
59
59
namespace internal {
60
60
61
- bool Heap::GCCallbackPair::operator ==(const Heap::GCCallbackPair& other) const {
62
- return other.callback == callback;
61
+ bool Heap::GCCallbackTuple::operator ==(
62
+ const Heap::GCCallbackTuple& other) const {
63
+ return other.callback == callback && other.data == data;
63
64
}
64
65
65
- Heap::GCCallbackPair & Heap::GCCallbackPair ::operator =(
66
- const Heap::GCCallbackPair & other) {
66
+ Heap::GCCallbackTuple & Heap::GCCallbackTuple ::operator =(
67
+ const Heap::GCCallbackTuple & other) {
67
68
callback = other.callback ;
68
69
gc_type = other.gc_type ;
69
- pass_isolate = other.pass_isolate ;
70
+ data = other.data ;
70
71
return *this ;
71
72
}
72
73
@@ -1592,35 +1593,21 @@ bool Heap::PerformGarbageCollection(
1592
1593
void Heap::CallGCPrologueCallbacks (GCType gc_type, GCCallbackFlags flags) {
1593
1594
RuntimeCallTimerScope runtime_timer (isolate (),
1594
1595
&RuntimeCallStats::GCPrologueCallback);
1595
- for (const GCCallbackPair & info : gc_prologue_callbacks_) {
1596
+ for (const GCCallbackTuple & info : gc_prologue_callbacks_) {
1596
1597
if (gc_type & info.gc_type ) {
1597
- if (!info.pass_isolate ) {
1598
- v8::GCCallback callback =
1599
- reinterpret_cast <v8::GCCallback>(info.callback );
1600
- callback (gc_type, flags);
1601
- } else {
1602
- v8::Isolate* isolate = reinterpret_cast <v8::Isolate*>(this ->isolate ());
1603
- info.callback (isolate, gc_type, flags);
1604
- }
1598
+ v8::Isolate* isolate = reinterpret_cast <v8::Isolate*>(this ->isolate ());
1599
+ info.callback (isolate, gc_type, flags, info.data );
1605
1600
}
1606
1601
}
1607
1602
}
1608
1603
1609
-
1610
- void Heap::CallGCEpilogueCallbacks (GCType gc_type,
1611
- GCCallbackFlags gc_callback_flags) {
1604
+ void Heap::CallGCEpilogueCallbacks (GCType gc_type, GCCallbackFlags flags) {
1612
1605
RuntimeCallTimerScope runtime_timer (isolate (),
1613
1606
&RuntimeCallStats::GCEpilogueCallback);
1614
- for (const GCCallbackPair & info : gc_epilogue_callbacks_) {
1607
+ for (const GCCallbackTuple & info : gc_epilogue_callbacks_) {
1615
1608
if (gc_type & info.gc_type ) {
1616
- if (!info.pass_isolate ) {
1617
- v8::GCCallback callback =
1618
- reinterpret_cast <v8::GCCallback>(info.callback );
1619
- callback (gc_type, gc_callback_flags);
1620
- } else {
1621
- v8::Isolate* isolate = reinterpret_cast <v8::Isolate*>(this ->isolate ());
1622
- info.callback (isolate, gc_type, gc_callback_flags);
1623
- }
1609
+ v8::Isolate* isolate = reinterpret_cast <v8::Isolate*>(this ->isolate ());
1610
+ info.callback (isolate, gc_type, flags, info.data );
1624
1611
}
1625
1612
}
1626
1613
}
@@ -6192,21 +6179,21 @@ void Heap::TearDown() {
6192
6179
memory_allocator_ = nullptr ;
6193
6180
}
6194
6181
6195
-
6196
- void Heap::AddGCPrologueCallback (v8::Isolate::GCCallback callback,
6197
- GCType gc_type, bool pass_isolate) {
6182
+ void Heap::AddGCPrologueCallback (v8::Isolate::GCCallbackWithData callback,
6183
+ GCType gc_type, void * data) {
6198
6184
DCHECK_NOT_NULL (callback);
6199
6185
DCHECK (gc_prologue_callbacks_.end () ==
6200
6186
std::find (gc_prologue_callbacks_.begin (), gc_prologue_callbacks_.end (),
6201
- GCCallbackPair (callback, gc_type, pass_isolate )));
6202
- gc_prologue_callbacks_.emplace_back (callback, gc_type, pass_isolate );
6187
+ GCCallbackTuple (callback, gc_type, data )));
6188
+ gc_prologue_callbacks_.emplace_back (callback, gc_type, data );
6203
6189
}
6204
6190
6205
-
6206
- void Heap::RemoveGCPrologueCallback (v8::Isolate::GCCallback callback ) {
6191
+ void Heap::RemoveGCPrologueCallback (v8::Isolate::GCCallbackWithData callback,
6192
+ void * data ) {
6207
6193
DCHECK_NOT_NULL (callback);
6208
6194
for (size_t i = 0 ; i < gc_prologue_callbacks_.size (); i++) {
6209
- if (gc_prologue_callbacks_[i].callback == callback) {
6195
+ if (gc_prologue_callbacks_[i].callback == callback &&
6196
+ gc_prologue_callbacks_[i].data == data) {
6210
6197
gc_prologue_callbacks_[i] = gc_prologue_callbacks_.back ();
6211
6198
gc_prologue_callbacks_.pop_back ();
6212
6199
return ;
@@ -6215,21 +6202,21 @@ void Heap::RemoveGCPrologueCallback(v8::Isolate::GCCallback callback) {
6215
6202
UNREACHABLE ();
6216
6203
}
6217
6204
6218
-
6219
- void Heap::AddGCEpilogueCallback (v8::Isolate::GCCallback callback,
6220
- GCType gc_type, bool pass_isolate) {
6205
+ void Heap::AddGCEpilogueCallback (v8::Isolate::GCCallbackWithData callback,
6206
+ GCType gc_type, void * data) {
6221
6207
DCHECK_NOT_NULL (callback);
6222
6208
DCHECK (gc_epilogue_callbacks_.end () ==
6223
6209
std::find (gc_epilogue_callbacks_.begin (), gc_epilogue_callbacks_.end (),
6224
- GCCallbackPair (callback, gc_type, pass_isolate )));
6225
- gc_epilogue_callbacks_.emplace_back (callback, gc_type, pass_isolate );
6210
+ GCCallbackTuple (callback, gc_type, data )));
6211
+ gc_epilogue_callbacks_.emplace_back (callback, gc_type, data );
6226
6212
}
6227
6213
6228
-
6229
- void Heap::RemoveGCEpilogueCallback (v8::Isolate::GCCallback callback ) {
6214
+ void Heap::RemoveGCEpilogueCallback (v8::Isolate::GCCallbackWithData callback,
6215
+ void * data ) {
6230
6216
DCHECK_NOT_NULL (callback);
6231
6217
for (size_t i = 0 ; i < gc_epilogue_callbacks_.size (); i++) {
6232
- if (gc_epilogue_callbacks_[i].callback == callback) {
6218
+ if (gc_epilogue_callbacks_[i].callback == callback &&
6219
+ gc_epilogue_callbacks_[i].data == data) {
6233
6220
gc_epilogue_callbacks_[i] = gc_epilogue_callbacks_.back ();
6234
6221
gc_epilogue_callbacks_.pop_back ();
6235
6222
return ;
0 commit comments