Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / browser / compositor / onscreen_display_client.h
index afe2b39..be6b052 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/single_thread_task_runner.h"
 #include "cc/surfaces/display.h"
 
 namespace cc {
@@ -17,26 +18,46 @@ class SurfaceManager;
 }
 
 namespace content {
+class SurfaceDisplayOutputSurface;
 
 // This class provides a DisplayClient implementation for drawing directly to an
 // onscreen context.
 class OnscreenDisplayClient : cc::DisplayClient {
  public:
   OnscreenDisplayClient(
-      const scoped_refptr<cc::ContextProvider>& onscreen_context_provider,
-      scoped_ptr<cc::OutputSurface> software_surface,
-      cc::SurfaceManager* manager);
+      scoped_ptr<cc::OutputSurface> output_surface,
+      cc::SurfaceManager* manager,
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
   virtual ~OnscreenDisplayClient();
 
   cc::Display* display() { return display_.get(); }
+  void set_surface_output_surface(SurfaceDisplayOutputSurface* surface) {
+    surface_display_output_surface_ = surface;
+  }
 
   // cc::DisplayClient implementation.
   virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface() OVERRIDE;
+  virtual void DisplayDamaged() OVERRIDE;
+  virtual void DidSwapBuffers() OVERRIDE;
+  virtual void DidSwapBuffersComplete() OVERRIDE;
+  virtual void CommitVSyncParameters(base::TimeTicks timebase,
+                                     base::TimeDelta interval) OVERRIDE;
 
  private:
-  scoped_refptr<cc::ContextProvider> onscreen_context_provider_;
-  scoped_ptr<cc::OutputSurface> software_surface_;
+  void ScheduleDraw();
+  void Draw();
+
+  scoped_ptr<cc::OutputSurface> output_surface_;
   scoped_ptr<cc::Display> display_;
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+  SurfaceDisplayOutputSurface* surface_display_output_surface_;
+  bool scheduled_draw_;
+  // True if a draw should be scheduled, but it's hit the limit on max frames
+  // pending.
+  bool deferred_draw_;
+  int pending_frames_;
+
+  base::WeakPtrFactory<OnscreenDisplayClient> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(OnscreenDisplayClient);
 };