Index: cc/surfaces/onscreen_display_client.h |
diff --git a/cc/surfaces/onscreen_display_client.h b/cc/surfaces/onscreen_display_client.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ef61e53ef580fa82afb6c2b43e6048b5778a1272 |
--- /dev/null |
+++ b/cc/surfaces/onscreen_display_client.h |
@@ -0,0 +1,75 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_ |
+#define CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_ |
+ |
+#include "cc/surfaces/display_client.h" |
+ |
+#include "base/compiler_specific.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/single_thread_task_runner.h" |
+#include "cc/surfaces/display.h" |
+#include "cc/surfaces/surfaces_export.h" |
+ |
+namespace cc { |
+class ContextProvider; |
+class SurfaceManager; |
+class SurfaceDisplayOutputSurface; |
+ |
+// This class provides a DisplayClient implementation for drawing directly to an |
+// onscreen context. |
+class CC_SURFACES_EXPORT OnscreenDisplayClient |
+ : NON_EXPORTED_BASE(DisplayClient) { |
+ public: |
+ OnscreenDisplayClient( |
+ scoped_ptr<OutputSurface> output_surface, |
+ SurfaceManager* manager, |
+ SharedBitmapManager* bitmap_manager, |
+ gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
+ const RendererSettings& settings, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
+ ~OnscreenDisplayClient() override; |
+ |
+ bool Initialize(); |
+ Display* display() { return display_.get(); } |
+ void set_surface_output_surface(SurfaceDisplayOutputSurface* surface) { |
+ surface_display_output_surface_ = surface; |
+ } |
+ |
+ // DisplayClient implementation. |
+ void DisplayDamaged() override; |
+ void DidSwapBuffers() override; |
+ void DidSwapBuffersComplete() override; |
+ void CommitVSyncParameters(base::TimeTicks timebase, |
+ base::TimeDelta interval) override; |
+ void OutputSurfaceLost() override; |
+ void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override; |
+ |
+ bool output_surface_lost() { return output_surface_lost_; } |
+ |
+ private: |
+ void ScheduleDraw(); |
+ void Draw(); |
+ |
+ scoped_ptr<OutputSurface> output_surface_; |
+ scoped_ptr<Display> display_; |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
+ SurfaceDisplayOutputSurface* surface_display_output_surface_; |
+ bool scheduled_draw_; |
+ bool output_surface_lost_; |
+ // 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); |
+}; |
+ |
+} // namespace cc |
+ |
+#endif // CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_ |