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