Chromium Code Reviews| Index: third_party/WebKit/Source/core/dom/CompositorProxy.cpp |
| diff --git a/third_party/WebKit/Source/core/dom/CompositorProxy.cpp b/third_party/WebKit/Source/core/dom/CompositorProxy.cpp |
| index fd5ae040a01d31bbdd2c5275fa63c9f58ea9ad29..f58c62c1e24d137510b72dc8c7e72c102970a1b3 100644 |
| --- a/third_party/WebKit/Source/core/dom/CompositorProxy.cpp |
| +++ b/third_party/WebKit/Source/core/dom/CompositorProxy.cpp |
| @@ -9,6 +9,8 @@ |
| #include "core/dom/DOMNodeIds.h" |
| #include "core/dom/ExceptionCode.h" |
| #include "core/dom/ExecutionContext.h" |
| +#include "core/workers/WorkerClients.h" |
| +#include "core/workers/WorkerGlobalScope.h" |
| #include "platform/ThreadSafeFunctional.h" |
| #include "platform/graphics/CompositorMutableProperties.h" |
| #include "public/platform/Platform.h" |
| @@ -112,39 +114,54 @@ CompositorProxy* CompositorProxy::create(ExecutionContext* context, Element* ele |
| return new CompositorProxy(*element, attributeArray); |
| } |
| -CompositorProxy* CompositorProxy::create(uint64_t elementId, uint32_t compositorMutableProperties) |
| +CompositorProxy* CompositorProxy::create(ExecutionContext* context, uint64_t elementId, uint32_t compositorMutableProperties) |
| { |
| + if (context->isCompositorWorkerGlobalScope()) { |
| + WorkerClients* clients = toWorkerGlobalScope(context)->clients(); |
| + DCHECK(clients); |
| + CompositorProxyClient* client = CompositorProxyClient::from(clients); |
| + return new CompositorProxy(elementId, compositorMutableProperties, client); |
| + } |
| + |
| return new CompositorProxy(elementId, compositorMutableProperties); |
| } |
| -CompositorProxy::CompositorProxy(Element& element, const Vector<String>& attributeArray) |
| - : m_elementId(DOMNodeIds::idForNode(&element)) |
| - , m_compositorMutableProperties(compositorMutablePropertiesFromNames(attributeArray)) |
| +CompositorProxy::CompositorProxy(uint64_t elementId, uint32_t compositorMutableProperties) |
| + : m_elementId(elementId) |
| + , m_compositorMutableProperties(compositorMutableProperties) |
| + , m_client(nullptr) |
| { |
| - DCHECK(isMainThread()); |
| DCHECK(m_compositorMutableProperties); |
| #if DCHECK_IS_ON() |
| DCHECK(sanityCheckMutableProperties(m_compositorMutableProperties)); |
| #endif |
| - incrementCompositorProxiedPropertiesForElement(m_elementId, m_compositorMutableProperties); |
| + if (isMainThread()) { |
| + incrementCompositorProxiedPropertiesForElement(m_elementId, m_compositorMutableProperties); |
| + } else { |
| + Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&incrementCompositorProxiedPropertiesForElement, m_elementId, m_compositorMutableProperties)); |
| + } |
| } |
| -CompositorProxy::CompositorProxy(uint64_t elementId, uint32_t compositorMutableProperties) |
| - : m_elementId(elementId) |
| - , m_compositorMutableProperties(compositorMutableProperties) |
| +CompositorProxy::CompositorProxy(Element& element, const Vector<String>& attributeArray) |
| + : CompositorProxy(DOMNodeIds::idForNode(&element), compositorMutablePropertiesFromNames(attributeArray)) |
| { |
| + DCHECK(isMainThread()); |
| +} |
| + |
| +CompositorProxy::CompositorProxy(uint64_t elementId, uint32_t compositorMutableProperties, CompositorProxyClient* client) |
| + : CompositorProxy(elementId, compositorMutableProperties) |
| +{ |
| + m_client = client; |
| + DCHECK(m_client); |
| DCHECK(isControlThread()); |
| -#if DCHECK_IS_ON() |
| - DCHECK(sanityCheckMutableProperties(m_compositorMutableProperties)); |
| -#endif |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&incrementCompositorProxiedPropertiesForElement, m_elementId, m_compositorMutableProperties)); |
| + m_client->registerCompositorProxy(this); |
| } |
| CompositorProxy::~CompositorProxy() |
| { |
| - if (m_connected) |
| - disconnect(); |
| + disconnectInternal(); |
| + DCHECK(!m_connected); |
|
jbroman
2016/06/10 19:29:33
Mind a quick comment here explaining why you don't
majidvp
2016/06/10 20:56:30
Done.
|
| } |
| bool CompositorProxy::supports(const String& attributeName) const |
| @@ -239,11 +256,21 @@ bool CompositorProxy::raiseExceptionIfNotMutable(uint32_t property, ExceptionSta |
| void CompositorProxy::disconnect() |
| { |
| + disconnectInternal(); |
| + if (m_client) |
| + m_client->unregisterCompositorProxy(this); |
| +} |
| + |
| +void CompositorProxy::disconnectInternal() |
| +{ |
| + if (!m_connected) |
| + return; |
| m_connected = false; |
| - if (isMainThread()) |
| + if (isMainThread()) { |
| decrementCompositorProxiedPropertiesForElement(m_elementId, m_compositorMutableProperties); |
| - else |
| + } else { |
| Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&decrementCompositorProxiedPropertiesForElement, m_elementId, m_compositorMutableProperties)); |
| + } |
| } |
| } // namespace blink |