Home | History | Annotate | Download | only in compositor
      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