blob: f134cf442d7b77f45691c9a47cd70078456d54b7 [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 CC_TEST_LAYER_TREE_HOST_REMOTE_FOR_TESTING_H_
#define CC_TEST_LAYER_TREE_HOST_REMOTE_FOR_TESTING_H_
#include "base/macros.h"
#include "cc/blimp/compositor_state_deserializer.h"
#include "cc/blimp/layer_tree_host_remote.h"
namespace gpu {
class GpuMemoryBufferManager;
} // namespace gpu
namespace cc {
class AnimationHost;
class FakeImageSerializationProcessor;
class LayerTreeHostInProcess;
class MutatorHost;
class SharedBitmapManager;
class TaskGraphRunner;
// This is a version of LayerTreeHostRemote meant to be used for tests that want
// to inspect the CompositorFrame produced when state updates from the remote
// host are used by a compositor on the client.
class LayerTreeHostRemoteForTesting : public LayerTreeHostRemote,
public CompositorStateDeserializerClient {
public:
static std::unique_ptr<LayerTreeHostRemoteForTesting> Create(
LayerTreeHostClient* client,
MutatorHost* mutator_host,
LayerTreeSettings const* settings,
TaskGraphRunner* task_graph_runner,
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner);
static std::unique_ptr<RemoteCompositorBridge> CreateRemoteCompositorBridge(
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner);
~LayerTreeHostRemoteForTesting() override;
// LayerTreeHost interface.
void SetVisible(bool visible) override;
void SetCompositorFrameSink(
std::unique_ptr<CompositorFrameSink> compositor_frame_sink) override;
std::unique_ptr<CompositorFrameSink> ReleaseCompositorFrameSink() override;
void SetNeedsRedrawRect(const gfx::Rect& damage_rect) override;
void SetNextCommitForcesRedraw() override;
void NotifyInputThrottledUntilCommit() override;
const base::WeakPtr<InputHandler>& GetInputHandler() const override;
LayerTreeHostInProcess* layer_tree_host_in_process() const {
return layer_tree_host_in_process_.get();
}
protected:
explicit LayerTreeHostRemoteForTesting(InitParams* params);
void Initialize(TaskGraphRunner* task_graph_runner,
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner,
std::unique_ptr<FakeImageSerializationProcessor>
image_serialization_processor);
virtual std::unique_ptr<LayerTreeHostInProcess> CreateLayerTreeHostInProcess(
LayerTreeHostClient* client,
TaskGraphRunner* task_graph_runner,
const LayerTreeSettings& settings,
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner,
MutatorHost* mutator_host);
private:
class LayerTreeHostInProcessClient;
class RemoteCompositorBridgeImpl;
// CompositorStateDeserializerClient implementation.
void DidUpdateLocalState() override;
// LayerTreeHostRemote interface.
void DispatchDrawAndSubmitCallbacks() override;
void BeginRemoteMainFrame();
void RemoteHostNeedsMainFrame();
void ProcessRemoteCompositorUpdate(
std::unique_ptr<CompositorProtoState> compositor_proto_state);
std::unique_ptr<LayerTreeHostInProcess> layer_tree_host_in_process_;
std::unique_ptr<AnimationHost> animation_host_;
std::unique_ptr<CompositorStateDeserializer> compositor_state_deserializer_;
bool client_state_dirty_ = false;
std::unique_ptr<LayerTreeHostInProcessClient>
layer_tree_host_in_process_client_;
std::unique_ptr<FakeImageSerializationProcessor>
image_serialization_processor_;
DISALLOW_COPY_AND_ASSIGN(LayerTreeHostRemoteForTesting);
};
} // namespace cc
#endif // CC_TEST_LAYER_TREE_HOST_REMOTE_FOR_TESTING_H_