15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// found in the LICENSE file. 4558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_OUTPUT_SURFACE_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_OUTPUT_SURFACE_H_ 7558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "base/id_map.h" 9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/threading/non_thread_safe.h" 10558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "cc/output/output_surface.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/common/content_export.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/compositor/compositor_vsync_manager.h" 13558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace cc { 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SoftwareOutputDevice; 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace content { 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class ContextProviderCommandBuffer; 20558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass ReflectorImpl; 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class WebGraphicsContext3DCommandBufferImpl; 22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class CONTENT_EXPORT BrowserCompositorOutputSurface 24558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch : public cc::OutputSurface, 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public ui::CompositorVSyncManager::Observer, 26558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch public base::NonThreadSafe { 27558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch public: 28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual ~BrowserCompositorOutputSurface(); 29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // cc::OutputSurface implementation. 31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual bool BindToClient(cc::OutputSurfaceClient* client) OVERRIDE; 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnSwapBuffersComplete() OVERRIDE; 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ui::CompositorOutputSurface::Observer implementation. 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnUpdateVSyncParameters(base::TimeTicks timebase, 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::TimeDelta interval) OVERRIDE; 37558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnUpdateVSyncParametersFromGpu(base::TimeTicks tiembase, 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::TimeDelta interval); 40558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 41558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void SetReflector(ReflectorImpl* reflector); 42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_MACOSX) 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnSurfaceDisplayed(); 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected: 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Constructor used by the accelerated implementation. 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserCompositorOutputSurface( 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const scoped_refptr<ContextProviderCommandBuffer>& context, 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int surface_id, 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IDMap<BrowserCompositorOutputSurface>* output_surface_map, 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Constructor used by the software implementation. 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserCompositorOutputSurface( 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<cc::SoftwareOutputDevice> software_device, 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int surface_id, 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IDMap<BrowserCompositorOutputSurface>* output_surface_map, 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<ui::CompositorVSyncManager>& vsync_manager); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 62558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int surface_id_; 63d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch IDMap<BrowserCompositorOutputSurface>* output_surface_map_; 64558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<ui::CompositorVSyncManager> vsync_manager_; 66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_refptr<ReflectorImpl> reflector_; 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void Initialize(); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BrowserCompositorOutputSurface); 72558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}; 73558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 74558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} // namespace content 75558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // CONTENT_BROWSER_COMPOSITOR_BROWSER_COMPOSITOR_OUTPUT_SURFACE_H_ 77