1 // Copyright (c) 2013 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_COMMON_GPU_CLIENT_CONTEXT_PROVIDER_COMMAND_BUFFER 6 #define CONTENT_COMMON_GPU_CLIENT_CONTEXT_PROVIDER_COMMAND_BUFFER 7 8 #include "base/compiler_specific.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/synchronization/lock.h" 11 #include "base/threading/thread_checker.h" 12 #include "cc/output/context_provider.h" 13 #include "content/common/content_export.h" 14 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 15 #include "webkit/common/gpu/context_provider_web_context.h" 16 17 namespace webkit { 18 namespace gpu { 19 class GrContextForWebGraphicsContext3D; 20 } 21 } 22 23 namespace content { 24 25 // Implementation of cc::ContextProvider that provides a 26 // WebGraphicsContext3DCommandBufferImpl context and a GrContext. 27 class CONTENT_EXPORT ContextProviderCommandBuffer NON_EXPORTED_BASE(public webkit::gpu::ContextProviderWebContext)28 : NON_EXPORTED_BASE(public webkit::gpu::ContextProviderWebContext) { 29 public: 30 static scoped_refptr<ContextProviderCommandBuffer> Create( 31 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context3d, 32 const std::string& debug_name); 33 34 CommandBufferProxyImpl* GetCommandBufferProxy(); 35 36 // ContextProviderWebContext implementation. 37 virtual WebGraphicsContext3DCommandBufferImpl* WebContext3D() OVERRIDE; 38 39 // cc::ContextProvider implementation. 40 virtual bool BindToCurrentThread() OVERRIDE; 41 virtual gpu::gles2::GLES2Interface* ContextGL() OVERRIDE; 42 virtual gpu::ContextSupport* ContextSupport() OVERRIDE; 43 virtual class GrContext* GrContext() OVERRIDE; 44 virtual Capabilities ContextCapabilities() OVERRIDE; 45 virtual bool IsContextLost() OVERRIDE; 46 virtual void VerifyContexts() OVERRIDE; 47 virtual void DeleteCachedResources() OVERRIDE; 48 virtual bool DestroyedOnMainThread() OVERRIDE; 49 virtual void SetLostContextCallback( 50 const LostContextCallback& lost_context_callback) OVERRIDE; 51 virtual void SetMemoryPolicyChangedCallback( 52 const MemoryPolicyChangedCallback& memory_policy_changed_callback) 53 OVERRIDE; 54 55 protected: 56 ContextProviderCommandBuffer( 57 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context3d, 58 const std::string& debug_name); 59 virtual ~ContextProviderCommandBuffer(); 60 61 void OnLostContext(); 62 void OnMemoryAllocationChanged(const gpu::MemoryAllocation& allocation); 63 64 private: 65 void InitializeCapabilities(); 66 67 base::ThreadChecker main_thread_checker_; 68 base::ThreadChecker context_thread_checker_; 69 70 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context3d_; 71 scoped_ptr<webkit::gpu::GrContextForWebGraphicsContext3D> gr_context_; 72 73 cc::ContextProvider::Capabilities capabilities_; 74 std::string debug_name_; 75 76 LostContextCallback lost_context_callback_; 77 MemoryPolicyChangedCallback memory_policy_changed_callback_; 78 79 base::Lock main_thread_lock_; 80 bool destroyed_; 81 82 class LostContextCallbackProxy; 83 scoped_ptr<LostContextCallbackProxy> lost_context_callback_proxy_; 84 }; 85 86 } // namespace content 87 88 #endif // CONTENT_COMMON_GPU_CLIENT_CONTEXT_PROVIDER_COMMAND_BUFFER 89