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