1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CC_TEST_TEST_HOOKS_H_
6 #define CC_TEST_TEST_HOOKS_H_
7 
8 #include <memory>
9 
10 #include "cc/animation/animation_delegate.h"
11 #include "cc/trees/layer_tree_host.h"
12 #include "cc/trees/layer_tree_host_impl.h"
13 #include "components/viz/common/quads/aggregated_render_pass.h"
14 
15 namespace gfx {
16 struct PresentationFeedback;
17 }
18 
19 namespace viz {
20 class CompositorFrame;
21 class DisplayCompositorMemoryAndTaskController;
22 class OutputSurface;
23 class SkiaOutputSurface;
24 }
25 
26 namespace cc {
27 
28 struct ApplyViewportChangesArgs;
29 
30 // Used by test stubs to notify the test when something interesting happens.
31 class TestHooks : public AnimationDelegate {
32  public:
33   TestHooks();
34   ~TestHooks() override;
35 
36   // Compositor thread hooks.
37   virtual std::unique_ptr<RasterBufferProvider> CreateRasterBufferProvider(
38       LayerTreeHostImpl* host_impl);
WillBeginImplFrameOnThread(LayerTreeHostImpl * host_impl,const viz::BeginFrameArgs & args)39   virtual void WillBeginImplFrameOnThread(LayerTreeHostImpl* host_impl,
40                                           const viz::BeginFrameArgs& args) {}
DidFinishImplFrameOnThread(LayerTreeHostImpl * host_impl)41   virtual void DidFinishImplFrameOnThread(LayerTreeHostImpl* host_impl) {}
WillSendBeginMainFrameOnThread(LayerTreeHostImpl * host_impl)42   virtual void WillSendBeginMainFrameOnThread(LayerTreeHostImpl* host_impl) {}
DidSendBeginMainFrameOnThread(LayerTreeHostImpl * host_impl)43   virtual void DidSendBeginMainFrameOnThread(LayerTreeHostImpl* host_impl) {}
BeginMainFrameAbortedOnThread(LayerTreeHostImpl * host_impl,CommitEarlyOutReason reason)44   virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
45                                              CommitEarlyOutReason reason) {}
ReadyToCommitOnThread(LayerTreeHostImpl * host_impl)46   virtual void ReadyToCommitOnThread(LayerTreeHostImpl* host_impl) {}
WillPrepareTilesOnThread(LayerTreeHostImpl * host_impl)47   virtual void WillPrepareTilesOnThread(LayerTreeHostImpl* host_impl) {}
BeginCommitOnThread(LayerTreeHostImpl * host_impl)48   virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) {}
WillCommitCompleteOnThread(LayerTreeHostImpl * host_impl)49   virtual void WillCommitCompleteOnThread(LayerTreeHostImpl* host_impl) {}
CommitCompleteOnThread(LayerTreeHostImpl * host_impl)50   virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) {}
WillActivateTreeOnThread(LayerTreeHostImpl * host_impl)51   virtual void WillActivateTreeOnThread(LayerTreeHostImpl* host_impl) {}
DidActivateTreeOnThread(LayerTreeHostImpl * host_impl)52   virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) {}
InitializedRendererOnThread(LayerTreeHostImpl * host_impl,bool success)53   virtual void InitializedRendererOnThread(LayerTreeHostImpl* host_impl,
54                                            bool success) {}
WillPrepareToDrawOnThread(LayerTreeHostImpl * host_impl)55   virtual void WillPrepareToDrawOnThread(LayerTreeHostImpl* host_impl) {}
56   virtual DrawResult PrepareToDrawOnThread(
57       LayerTreeHostImpl* host_impl,
58       LayerTreeHostImpl::FrameData* frame_data,
59       DrawResult draw_result);
DrawLayersOnThread(LayerTreeHostImpl * host_impl)60   virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) {}
WillNotifyReadyToActivateOnThread(LayerTreeHostImpl * host_impl)61   virtual void WillNotifyReadyToActivateOnThread(LayerTreeHostImpl* host_impl) {
62   }
NotifyReadyToActivateOnThread(LayerTreeHostImpl * host_impl)63   virtual void NotifyReadyToActivateOnThread(LayerTreeHostImpl* host_impl) {}
NotifyReadyToDrawOnThread(LayerTreeHostImpl * host_impl)64   virtual void NotifyReadyToDrawOnThread(LayerTreeHostImpl* host_impl) {}
NotifyAllTileTasksCompleted(LayerTreeHostImpl * host_impl)65   virtual void NotifyAllTileTasksCompleted(LayerTreeHostImpl* host_impl) {}
NotifyTileStateChangedOnThread(LayerTreeHostImpl * host_impl,const Tile * tile)66   virtual void NotifyTileStateChangedOnThread(LayerTreeHostImpl* host_impl,
67                                               const Tile* tile) {}
WillReceiveCompositorFrameAckOnThread(LayerTreeHostImpl * host_impl)68   virtual void WillReceiveCompositorFrameAckOnThread(
69       LayerTreeHostImpl* host_impl) {}
DidReceiveCompositorFrameAckOnThread(LayerTreeHostImpl * host_impl)70   virtual void DidReceiveCompositorFrameAckOnThread(
71       LayerTreeHostImpl* host_impl) {}
DidScheduleBeginMainFrame()72   virtual void DidScheduleBeginMainFrame() {}
DidRunBeginMainFrame()73   virtual void DidRunBeginMainFrame() {}
DidReceivePresentationTimeOnThread(LayerTreeHostImpl * host_impl,uint32_t frame_token,const gfx::PresentationFeedback & feedback)74   virtual void DidReceivePresentationTimeOnThread(
75       LayerTreeHostImpl* host_impl,
76       uint32_t frame_token,
77       const gfx::PresentationFeedback& feedback) {}
DidSetVisibleOnImplTree(LayerTreeHostImpl * host_impl,bool visible)78   virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl,
79                                        bool visible) {}
AnimateLayers(LayerTreeHostImpl * host_impl,base::TimeTicks monotonic_time)80   virtual void AnimateLayers(LayerTreeHostImpl* host_impl,
81                              base::TimeTicks monotonic_time) {}
UpdateAnimationState(LayerTreeHostImpl * host_impl,bool has_unfinished_animation)82   virtual void UpdateAnimationState(LayerTreeHostImpl* host_impl,
83                                     bool has_unfinished_animation) {}
WillAnimateLayers(LayerTreeHostImpl * host_impl,base::TimeTicks monotonic_time)84   virtual void WillAnimateLayers(LayerTreeHostImpl* host_impl,
85                                  base::TimeTicks monotonic_time) {}
DidInvalidateContentOnImplSide(LayerTreeHostImpl * host_impl)86   virtual void DidInvalidateContentOnImplSide(LayerTreeHostImpl* host_impl) {}
DidInvalidateLayerTreeFrameSink(LayerTreeHostImpl * host_impl)87   virtual void DidInvalidateLayerTreeFrameSink(LayerTreeHostImpl* host_impl) {}
DidReceiveImplSideInvalidationRequest(LayerTreeHostImpl * host_impl)88   virtual void DidReceiveImplSideInvalidationRequest(
89       LayerTreeHostImpl* host_impl) {}
DidRequestImplSideInvalidation(LayerTreeHostImpl * host_impl)90   virtual void DidRequestImplSideInvalidation(LayerTreeHostImpl* host_impl) {}
91 
92   // Asynchronous compositor thread hooks.
93   // These are called asynchronously from the LayerTreeHostImpl performing its
94   // draw, so you should record state you want to use here in
95   // DrawLayersOnThread() instead. For that reason these methods do not receive
96   // a LayerTreeHostImpl pointer.
DisplayReceivedLocalSurfaceIdOnThread(const viz::LocalSurfaceId & local_surface_id)97   virtual void DisplayReceivedLocalSurfaceIdOnThread(
98       const viz::LocalSurfaceId& local_surface_id) {}
DisplayReceivedCompositorFrameOnThread(const viz::CompositorFrame & frame)99   virtual void DisplayReceivedCompositorFrameOnThread(
100       const viz::CompositorFrame& frame) {}
DisplayWillDrawAndSwapOnThread(bool will_draw_and_swap,const viz::AggregatedRenderPassList & render_passes)101   virtual void DisplayWillDrawAndSwapOnThread(
102       bool will_draw_and_swap,
103       const viz::AggregatedRenderPassList& render_passes) {}
DisplayDidDrawAndSwapOnThread()104   virtual void DisplayDidDrawAndSwapOnThread() {}
105 
106   // Main thread hooks.
ApplyViewportChanges(const ApplyViewportChangesArgs & args)107   virtual void ApplyViewportChanges(const ApplyViewportChangesArgs& args) {}
BeginMainFrameNotExpectedSoon()108   virtual void BeginMainFrameNotExpectedSoon() {}
BeginMainFrame(const viz::BeginFrameArgs & args)109   virtual void BeginMainFrame(const viz::BeginFrameArgs& args) {}
WillBeginMainFrame()110   virtual void WillBeginMainFrame() {}
DidBeginMainFrame()111   virtual void DidBeginMainFrame() {}
UpdateLayerTreeHost()112   virtual void UpdateLayerTreeHost() {}
DidInitializeLayerTreeFrameSink()113   virtual void DidInitializeLayerTreeFrameSink() {}
DidFailToInitializeLayerTreeFrameSink()114   virtual void DidFailToInitializeLayerTreeFrameSink() {}
DidAddAnimation()115   virtual void DidAddAnimation() {}
WillCommit()116   virtual void WillCommit() {}
DidCommit()117   virtual void DidCommit() {}
DidCommitAndDrawFrame()118   virtual void DidCommitAndDrawFrame() {}
DidReceiveCompositorFrameAck()119   virtual void DidReceiveCompositorFrameAck() {}
ScheduleComposite()120   virtual void ScheduleComposite() {}
DidActivateSyncTree()121   virtual void DidActivateSyncTree() {}
NotifyThroughputTrackerResults(CustomTrackerResults results)122   virtual void NotifyThroughputTrackerResults(CustomTrackerResults results) {}
123 
124   // AnimationDelegate implementation.
NotifyAnimationStarted(base::TimeTicks monotonic_time,int target_property,int group)125   void NotifyAnimationStarted(base::TimeTicks monotonic_time,
126                               int target_property,
127                               int group) override {}
NotifyAnimationFinished(base::TimeTicks monotonic_time,int target_property,int group)128   void NotifyAnimationFinished(base::TimeTicks monotonic_time,
129                                int target_property,
130                                int group) override {}
NotifyAnimationAborted(base::TimeTicks monotonic_time,int target_property,int group)131   void NotifyAnimationAborted(base::TimeTicks monotonic_time,
132                               int target_property,
133                               int group) override {}
NotifyAnimationTakeover(base::TimeTicks monotonic_time,int target_property,base::TimeTicks animation_start_time,std::unique_ptr<AnimationCurve> curve)134   void NotifyAnimationTakeover(base::TimeTicks monotonic_time,
135                                int target_property,
136                                base::TimeTicks animation_start_time,
137                                std::unique_ptr<AnimationCurve> curve) override {
138   }
NotifyLocalTimeUpdated(base::Optional<base::TimeDelta> local_time)139   void NotifyLocalTimeUpdated(
140       base::Optional<base::TimeDelta> local_time) override {}
141 
142   // OutputSurface indirections to the LayerTreeTest, that can be further
143   // overridden.
144   virtual void RequestNewLayerTreeFrameSink() = 0;
145   virtual std::unique_ptr<viz::DisplayCompositorMemoryAndTaskController>
146   CreateDisplayControllerOnThread() = 0;
147   virtual std::unique_ptr<viz::SkiaOutputSurface>
148   CreateDisplaySkiaOutputSurfaceOnThread(
149       viz::DisplayCompositorMemoryAndTaskController*) = 0;
150   virtual std::unique_ptr<viz::OutputSurface>
151   CreateDisplayOutputSurfaceOnThread(
152       scoped_refptr<viz::ContextProvider> compositor_context_provider) = 0;
153 };
154 
155 }  // namespace cc
156 
157 #endif  // CC_TEST_TEST_HOOKS_H_
158