1 // Copyright 2019 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 COMPONENTS_VIZ_SERVICE_DISPLAY_DISPLAY_SCHEDULER_BASE_H_
6 #define COMPONENTS_VIZ_SERVICE_DISPLAY_DISPLAY_SCHEDULER_BASE_H_
7 
8 #include "base/time/time.h"
9 #include "components/viz/service/display/display_damage_tracker.h"
10 #include "components/viz/service/viz_service_export.h"
11 
12 namespace viz {
13 
14 struct BeginFrameAck;
15 class DisplayDamageTracker;
16 
17 class VIZ_SERVICE_EXPORT DisplaySchedulerClient {
18  public:
19   virtual ~DisplaySchedulerClient() = default;
20 
21   // |expected_display_time| is used as video timestamps for capturing frame
22   // sinks. DisplayScheduler passes the end of current VSync interval.
23   virtual bool DrawAndSwap(base::TimeTicks expected_display_time) = 0;
24   virtual void DidFinishFrame(const BeginFrameAck& ack) = 0;
25 };
26 
27 class VIZ_SERVICE_EXPORT DisplaySchedulerBase
28     : public DisplayDamageTracker::Observer {
29  public:
30   DisplaySchedulerBase();
31   ~DisplaySchedulerBase() override;
32 
33   void SetClient(DisplaySchedulerClient* client);
34   void SetDamageTracker(DisplayDamageTracker* damage_tracker);
35 
36   virtual void SetVisible(bool visible) = 0;
37   virtual void ForceImmediateSwapIfPossible() = 0;
38   virtual void SetNeedsOneBeginFrame(bool needs_draw) = 0;
39   virtual void DidSwapBuffers() = 0;
40   virtual void DidReceiveSwapBuffersAck() = 0;
41   virtual void OutputSurfaceLost() = 0;
42 
43  protected:
44   DisplaySchedulerClient* client_ = nullptr;
45   DisplayDamageTracker* damage_tracker_ = nullptr;
46 };
47 
48 }  // namespace viz
49 
50 #endif  // COMPONENTS_VIZ_SERVICE_DISPLAY_DISPLAY_SCHEDULER_BASE_H_
51