Chromium Code Reviews| 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 |