Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(465)

Side by Side Diff: third_party/WebKit/Source/modules/compositorworker/CompositorWorkerGlobalScope.cpp

Issue 1895873006: compositor-worker: Initialize CW machinery plumbing to compositor and fire CW rAF callbacks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Bring up oilpan support during compositor worker creation and oilpan the compositor mutator and pro… Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/compositorworker/CompositorWorkerGlobalScope.h" 5 #include "modules/compositorworker/CompositorWorkerGlobalScope.h"
6 6
7 #include "bindings/core/v8/SerializedScriptValue.h" 7 #include "bindings/core/v8/SerializedScriptValue.h"
8 #include "core/workers/WorkerObjectProxy.h" 8 #include "core/workers/WorkerObjectProxy.h"
9 #include "core/workers/WorkerThreadStartupData.h" 9 #include "core/workers/WorkerThreadStartupData.h"
10 #include "modules/EventTargetModules.h" 10 #include "modules/EventTargetModules.h"
11 #include "modules/compositorworker/CompositorWorkerThread.h" 11 #include "modules/compositorworker/CompositorWorkerThread.h"
12 12
13 namespace blink { 13 namespace blink {
14 14
15 CompositorWorkerGlobalScope* CompositorWorkerGlobalScope::create(CompositorWorke rThread* thread, PassOwnPtr<WorkerThreadStartupData> startupData, double timeOri gin) 15 CompositorWorkerGlobalScope* CompositorWorkerGlobalScope::create(CompositorWorke rThread* thread, PassOwnPtr<WorkerThreadStartupData> startupData, double timeOri gin)
16 { 16 {
17 // Note: startupData is finalized on return. After the relevant parts has be en 17 // Note: startupData is finalized on return. After the relevant parts has be en
18 // passed along to the created 'context'. 18 // passed along to the created 'context'.
19 CompositorWorkerGlobalScope* context = new CompositorWorkerGlobalScope(start upData->m_scriptURL, startupData->m_userAgent, thread, timeOrigin, startupData-> m_starterOriginPrivilegeData.release(), startupData->m_workerClients.release()); 19 CompositorWorkerGlobalScope* context = new CompositorWorkerGlobalScope(start upData->m_scriptURL, startupData->m_userAgent, thread, timeOrigin, startupData-> m_starterOriginPrivilegeData.release(), startupData->m_workerClients.release());
20 context->applyContentSecurityPolicyFromVector(*startupData->m_contentSecurit yPolicyHeaders); 20 context->applyContentSecurityPolicyFromVector(*startupData->m_contentSecurit yPolicyHeaders);
21 context->setAddressSpace(startupData->m_addressSpace); 21 context->setAddressSpace(startupData->m_addressSpace);
22 return context; 22 return context;
23 } 23 }
24 24
25 CompositorWorkerGlobalScope::CompositorWorkerGlobalScope(const KURL& url, const String& userAgent, CompositorWorkerThread* thread, double timeOrigin, PassOwnPtr <SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* worke rClients) 25 CompositorWorkerGlobalScope::CompositorWorkerGlobalScope(const KURL& url, const String& userAgent, CompositorWorkerThread* thread, double timeOrigin, PassOwnPtr <SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* worke rClients)
26 : WorkerGlobalScope(url, userAgent, thread, timeOrigin, starterOriginPrivile geData, workerClients) 26 : WorkerGlobalScope(url, userAgent, thread, timeOrigin, starterOriginPrivile geData, workerClients)
27 , m_executingAnimationFrameCallbacks(false)
27 , m_callbackCollection(this) 28 , m_callbackCollection(this)
28 { 29 {
30 CompositorProxyClient::from(clients())->setGlobalScope(this);
31 ThreadState::current()->registerPreFinalizer(this);
32 }
33
34 void CompositorWorkerGlobalScope::dispose()
35 {
36 CompositorProxyClient::from(clients())->setGlobalScope(nullptr);
29 } 37 }
30 38
31 CompositorWorkerGlobalScope::~CompositorWorkerGlobalScope() 39 CompositorWorkerGlobalScope::~CompositorWorkerGlobalScope()
32 { 40 {
33 } 41 }
34 42
35 DEFINE_TRACE(CompositorWorkerGlobalScope) 43 DEFINE_TRACE(CompositorWorkerGlobalScope)
36 { 44 {
37 visitor->trace(m_callbackCollection); 45 visitor->trace(m_callbackCollection);
38 WorkerGlobalScope::trace(visitor); 46 WorkerGlobalScope::trace(visitor);
39 } 47 }
40 48
41 const AtomicString& CompositorWorkerGlobalScope::interfaceName() const 49 const AtomicString& CompositorWorkerGlobalScope::interfaceName() const
42 { 50 {
43 return EventTargetNames::CompositorWorkerGlobalScope; 51 return EventTargetNames::CompositorWorkerGlobalScope;
44 } 52 }
45 53
46 void CompositorWorkerGlobalScope::postMessage(ExecutionContext* executionContext , PassRefPtr<SerializedScriptValue> message, const MessagePortArray& ports, Exce ptionState& exceptionState) 54 void CompositorWorkerGlobalScope::postMessage(ExecutionContext* executionContext , PassRefPtr<SerializedScriptValue> message, const MessagePortArray& ports, Exce ptionState& exceptionState)
47 { 55 {
48 // Disentangle the port in preparation for sending it to the remote context. 56 // Disentangle the port in preparation for sending it to the remote context.
49 OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(exe cutionContext, ports, exceptionState); 57 OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(exe cutionContext, ports, exceptionState);
50 if (exceptionState.hadException()) 58 if (exceptionState.hadException())
51 return; 59 return;
52 thread()->workerObjectProxy().postMessageToWorkerObject(message, channels.re lease()); 60 thread()->workerObjectProxy().postMessageToWorkerObject(message, channels.re lease());
53 } 61 }
54 62
55 int CompositorWorkerGlobalScope::requestAnimationFrame(FrameRequestCallback* cal lback) 63 int CompositorWorkerGlobalScope::requestAnimationFrame(FrameRequestCallback* cal lback)
56 { 64 {
65 const bool shouldSignal = !m_executingAnimationFrameCallbacks && m_callbackC ollection.isEmpty();
66 if (shouldSignal)
67 CompositorProxyClient::from(clients())->requestAnimationFrame();
57 return m_callbackCollection.registerCallback(callback); 68 return m_callbackCollection.registerCallback(callback);
58 } 69 }
59 70
60 void CompositorWorkerGlobalScope::cancelAnimationFrame(int id) 71 void CompositorWorkerGlobalScope::cancelAnimationFrame(int id)
61 { 72 {
62 m_callbackCollection.cancelCallback(id); 73 m_callbackCollection.cancelCallback(id);
63 } 74 }
64 75
65 void CompositorWorkerGlobalScope::executeAnimationFrameCallbacks(double highResT imeNow) 76 bool CompositorWorkerGlobalScope::executeAnimationFrameCallbacks(double highResT imeMs)
66 { 77 {
67 m_callbackCollection.executeCallbacks(highResTimeNow, highResTimeNow); 78 TemporaryChange<bool> temporaryChange(m_executingAnimationFrameCallbacks, tr ue);
79 m_callbackCollection.executeCallbacks(highResTimeMs, highResTimeMs);
80 return !m_callbackCollection.isEmpty();
68 } 81 }
69 82
70 CompositorWorkerThread* CompositorWorkerGlobalScope::thread() const 83 CompositorWorkerThread* CompositorWorkerGlobalScope::thread() const
71 { 84 {
72 return static_cast<CompositorWorkerThread*>(WorkerGlobalScope::thread()); 85 return static_cast<CompositorWorkerThread*>(WorkerGlobalScope::thread());
73 } 86 }
74 87
75 } // namespace blink 88 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698