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

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

Issue 1956893003: compositor-worker: Add CompositorProxyClient worker client of CompositorWorker. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use local root frame and remove unneeded includes. Created 4 years, 6 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/InProcessWorkerObjectProxy.h" 8 #include "core/workers/InProcessWorkerObjectProxy.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, std::move(sta rtupData->m_starterOriginPrivilegeData), startupData->m_workerClients.release()) ; 19 CompositorWorkerGlobalScope* context = new CompositorWorkerGlobalScope(start upData->m_scriptURL, startupData->m_userAgent, thread, timeOrigin, std::move(sta rtupData->m_starterOriginPrivilegeData), 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, std::move(starterOri ginPrivilegeData), workerClients) 26 : WorkerGlobalScope(url, userAgent, thread, timeOrigin, std::move(starterOri ginPrivilegeData), workerClients)
27 , m_executingAnimationFrameCallbacks(false)
27 , m_callbackCollection(this) 28 , m_callbackCollection(this)
28 { 29 {
30 CompositorProxyClient::from(clients())->setGlobalScope(this);
29 } 31 }
30 32
31 CompositorWorkerGlobalScope::~CompositorWorkerGlobalScope() 33 CompositorWorkerGlobalScope::~CompositorWorkerGlobalScope()
32 { 34 {
33 } 35 }
34 36
35 DEFINE_TRACE(CompositorWorkerGlobalScope) 37 DEFINE_TRACE(CompositorWorkerGlobalScope)
36 { 38 {
37 visitor->trace(m_callbackCollection); 39 visitor->trace(m_callbackCollection);
38 WorkerGlobalScope::trace(visitor); 40 WorkerGlobalScope::trace(visitor);
39 } 41 }
40 42
41 const AtomicString& CompositorWorkerGlobalScope::interfaceName() const 43 const AtomicString& CompositorWorkerGlobalScope::interfaceName() const
42 { 44 {
43 return EventTargetNames::CompositorWorkerGlobalScope; 45 return EventTargetNames::CompositorWorkerGlobalScope;
44 } 46 }
45 47
46 void CompositorWorkerGlobalScope::postMessage(ExecutionContext* executionContext , PassRefPtr<SerializedScriptValue> message, const MessagePortArray& ports, Exce ptionState& exceptionState) 48 void CompositorWorkerGlobalScope::postMessage(ExecutionContext* executionContext , PassRefPtr<SerializedScriptValue> message, const MessagePortArray& ports, Exce ptionState& exceptionState)
47 { 49 {
48 // Disentangle the port in preparation for sending it to the remote context. 50 // Disentangle the port in preparation for sending it to the remote context.
49 OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(exe cutionContext, ports, exceptionState); 51 OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(exe cutionContext, ports, exceptionState);
50 if (exceptionState.hadException()) 52 if (exceptionState.hadException())
51 return; 53 return;
52 thread()->workerObjectProxy().postMessageToWorkerObject(message, std::move(c hannels)); 54 thread()->workerObjectProxy().postMessageToWorkerObject(message, std::move(c hannels));
53 } 55 }
54 56
55 int CompositorWorkerGlobalScope::requestAnimationFrame(FrameRequestCallback* cal lback) 57 int CompositorWorkerGlobalScope::requestAnimationFrame(FrameRequestCallback* cal lback)
56 { 58 {
59 // For now, just post a task to call mutate on the compositor proxy client.
60 // TODO(flackr): Remove this as soon as CompositorProxyClient can request a
61 // compositor frame from the CompositorMutatorImpl.
62 thread()->postTask(BLINK_FROM_HERE, createSameThreadTask(&CompositorProxyCli ent::runAnimationFrameCallbacks,
63 CompositorProxyClient::from(clients())));
64 // TODO(flackr): Signal the compositor to call mutate on the next compositor frame.
57 return m_callbackCollection.registerCallback(callback); 65 return m_callbackCollection.registerCallback(callback);
58 } 66 }
59 67
60 void CompositorWorkerGlobalScope::cancelAnimationFrame(int id) 68 void CompositorWorkerGlobalScope::cancelAnimationFrame(int id)
61 { 69 {
62 m_callbackCollection.cancelCallback(id); 70 m_callbackCollection.cancelCallback(id);
63 } 71 }
64 72
65 void CompositorWorkerGlobalScope::executeAnimationFrameCallbacks(double highResT imeNow) 73 bool CompositorWorkerGlobalScope::executeAnimationFrameCallbacks(double highResT imeMs)
66 { 74 {
67 m_callbackCollection.executeCallbacks(highResTimeNow, highResTimeNow); 75 TemporaryChange<bool> temporaryChange(m_executingAnimationFrameCallbacks, tr ue);
76 m_callbackCollection.executeCallbacks(highResTimeMs, highResTimeMs);
77 return !m_callbackCollection.isEmpty();
68 } 78 }
69 79
70 CompositorWorkerThread* CompositorWorkerGlobalScope::thread() const 80 CompositorWorkerThread* CompositorWorkerGlobalScope::thread() const
71 { 81 {
72 return static_cast<CompositorWorkerThread*>(WorkerGlobalScope::thread()); 82 return static_cast<CompositorWorkerThread*>(WorkerGlobalScope::thread());
73 } 83 }
74 84
75 } // namespace blink 85 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698