synchronous_compositor_factory_impl.h revision 116680a4aac90f2aa7413d9095a592090648e557
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_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_FACTORY_IMPL_H_ 6#define CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_FACTORY_IMPL_H_ 7 8#include "base/synchronization/lock.h" 9#include "content/browser/android/in_process/synchronous_input_event_filter.h" 10#include "content/renderer/android/synchronous_compositor_factory.h" 11#include "content/renderer/media/android/stream_texture_factory_synchronous_impl.h" 12#include "gpu/command_buffer/service/in_process_command_buffer.h" 13#include "webkit/common/gpu/context_provider_web_context.h" 14 15namespace gpu { 16class GLInProcessContext; 17} 18 19namespace webkit { 20namespace gpu { 21class WebGraphicsContext3DInProcessCommandBufferImpl; 22} 23} 24 25namespace content { 26 27class SynchronousCompositorFactoryImpl : public SynchronousCompositorFactory { 28 public: 29 SynchronousCompositorFactoryImpl(); 30 virtual ~SynchronousCompositorFactoryImpl(); 31 32 // SynchronousCompositorFactory 33 virtual scoped_refptr<base::MessageLoopProxy> GetCompositorMessageLoop() 34 OVERRIDE; 35 virtual bool RecordFullLayer() OVERRIDE; 36 virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface(int routing_id) 37 OVERRIDE; 38 virtual InputHandlerManagerClient* GetInputHandlerManagerClient() OVERRIDE; 39 virtual scoped_refptr<webkit::gpu::ContextProviderWebContext> 40 GetSharedOffscreenContextProviderForMainThread() OVERRIDE; 41 virtual scoped_refptr<StreamTextureFactory> CreateStreamTextureFactory( 42 int view_id) OVERRIDE; 43 virtual blink::WebGraphicsContext3D* CreateOffscreenGraphicsContext3D( 44 const blink::WebGraphicsContext3D::Attributes& attributes) OVERRIDE; 45 46 47 SynchronousInputEventFilter* synchronous_input_event_filter() { 48 return &synchronous_input_event_filter_; 49 } 50 51 void SetDeferredGpuService( 52 scoped_refptr<gpu::InProcessCommandBuffer::Service> service); 53 void DisableRecordFullLayer(); 54 void CompositorInitializedHardwareDraw(); 55 void CompositorReleasedHardwareDraw(); 56 57 scoped_refptr<cc::ContextProvider> 58 CreateOnscreenContextProviderForCompositorThread(); 59 gpu::GLInProcessContext* GetShareContext(); 60 61 private: 62 bool CanCreateMainThreadContext(); 63 scoped_refptr<StreamTextureFactorySynchronousImpl::ContextProvider> 64 TryCreateStreamTextureFactory(); 65 66 SynchronousInputEventFilter synchronous_input_event_filter_; 67 68 scoped_refptr<webkit::gpu::ContextProviderWebContext> 69 offscreen_context_for_main_thread_; 70 71 scoped_refptr<gpu::InProcessCommandBuffer::Service> service_; 72 scoped_ptr<gpu::GLInProcessContext> share_context_; 73 scoped_refptr<StreamTextureFactorySynchronousImpl::ContextProvider> 74 video_context_provider_; 75 76 bool record_full_layer_; 77 78 // |num_hardware_compositor_lock_| is updated on UI thread only but can be 79 // read on renderer main thread. 80 base::Lock num_hardware_compositor_lock_; 81 unsigned int num_hardware_compositors_; 82}; 83 84} // namespace content 85 86#endif // CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_FACTORY_IMPL_H_ 87