Flush the optimizing compilejob queue when doing memory pressure GCs
R=ulan@chromium.org,hpayer@chromium.org BUG= Review-Url: https://codereview.chromium.org/2145683003 Cr-Commit-Position: refs/heads/master@{#37726}
This commit is contained in:
parent
31799674e2
commit
906cb204d0
@ -23,6 +23,7 @@
|
|||||||
#include "src/frames-inl.h"
|
#include "src/frames-inl.h"
|
||||||
#include "src/full-codegen/full-codegen.h"
|
#include "src/full-codegen/full-codegen.h"
|
||||||
#include "src/globals.h"
|
#include "src/globals.h"
|
||||||
|
#include "src/heap/heap.h"
|
||||||
#include "src/interpreter/interpreter.h"
|
#include "src/interpreter/interpreter.h"
|
||||||
#include "src/isolate-inl.h"
|
#include "src/isolate-inl.h"
|
||||||
#include "src/log-inl.h"
|
#include "src/log-inl.h"
|
||||||
@ -705,6 +706,15 @@ bool GetOptimizedCodeLater(CompilationJob* job) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isolate->heap()->HighMemoryPressure()) {
|
||||||
|
if (FLAG_trace_concurrent_recompilation) {
|
||||||
|
PrintF(" ** High memory pressure, will retry optimizing ");
|
||||||
|
info->closure()->ShortPrint();
|
||||||
|
PrintF(" later.\n");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// All handles below this point will be allocated in a deferred handle scope
|
// All handles below this point will be allocated in a deferred handle scope
|
||||||
// that is detached and handed off to the background thread when we return.
|
// that is detached and handed off to the background thread when we return.
|
||||||
CompilationHandleScope handle_scope(info);
|
CompilationHandleScope handle_scope(info);
|
||||||
|
@ -4373,6 +4373,13 @@ class MemoryPressureInterruptTask : public CancelableTask {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void Heap::CheckMemoryPressure() {
|
void Heap::CheckMemoryPressure() {
|
||||||
|
if (HighMemoryPressure()) {
|
||||||
|
if (isolate()->concurrent_recompilation_enabled()) {
|
||||||
|
// The optimizing compiler may be unnecessarily holding on to memory.
|
||||||
|
DisallowHeapAllocation no_recursive_gc;
|
||||||
|
isolate()->optimizing_compile_dispatcher()->Flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
if (memory_pressure_level_.Value() == MemoryPressureLevel::kCritical) {
|
if (memory_pressure_level_.Value() == MemoryPressureLevel::kCritical) {
|
||||||
CollectGarbageOnMemoryPressure("memory pressure");
|
CollectGarbageOnMemoryPressure("memory pressure");
|
||||||
} else if (memory_pressure_level_.Value() == MemoryPressureLevel::kModerate) {
|
} else if (memory_pressure_level_.Value() == MemoryPressureLevel::kModerate) {
|
||||||
|
Loading…
Reference in New Issue
Block a user