blob: a5281b6caba60853ee152a8e29d8c97071207f01 [file] [log] [blame]
// 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.
#ifndef CompositorMutatorImpl_h
#define CompositorMutatorImpl_h
#include "core/animation/CustomCompositorAnimationManager.h"
#include "platform/graphics/CompositorMutator.h"
#include "platform/heap/Handle.h"
#include "platform/heap/HeapAllocator.h"
#include "wtf/Noncopyable.h"
#include <memory>
namespace blink {
class CompositorProxy;
class CompositorProxyClientImpl;
class CompositorWorkerGlobalScope;
class CompositorMutatorClient;
// Fans out requests from the compositor to all of the registered ProxyClients which
// can then mutate layers through their CompositorProxy interfaces. Requests for
// animation frames are received from ProxyClients and sent to the compositor to
// generate a new compositor frame.
//
// Should be accessed only on the compositor thread.
class CompositorMutatorImpl final : public CompositorMutator {
WTF_MAKE_NONCOPYABLE(CompositorMutatorImpl);
public:
static std::unique_ptr<CompositorMutatorClient> createClient();
static CompositorMutatorImpl* create();
DEFINE_INLINE_TRACE()
{
CompositorMutator::trace(visitor);
visitor->trace(m_proxyClients);
}
// CompositorMutator implementation.
bool mutate(double monotonicTimeNow, CompositorMutableStateProvider*) override;
void registerProxyClient(CompositorProxyClientImpl*);
void setNeedsMutate();
void setClient(CompositorMutatorClient* client) { m_client = client; }
CustomCompositorAnimationManager* animationManager() { return m_animationManager.get(); }
private:
CompositorMutatorImpl();
using ProxyClients = HeapHashSet<WeakMember<CompositorProxyClientImpl>>;
ProxyClients m_proxyClients;
std::unique_ptr<CustomCompositorAnimationManager> m_animationManager;
CompositorMutatorClient* m_client;
};
} // namespace blink
#endif // CompositorMutatorImpl_h