Revert "[M120 Migration]Fix for crash during chrome exit"
[platform/framework/web/chromium-efl.git] / cc / slim / delayed_scheduler.h
1 // Copyright 2023 The Chromium Authors
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_SLIM_DELAYED_SCHEDULER_H_
6 #define CC_SLIM_DELAYED_SCHEDULER_H_
7
8 #include "base/component_export.h"
9 #include "base/memory/raw_ptr.h"
10 #include "cc/slim/scheduler.h"
11 #include "components/viz/common/frame_sinks/begin_frame_args.h"
12
13 namespace cc::slim {
14
15 // DelayedScheduler is optimized specifically for the case of renderer-driven
16 // scrolling of browser controls in the browser compositor on Android.
17 // The design aims to immediately submit frame whenever scroll offset arrives
18 // from the renderer:
19 // * Expect `MaybeCompositeNow` to be called when scroll offset from renderer
20 //   arrives.
21 // * Cache BeginFrameArgs from `OnBeginFrameFromViz` and wait until either
22 //   `MaybeCompositeNow` or until the next `OnBeginFrameFromViz`. This increases
23 //   the latency for other cases that does not call `MaybeCompositeNow` by one
24 //   frame.
25 // * If `MaybeCompositeNow` is blocked from producing a frame due to some
26 //   condition, immediately attempt producing from again if the condition
27 //   changes.
28 // TODO(boliu): Move this to //content after slim is enabled for browser
29 // compositor on android.
30 class COMPONENT_EXPORT(CC_SLIM) DelayedScheduler : public Scheduler {
31  public:
32   DelayedScheduler();
33   ~DelayedScheduler() override;
34
35   void Initialize(SchedulerClient* client) override;
36   void OnBeginFrameFromViz(
37       const viz::BeginFrameArgs& begin_frame_args) override;
38   void OnBeginFramePausedChanged(bool paused) override;
39   void SetNeedsBeginFrame(bool needs_begin_frame) override;
40   void SetIsSwapThrottled(bool is_swap_throttled) override;
41   void MaybeCompositeNow() override;
42
43  private:
44   void BeginFrameAndResetArgs(viz::BeginFrameArgs& args);
45   void SendDidNotProduceFrameAndResetArgs(viz::BeginFrameArgs& args);
46
47   raw_ptr<SchedulerClient> client_ = nullptr;
48
49   viz::BeginFrameArgs unused_args_;
50   bool needs_begin_frame_ = false;
51   bool is_swap_throttled_ = false;
52   bool missed_composite_now_ = false;
53 };
54
55 }  // namespace cc::slim
56
57 #endif  // CC_SLIM_DELAYED_SCHEDULER_H_