| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CC_SLIM_SCHEDULER_H_ |
| #define CC_SLIM_SCHEDULER_H_ |
| |
| #include "components/viz/common/frame_sinks/begin_frame_args.h" |
| |
| namespace cc::slim { |
| |
| // Implemented by slim compositor for Scheduler implementations to call. |
| class SchedulerClient { |
| public: |
| virtual ~SchedulerClient() = default; |
| |
| // Produce frame. If returns false, it's safe to call DoBeginFrame again, or |
| // call SendDidNotProduceFrame with the same args. |
| virtual bool DoBeginFrame(const viz::BeginFrameArgs& begin_frame_args) = 0; |
| |
| // After calling this, the same BeginFrameArgs cannot be used to call |
| // DoBeginFrame again. |
| virtual void SendDidNotProduceFrame( |
| const viz::BeginFrameArgs& begin_frame_args) = 0; |
| }; |
| |
| // Scheduler class controls timing of slim compositor frame production. In |
| // particular, it controls when compositor should respond a OnBeginFrame from |
| // viz with SubmitCompositorFrame or DidNotProduceFrame. |
| class Scheduler { |
| public: |
| virtual ~Scheduler() = default; |
| |
| // First method to be called to set the client. |
| virtual void Initialize(SchedulerClient* client) = 0; |
| |
| // Viz called OnBeginFrame with new BeginFrameArgs. |
| virtual void OnBeginFrameFromViz( |
| const viz::BeginFrameArgs& begin_frame_args) = 0; |
| |
| // Call from viz to inform that there are no more begin frames even when |
| // requested. |
| virtual void OnBeginFramePausedChanged(bool paused) = 0; |
| |
| // Called to inform scheduler that client starts or stops requesting begin |
| // frames from viz. |
| virtual void SetNeedsBeginFrame(bool needs_begin_frame) = 0; |
| |
| // Called to inform scheduler that client is swap throttled so will always |
| // return false when calling `DoBeginFrame`. |
| virtual void SetIsSwapThrottled(bool is_swap_throttled) = 0; |
| |
| // See LayerTree::MaybeCompositeNow. |
| virtual void MaybeCompositeNow() = 0; |
| }; |
| |
| } // namespace cc::slim |
| |
| #endif // CC_SLIM_SCHEDULER_H_ |