Index: cc/output/output_surface.h |
diff --git a/cc/output/output_surface.h b/cc/output/output_surface.h |
index d3eca54fa83d98023e0c71e623785a5fd8422d8c..a723645a896159ca5dd40f3a5e0dccc69743dddb 100644 |
--- a/cc/output/output_surface.h |
+++ b/cc/output/output_surface.h |
@@ -16,6 +16,8 @@ |
#include "cc/output/context_provider.h" |
#include "cc/output/overlay_candidate_validator.h" |
#include "cc/output/software_output_device.h" |
+#include "cc/scheduler/frame_source.h" |
+#include "ui/compositor/compositor_vsync_manager.h" |
namespace base { class SingleThreadTaskRunner; } |
@@ -41,7 +43,7 @@ class OutputSurfaceClient; |
// From here on, it will only be used on the compositor thread. |
// 3. If the 3D context is lost, then the compositor will delete the output |
// surface (on the compositor thread) and go back to step 1. |
-class CC_EXPORT OutputSurface { |
+class CC_EXPORT OutputSurface : public BeginFrameSource { |
public: |
enum { |
DEFAULT_MAX_FRAMES_PENDING = 2 |
@@ -121,11 +123,6 @@ class CC_EXPORT OutputSurface { |
// processing should be stopped, or lowered in priority. |
virtual void UpdateSmoothnessTakesPriority(bool prefer_smoothness) {} |
- // Requests a BeginFrame notification from the output surface. The |
- // notification will be delivered by calling |
- // OutputSurfaceClient::BeginFrame until the callback is disabled. |
- virtual void SetNeedsBeginFrame(bool enable) {} |
- |
bool HasClient() { return !!client_; } |
// Returns an estimate of the current GPU latency. When only a software |
@@ -137,8 +134,22 @@ class CC_EXPORT OutputSurface { |
return overlay_candidate_validator_.get(); |
} |
+ void AddVSyncObserver(ui::CompositorVSyncManager::Observer* obs) { |
+ vsync_observer_ = obs; |
+ }; |
+ |
+ // BeginFrameSource |
+ virtual void SetNeedsBeginFrames(bool needs_begin_frames) OVERRIDE; |
+ virtual bool NeedsBeginFrames() const OVERRIDE; |
+ virtual void DidFinishFrame(size_t remaining_frames) OVERRIDE {} |
+ virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE; |
+ |
protected: |
+ bool needs_begin_frames_ = false; |
+ |
OutputSurfaceClient* client_; |
+ ui::CompositorVSyncManager::Observer* vsync_observer_; |
+ BeginFrameObserver* begin_frame_observer_; |
// Synchronously initialize context3d and enter hardware mode. |
// This can only supported in threaded compositing mode. |