// 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 output_surface, SurfaceManager* manager, SharedBitmapManager* bitmap_manager, gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, const RendererSettings& settings, scoped_refptr 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 output_surface_; scoped_ptr display_; scoped_refptr 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 weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(OnscreenDisplayClient); }; } // namespace cc #endif // CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_