Commit 18b1e6d3 authored by jochen's avatar jochen Committed by Commit bot

Enable the embedder to specify what kind of context was disposed

This API is used by Blink to inform V8 about HTML frames being disposed.
Using the optional parameter, Blink can tell V8 whether the disposed
frame was a main frame. In that case, we might want to reset GC
parameters

BUG=none
R=hpayer@chromium.org
LOG=y

Review URL: https://codereview.chromium.org/823583003

Cr-Commit-Position: refs/heads/master@{#25926}
parent 88feffc2
......@@ -5180,8 +5180,11 @@ class V8_EXPORT Isolate {
* these notifications to guide the GC heuristic. Returns the number
* of context disposals - including this one - since the last time
* V8 had a chance to clean up.
*
* The optional parameter |dependant_context| specifies whether the disposed
* context was depending on state from other contexts or not.
*/
int ContextDisposedNotification();
int ContextDisposedNotification(bool dependant_context = true);
/**
* Allows the host application to provide the address of a function that is
......
......@@ -6742,9 +6742,9 @@ void Isolate::LowMemoryNotification() {
}
int Isolate::ContextDisposedNotification() {
int Isolate::ContextDisposedNotification(bool dependant_context) {
i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this);
return isolate->heap()->NotifyContextDisposed();
return isolate->heap()->NotifyContextDisposed(dependant_context);
}
......
......@@ -863,7 +863,8 @@ bool Heap::CollectGarbage(GarbageCollector collector, const char* gc_reason,
}
int Heap::NotifyContextDisposed() {
int Heap::NotifyContextDisposed(bool dependant_context) {
// TODO(hpayer): Reset heap shrinking if dependant_context is false.
if (isolate()->concurrent_recompilation_enabled()) {
// Flush the queued recompilation tasks.
isolate()->optimizing_compiler_thread()->Flush();
......
......@@ -767,7 +767,7 @@ class Heap {
bool IsHeapIterable();
// Notify the heap that a context has been disposed.
int NotifyContextDisposed();
int NotifyContextDisposed(bool dependant_context);
inline void increment_scan_on_scavenge_pages() {
scan_on_scavenge_pages_++;
......
......@@ -170,7 +170,7 @@ RUNTIME_FUNCTION(Runtime_ClearFunctionTypeFeedback) {
RUNTIME_FUNCTION(Runtime_NotifyContextDisposed) {
HandleScope scope(isolate);
DCHECK(args.length() == 0);
isolate->heap()->NotifyContextDisposed();
isolate->heap()->NotifyContextDisposed(true);
return isolate->heap()->undefined_value();
}
......
......@@ -1579,7 +1579,7 @@ TEST(TestInternalWeakLists) {
}
// Force compilation cache cleanup.
CcTest::heap()->NotifyContextDisposed();
CcTest::heap()->NotifyContextDisposed(true);
CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags);
// Dispose the native contexts one by one.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment