Commit 7d170e9c authored by rmcilroy@chromium.org's avatar rmcilroy@chromium.org

Enable V8 idle tasks.

Enables posting of idle tasks, via the blink scheduler, which notify V8 of idle
time when it can perform GC work.

BUG=421880

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

git-svn-id: svn://svn.chromium.org/blink/trunk@183888 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 151a4e46
...@@ -50,7 +50,9 @@ ...@@ -50,7 +50,9 @@
#include "core/inspector/ScriptArguments.h" #include "core/inspector/ScriptArguments.h"
#include "core/inspector/ScriptCallStack.h" #include "core/inspector/ScriptCallStack.h"
#include "platform/EventDispatchForbiddenScope.h" #include "platform/EventDispatchForbiddenScope.h"
#include "platform/RuntimeEnabledFeatures.h"
#include "platform/TraceEvent.h" #include "platform/TraceEvent.h"
#include "platform/scheduler/Scheduler.h"
#include "public/platform/Platform.h" #include "public/platform/Platform.h"
#include "wtf/RefPtr.h" #include "wtf/RefPtr.h"
#include "wtf/text/WTFString.h" #include "wtf/text/WTFString.h"
...@@ -281,6 +283,31 @@ static bool codeGenerationCheckCallbackInMainThread(v8::Local<v8::Context> conte ...@@ -281,6 +283,31 @@ static bool codeGenerationCheckCallbackInMainThread(v8::Local<v8::Context> conte
return false; return false;
} }
static void idleGCTaskInMainThread(double deadlineSeconds);
static void postIdleGCTaskMainThread()
{
if (RuntimeEnabledFeatures::v8IdleTasksEnabled()) {
Scheduler* scheduler = Scheduler::shared();
if (scheduler)
scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(idleGCTaskInMainThread));
}
}
static void idleGCTaskInMainThread(double deadlineSeconds)
{
ASSERT(isMainThread());
ASSERT(RuntimeEnabledFeatures::v8IdleTasksEnabled());
v8::Isolate* isolate = v8::Isolate::GetCurrent();
// FIXME: Change V8's API to take a deadline - http://crbug.com/417668
double idleTimeInSeconds = deadlineSeconds - Platform::current()->monotonicallyIncreasingTime();
int idleTimeInMillis = static_cast<int>(idleTimeInSeconds * 1000);
if (idleTimeInMillis > 0)
isolate->IdleNotification(idleTimeInMillis);
// FIXME: only repost if there is more work to do.
postIdleGCTaskMainThread();
}
static void timerTraceProfilerInMainThread(const char* name, int status) static void timerTraceProfilerInMainThread(const char* name, int status)
{ {
if (!status) { if (!status) {
...@@ -320,6 +347,8 @@ void V8Initializer::initializeMainThreadIfNeeded() ...@@ -320,6 +347,8 @@ void V8Initializer::initializeMainThreadIfNeeded()
v8::V8::SetFailedAccessCheckCallbackFunction(failedAccessCheckCallbackInMainThread); v8::V8::SetFailedAccessCheckCallbackFunction(failedAccessCheckCallbackInMainThread);
v8::V8::SetAllowCodeGenerationFromStringsCallback(codeGenerationCheckCallbackInMainThread); v8::V8::SetAllowCodeGenerationFromStringsCallback(codeGenerationCheckCallbackInMainThread);
postIdleGCTaskMainThread();
isolate->SetEventLogger(timerTraceProfilerInMainThread); isolate->SetEventLogger(timerTraceProfilerInMainThread);
isolate->SetPromiseRejectCallback(promiseRejectHandlerInMainThread); isolate->SetPromiseRejectCallback(promiseRejectHandlerInMainThread);
......
...@@ -142,4 +142,5 @@ WebGLDraftExtensions status=experimental ...@@ -142,4 +142,5 @@ WebGLDraftExtensions status=experimental
WebGLImageChromium WebGLImageChromium
WebMIDI status=test WebMIDI status=test
WebVTTRegions depends_on=Media, status=experimental WebVTTRegions depends_on=Media, status=experimental
V8IdleTasks
XSLT status=stable XSLT status=stable
...@@ -299,4 +299,9 @@ void WebRuntimeFeatures::setCSSViewportEnabled(bool enable) ...@@ -299,4 +299,9 @@ void WebRuntimeFeatures::setCSSViewportEnabled(bool enable)
RuntimeEnabledFeatures::setCSSViewportEnabled(enable); RuntimeEnabledFeatures::setCSSViewportEnabled(enable);
} }
void WebRuntimeFeatures::enableV8IdleTasks(bool enable)
{
RuntimeEnabledFeatures::setV8IdleTasksEnabled(enable);
}
} // namespace blink } // namespace blink
...@@ -139,6 +139,8 @@ public: ...@@ -139,6 +139,8 @@ public:
BLINK_EXPORT static void setCSSViewportEnabled(bool); BLINK_EXPORT static void setCSSViewportEnabled(bool);
BLINK_EXPORT static void enableV8IdleTasks(bool);
private: private:
WebRuntimeFeatures(); WebRuntimeFeatures();
}; };
......
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