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

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: 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/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, 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, 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, channels.re lease()); 54 thread()->workerObjectProxy().postMessageToWorkerObject(message, channels.re lease());
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.
jbroman 2016/05/09 18:44:18 Please leave a more strongly-worded TODO here so i
flackr 2016/05/10 20:56:13 Done.
60 thread()->postTask(BLINK_FROM_HERE, createSameThreadTask(&CompositorProxyCli ent::triggerMutationForTest,
kinuko 2016/05/09 02:41:26 invoking test-only method from web-facing API and
flackr 2016/05/10 20:56:13 You're right, let's just remove the ForTest and ca
61 CompositorProxyClient::from(clients())));
62 // TODO(flackr): Signal the compositor to call mutate on the next compositor frame.
57 return m_callbackCollection.registerCallback(callback); 63 return m_callbackCollection.registerCallback(callback);
58 } 64 }
59 65
60 void CompositorWorkerGlobalScope::cancelAnimationFrame(int id) 66 void CompositorWorkerGlobalScope::cancelAnimationFrame(int id)
61 { 67 {
62 m_callbackCollection.cancelCallback(id); 68 m_callbackCollection.cancelCallback(id);
63 } 69 }
64 70
65 void CompositorWorkerGlobalScope::executeAnimationFrameCallbacks(double highResT imeNow) 71 bool CompositorWorkerGlobalScope::executeAnimationFrameCallbacks(double highResT imeMs)
66 { 72 {
67 m_callbackCollection.executeCallbacks(highResTimeNow, highResTimeNow); 73 TemporaryChange<bool> temporaryChange(m_executingAnimationFrameCallbacks, tr ue);
74 m_callbackCollection.executeCallbacks(highResTimeMs, highResTimeMs);
75 return !m_callbackCollection.isEmpty();
68 } 76 }
69 77
70 CompositorWorkerThread* CompositorWorkerGlobalScope::thread() const 78 CompositorWorkerThread* CompositorWorkerGlobalScope::thread() const
71 { 79 {
72 return static_cast<CompositorWorkerThread*>(WorkerGlobalScope::thread()); 80 return static_cast<CompositorWorkerThread*>(WorkerGlobalScope::thread());
73 } 81 }
74 82
75 } // namespace blink 83 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698