1 // Copyright 2014 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 CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_OUTPUT_SURFACE_H_ 6 #define CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_OUTPUT_SURFACE_H_ 7 8 #include "base/id_map.h" 9 #include "base/threading/non_thread_safe.h" 10 #include "cc/output/output_surface.h" 11 #include "content/common/content_export.h" 12 #include "ui/compositor/compositor_vsync_manager.h" 13 14 namespace cc { 15 class SoftwareOutputDevice; 16 } 17 18 namespace content { 19 class ContextProviderCommandBuffer; 20 class ReflectorImpl; 21 class WebGraphicsContext3DCommandBufferImpl; 22 23 class CONTENT_EXPORT BrowserCompositorOutputSurface 24 : public cc::OutputSurface, 25 public ui::CompositorVSyncManager::Observer, 26 public base::NonThreadSafe { 27 public: 28 virtual ~BrowserCompositorOutputSurface(); 29 30 // cc::OutputSurface implementation. 31 virtual bool BindToClient(cc::OutputSurfaceClient* client) OVERRIDE; 32 virtual void OnSwapBuffersComplete() OVERRIDE; 33 34 // ui::CompositorOutputSurface::Observer implementation. 35 virtual void OnUpdateVSyncParameters(base::TimeTicks timebase, 36 base::TimeDelta interval) OVERRIDE; 37 38 void OnUpdateVSyncParametersFromGpu(base::TimeTicks tiembase, 39 base::TimeDelta interval); 40 41 void SetReflector(ReflectorImpl* reflector); 42 43 #if defined(OS_MACOSX) 44 void OnSurfaceDisplayed(); 45 #endif 46 47 protected: 48 // Constructor used by the accelerated implementation. 49 BrowserCompositorOutputSurface( 50 const scoped_refptr<ContextProviderCommandBuffer>& context, 51 int surface_id, 52 IDMap<BrowserCompositorOutputSurface>* output_surface_map, 53 const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager); 54 55 // Constructor used by the software implementation. 56 BrowserCompositorOutputSurface( 57 scoped_ptr<cc::SoftwareOutputDevice> software_device, 58 int surface_id, 59 IDMap<BrowserCompositorOutputSurface>* output_surface_map, 60 const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager); 61 62 int surface_id_; 63 IDMap<BrowserCompositorOutputSurface>* output_surface_map_; 64 65 scoped_refptr<ui::CompositorVSyncManager> vsync_manager_; 66 scoped_refptr<ReflectorImpl> reflector_; 67 68 private: 69 void Initialize(); 70 71 DISALLOW_COPY_AND_ASSIGN(BrowserCompositorOutputSurface); 72 }; 73 74 } // namespace content 75 76 #endif // CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_OUTPUT_SURFACE_H_ 77