Index: third_party/WebKit/Source/web/InspectorEmulationAgent.cpp |
diff --git a/third_party/WebKit/Source/web/InspectorEmulationAgent.cpp b/third_party/WebKit/Source/web/InspectorEmulationAgent.cpp |
index 495b7921db61a413966621c2baca434874f0e78d..c231747a3f72e0a78448a04f125c811daa35b5b4 100644 |
--- a/third_party/WebKit/Source/web/InspectorEmulationAgent.cpp |
+++ b/third_party/WebKit/Source/web/InspectorEmulationAgent.cpp |
@@ -9,6 +9,8 @@ |
#include "core/frame/Settings.h" |
#include "core/page/Page.h" |
#include "platform/geometry/DoubleRect.h" |
+#include "public/platform/Platform.h" |
+#include "public/platform/WebThread.h" |
#include "public/platform/WebViewScheduler.h" |
#include "web/DevToolsEmulator.h" |
#include "web/WebLocalFrameImpl.h" |
@@ -30,6 +32,7 @@ InspectorEmulationAgent* InspectorEmulationAgent::create(WebLocalFrameImpl* webL |
InspectorEmulationAgent::InspectorEmulationAgent(WebLocalFrameImpl* webLocalFrameImpl, Client* client) |
: m_webLocalFrameImpl(webLocalFrameImpl) |
, m_client(client) |
+ , m_virtualTimeBudgetExpiredTask(CancellableTaskFactory::create(this, &InspectorEmulationAgent::virtualTimeBudgetExpired)) |
{ |
} |
@@ -93,18 +96,28 @@ void InspectorEmulationAgent::setCPUThrottlingRate(ErrorString*, double throttli |
m_client->setCPUThrottlingRate(throttlingRate); |
} |
-void InspectorEmulationAgent::setVirtualTimePolicy(ErrorString*, const String& in_policy) |
+void InspectorEmulationAgent::setVirtualTimePolicy(ErrorString*, const String& in_policy, const Maybe<int>& in_virtualTimeBudgetMs) |
{ |
if (protocol::Emulation::VirtualTimePolicyEnum::Advance == in_policy) { |
- m_webLocalFrameImpl->view()->scheduler()->enableVirtualTime(); |
m_webLocalFrameImpl->view()->scheduler()->setVirtualTimePolicy(WebViewScheduler::VirtualTimePolicy::ADVANCE); |
} else if (protocol::Emulation::VirtualTimePolicyEnum::Pause == in_policy) { |
- m_webLocalFrameImpl->view()->scheduler()->enableVirtualTime(); |
m_webLocalFrameImpl->view()->scheduler()->setVirtualTimePolicy(WebViewScheduler::VirtualTimePolicy::PAUSE); |
} else if (protocol::Emulation::VirtualTimePolicyEnum::PauseIfNetworkFetchesPending == in_policy) { |
- m_webLocalFrameImpl->view()->scheduler()->enableVirtualTime(); |
m_webLocalFrameImpl->view()->scheduler()->setVirtualTimePolicy(WebViewScheduler::VirtualTimePolicy::DETERMINISTIC_LOADING); |
} |
+ m_webLocalFrameImpl->view()->scheduler()->enableVirtualTime(); |
+ |
+ if (in_virtualTimeBudgetMs.isJust()) { |
+ WebTaskRunner* taskRunner = Platform::current()->currentThread()->getWebTaskRunner(); |
+ long long delayMillis = static_cast<long long>(in_virtualTimeBudgetMs.fromJust()); |
+ taskRunner->postDelayedTask(BLINK_FROM_HERE, m_virtualTimeBudgetExpiredTask->cancelAndCreate(), delayMillis); |
+ } |
+} |
+ |
+void InspectorEmulationAgent::virtualTimeBudgetExpired() |
+{ |
+ m_webLocalFrameImpl->view()->scheduler()->setVirtualTimePolicy(WebViewScheduler::VirtualTimePolicy::PAUSE); |
+ frontend()->virtualTimeBudgetExpired(); |
dgozman
2016/08/01 19:53:13
Please also update devtools frontend code (add emp
alex clarke (OOO till 29th)
2016/08/02 15:42:59
I'm not clear where such changes would be needed?
|
} |
DEFINE_TRACE(InspectorEmulationAgent) |