Index: third_party/WebKit/Source/web/CompositorMutatorImpl.cpp |
diff --git a/third_party/WebKit/Source/web/CompositorMutatorImpl.cpp b/third_party/WebKit/Source/web/CompositorMutatorImpl.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5414a18f4f1517efba5968c660e1cb3d9b21119f |
--- /dev/null |
+++ b/third_party/WebKit/Source/web/CompositorMutatorImpl.cpp |
@@ -0,0 +1,75 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "web/CompositorMutatorImpl.h" |
+ |
+#include "core/animation/CustomCompositorAnimationManager.h" |
+#include "core/dom/CompositorProxy.h" |
+#include "platform/TraceEvent.h" |
+#include "platform/graphics/CompositorMutationsTarget.h" |
+#include "platform/graphics/CompositorMutatorClient.h" |
+#include "web/CompositorProxyClientImpl.h" |
+ |
+namespace blink { |
+ |
+CompositorMutatorImpl::CompositorMutatorImpl() |
+ : m_animationManager(adoptPtr(new CustomCompositorAnimationManager)) |
+ , m_client(adoptPtr(new CompositorMutatorClient(this, m_animationManager.get()))) |
+{ |
+} |
+ |
+CompositorMutatorImpl::~CompositorMutatorImpl() |
+{ |
+ TRACE_EVENT0("compositor-worker", "CompositorMutatorImpl::~CompositorMutatorImpl"); |
+ // We must have torn down all compositor workers before destroying this |
+ // instance. |
+ ASSERT(m_proxyClients.empty()); |
+} |
+ |
+PassOwnPtr<CompositorMutatorImpl> CompositorMutatorImpl::create() |
+{ |
+ return adoptPtr(new CompositorMutatorImpl()); |
+} |
+ |
+bool CompositorMutatorImpl::mutate(double timeNow) |
+{ |
+ TRACE_EVENT0("compositor-worker", "CompositorMutatorImpl::mutate"); |
+ bool needToReinvoke = false; |
+ // TODO(vollick): we should avoid executing the animation frame |
+ // callbacks if none of the proxies in the global scope are affected by |
+ // m_mutations. |
+ for (CompositorProxyClient* client : m_proxyClients) { |
+ if (client->mutate(timeNow)) |
+ needToReinvoke = true; |
+ } |
+ |
+ return needToReinvoke; |
+} |
+ |
+void CompositorMutatorImpl::registerClient(CompositorProxyClient* client) |
+{ |
+ TRACE_EVENT0("compositor-worker", "CompositorMutatorImpl::registerClient"); |
+ m_proxyClients.insert(client); |
+ setNeedsMutate(); |
+} |
+ |
+void CompositorMutatorImpl::unregisterClient(CompositorProxyClient* client) |
+{ |
+ TRACE_EVENT0("compositor-worker", "CompositorMutatorImpl::unregisterClient"); |
+ m_proxyClients.erase(client); |
+} |
+ |
+CompositorProxyClient* CompositorMutatorImpl::createCompositorProxyClient() |
+{ |
+ TRACE_EVENT0("compositor-worker", "CompositorMutatorImpl::createCompositorProxyClient"); |
+ return new CompositorProxyClientImpl(this); |
+} |
+ |
+void CompositorMutatorImpl::setNeedsMutate() |
+{ |
+ TRACE_EVENT0("compositor-worker", "CompositorMutatorImpl::requestMutation"); |
jbroman
2016/04/20 21:06:42
nit: trace event / method name mismatch
flackr
2016/04/25 14:06:28
Fixed.
|
+ m_client->setNeedsMutate(); |
+} |
+ |
+} // namespace blink |