diff options
author | tfarina <tfarina@chromium.org> | 2015-01-08 19:16:10 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-09 03:17:25 +0000 |
commit | 70da38b26b718679d02e579c8b0ea89fd38de06a (patch) | |
tree | 570c35625412b05611da291c9bc128a4d1bde305 /webkit | |
parent | 8af6efb11ac963bad4285294a0a2c7f33f0a38ad (diff) | |
download | chromium_src-70da38b26b718679d02e579c8b0ea89fd38de06a.zip chromium_src-70da38b26b718679d02e579c8b0ea89fd38de06a.tar.gz chromium_src-70da38b26b718679d02e579c8b0ea89fd38de06a.tar.bz2 |
Extract WebGraphicsContext3DInProcessCommandBufferImpl from webkit/.
This moves it into gpu/blink/ along side WebGraphicsContext3DImpl,
consolidating more this code as we are in the process of removing
webkit/ glue directory altogether. This is one more step on this way.
BUG=338338
TEST=compositor_unittests, gpu_unittests, content_unittests
R=jamesr@chromium.org,piman@chromium.org
TBR=boliu@chromium.org
Review URL: https://codereview.chromium.org/841773006
Cr-Commit-Position: refs/heads/master@{#310694}
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/common/gpu/BUILD.gn | 2 | ||||
-rw-r--r-- | webkit/common/gpu/context_provider_in_process.cc | 5 | ||||
-rw-r--r-- | webkit/common/gpu/context_provider_in_process.h | 10 | ||||
-rw-r--r-- | webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc | 180 | ||||
-rw-r--r-- | webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h | 110 | ||||
-rw-r--r-- | webkit/common/gpu/webkit_gpu.gyp | 2 |
6 files changed, 9 insertions, 300 deletions
diff --git a/webkit/common/gpu/BUILD.gn b/webkit/common/gpu/BUILD.gn index d8a7e18..43e0a64 100644 --- a/webkit/common/gpu/BUILD.gn +++ b/webkit/common/gpu/BUILD.gn @@ -12,8 +12,6 @@ component("gpu") { "context_provider_web_context.h", "grcontext_for_webgraphicscontext3d.cc", "grcontext_for_webgraphicscontext3d.h", - "webgraphicscontext3d_in_process_command_buffer_impl.cc", - "webgraphicscontext3d_in_process_command_buffer_impl.h", ] defines = [ "WEBKIT_GPU_IMPLEMENTATION" ] diff --git a/webkit/common/gpu/context_provider_in_process.cc b/webkit/common/gpu/context_provider_in_process.cc index 9eb6e41..23fc066 100644 --- a/webkit/common/gpu/context_provider_in_process.cc +++ b/webkit/common/gpu/context_provider_in_process.cc @@ -14,6 +14,8 @@ #include "gpu/command_buffer/client/gles2_implementation.h" #include "webkit/common/gpu/grcontext_for_webgraphicscontext3d.h" +using gpu_blink::WebGraphicsContext3DInProcessCommandBufferImpl; + namespace webkit { namespace gpu { @@ -152,8 +154,7 @@ class GrContext* ContextProviderInProcess::GrContext() { if (gr_context_) return gr_context_->get(); - gr_context_.reset( - new webkit::gpu::GrContextForWebGraphicsContext3D(context3d_.get())); + gr_context_.reset(new GrContextForWebGraphicsContext3D(context3d_.get())); return gr_context_->get(); } diff --git a/webkit/common/gpu/context_provider_in_process.h b/webkit/common/gpu/context_provider_in_process.h index 2867309..0e38083 100644 --- a/webkit/common/gpu/context_provider_in_process.h +++ b/webkit/common/gpu/context_provider_in_process.h @@ -9,8 +9,8 @@ #include "base/memory/scoped_ptr.h" #include "base/synchronization/lock.h" #include "base/threading/thread_checker.h" +#include "gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.h" #include "webkit/common/gpu/context_provider_web_context.h" -#include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h" #include "webkit/common/gpu/webkit_gpu_export.h" namespace blink { class WebGraphicsContext3D; } @@ -23,7 +23,8 @@ class WEBKIT_GPU_EXPORT ContextProviderInProcess : NON_EXPORTED_BASE(public ContextProviderWebContext) { public: static scoped_refptr<ContextProviderInProcess> Create( - scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> context3d, + scoped_ptr<gpu_blink::WebGraphicsContext3DInProcessCommandBufferImpl> + context3d, const std::string& debug_name); // Uses default attributes for creating an offscreen context. @@ -49,7 +50,8 @@ class WEBKIT_GPU_EXPORT ContextProviderInProcess protected: ContextProviderInProcess( - scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> context3d, + scoped_ptr<gpu_blink::WebGraphicsContext3DInProcessCommandBufferImpl> + context3d, const std::string& debug_name); ~ContextProviderInProcess() override; @@ -61,7 +63,7 @@ class WEBKIT_GPU_EXPORT ContextProviderInProcess base::ThreadChecker main_thread_checker_; base::ThreadChecker context_thread_checker_; - scoped_ptr<webkit::gpu::WebGraphicsContext3DInProcessCommandBufferImpl> + scoped_ptr<gpu_blink::WebGraphicsContext3DInProcessCommandBufferImpl> context3d_; scoped_ptr<webkit::gpu::GrContextForWebGraphicsContext3D> gr_context_; diff --git a/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc b/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc deleted file mode 100644 index 3bf38f8..0000000 --- a/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h" - -#include <GLES2/gl2.h> -#ifndef GL_GLEXT_PROTOTYPES -#define GL_GLEXT_PROTOTYPES 1 -#endif -#include <GLES2/gl2ext.h> -#include <GLES2/gl2extchromium.h> - -#include <string> - -#include "base/atomicops.h" -#include "base/bind.h" -#include "base/bind_helpers.h" -#include "base/callback.h" -#include "base/logging.h" -#include "gpu/command_buffer/client/gles2_implementation.h" -#include "gpu/command_buffer/common/gles2_cmd_utils.h" -#include "gpu/skia_bindings/gl_bindings_skia_cmd_buffer.h" -#include "ui/gfx/geometry/size.h" -#include "ui/gl/gl_implementation.h" - -using gpu::gles2::GLES2Implementation; -using gpu::GLInProcessContext; - -namespace webkit { -namespace gpu { - -// static -scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> -WebGraphicsContext3DInProcessCommandBufferImpl::CreateViewContext( - const blink::WebGraphicsContext3D::Attributes& attributes, - bool lose_context_when_out_of_memory, - gfx::AcceleratedWidget window) { - DCHECK_NE(gfx::GetGLImplementation(), gfx::kGLImplementationNone); - bool is_offscreen = false; - return make_scoped_ptr(new WebGraphicsContext3DInProcessCommandBufferImpl( - scoped_ptr< ::gpu::GLInProcessContext>(), - attributes, - lose_context_when_out_of_memory, - is_offscreen, - window)); -} - -// static -scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> -WebGraphicsContext3DInProcessCommandBufferImpl::CreateOffscreenContext( - const blink::WebGraphicsContext3D::Attributes& attributes, - bool lose_context_when_out_of_memory) { - bool is_offscreen = true; - return make_scoped_ptr(new WebGraphicsContext3DInProcessCommandBufferImpl( - scoped_ptr< ::gpu::GLInProcessContext>(), - attributes, - lose_context_when_out_of_memory, - is_offscreen, - gfx::kNullAcceleratedWidget)); -} - -scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> -WebGraphicsContext3DInProcessCommandBufferImpl::WrapContext( - scoped_ptr< ::gpu::GLInProcessContext> context, - const blink::WebGraphicsContext3D::Attributes& attributes) { - bool lose_context_when_out_of_memory = false; // Not used. - bool is_offscreen = true; // Not used. - return make_scoped_ptr(new WebGraphicsContext3DInProcessCommandBufferImpl( - context.Pass(), - attributes, - lose_context_when_out_of_memory, - is_offscreen, - gfx::kNullAcceleratedWidget /* window. Not used. */)); -} - -WebGraphicsContext3DInProcessCommandBufferImpl:: - WebGraphicsContext3DInProcessCommandBufferImpl( - scoped_ptr< ::gpu::GLInProcessContext> context, - const blink::WebGraphicsContext3D::Attributes& attributes, - bool lose_context_when_out_of_memory, - bool is_offscreen, - gfx::AcceleratedWidget window) - : share_resources_(attributes.shareResources), - webgl_context_(attributes.webGL), - is_offscreen_(is_offscreen), - window_(window), - context_(context.Pass()) { - ConvertAttributes(attributes, &attribs_); - attribs_.lose_context_when_out_of_memory = lose_context_when_out_of_memory; -} - -WebGraphicsContext3DInProcessCommandBufferImpl:: - ~WebGraphicsContext3DInProcessCommandBufferImpl() { -} - -size_t WebGraphicsContext3DInProcessCommandBufferImpl::GetMappedMemoryLimit() { - return context_->GetMappedMemoryLimit(); -} - -bool WebGraphicsContext3DInProcessCommandBufferImpl::MaybeInitializeGL() { - if (initialized_) - return true; - - if (initialize_failed_) - return false; - - if (!context_) { - // TODO(kbr): More work will be needed in this implementation to - // properly support GPU switching. Like in the out-of-process - // command buffer implementation, all previously created contexts - // will need to be lost either when the first context requesting the - // discrete GPU is created, or the last one is destroyed. - gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu; - context_.reset(GLInProcessContext::Create( - NULL, /* service */ - NULL, /* surface */ - is_offscreen_, - window_, - gfx::Size(1, 1), - NULL, /* share_context */ - share_resources_, - attribs_, - gpu_preference, - ::gpu::GLInProcessContextSharedMemoryLimits(), - nullptr, - nullptr)); - } - - if (context_) { - base::Closure context_lost_callback = base::Bind( - &WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost, - base::Unretained(this)); - context_->SetContextLostCallback(context_lost_callback); - } else { - initialize_failed_ = true; - return false; - } - - real_gl_ = context_->GetImplementation(); - setGLInterface(real_gl_); - - if (real_gl_ && webgl_context_) - real_gl_->EnableFeatureCHROMIUM("webgl_enable_glsl_webgl_validation"); - - initialized_ = true; - return true; -} - -bool -WebGraphicsContext3DInProcessCommandBufferImpl::InitializeOnCurrentThread() { - if (!MaybeInitializeGL()) - return false; - return context_ && !isContextLost(); -} - -bool WebGraphicsContext3DInProcessCommandBufferImpl::isContextLost() { - return context_lost_reason_ != GL_NO_ERROR; -} - -WGC3Denum WebGraphicsContext3DInProcessCommandBufferImpl:: - getGraphicsResetStatusARB() { - return context_lost_reason_; -} - -::gpu::ContextSupport* -WebGraphicsContext3DInProcessCommandBufferImpl::GetContextSupport() { - return real_gl_; -} - -void WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost() { - // TODO(kbr): improve the precision here. - context_lost_reason_ = GL_UNKNOWN_CONTEXT_RESET_ARB; - if (context_lost_callback_) { - context_lost_callback_->onContextLost(); - } -} - -} // namespace gpu -} // namespace webkit diff --git a/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h b/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h deleted file mode 100644 index 1779a5b..0000000 --- a/webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_ -#define WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_ - -#include <vector> - -#include "base/compiler_specific.h" -#include "base/memory/scoped_ptr.h" -#include "gpu/blink/webgraphicscontext3d_impl.h" -#include "gpu/command_buffer/client/gl_in_process_context.h" -#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" -#include "third_party/WebKit/public/platform/WebString.h" -#include "ui/gfx/native_widget_types.h" -#include "webkit/common/gpu/webkit_gpu_export.h" - -namespace gpu { -class ContextSupport; - -namespace gles2 { -class GLES2Interface; -class GLES2Implementation; -struct ContextCreationAttribHelper; -} -} - -namespace gpu { -class GLInProcessContext; -} - -namespace webkit { -namespace gpu { - -class WEBKIT_GPU_EXPORT WebGraphicsContext3DInProcessCommandBufferImpl - : public gpu_blink::WebGraphicsContext3DImpl { - public: - enum MappedMemoryReclaimLimit { - kNoLimit = 0, - }; - - static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> - CreateViewContext( - const blink::WebGraphicsContext3D::Attributes& attributes, - bool lose_context_when_out_of_memory, - gfx::AcceleratedWidget window); - - static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> - CreateOffscreenContext( - const blink::WebGraphicsContext3D::Attributes& attributes, - bool lose_context_when_out_of_memory); - - static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> - WrapContext( - scoped_ptr< ::gpu::GLInProcessContext> context, - const blink::WebGraphicsContext3D::Attributes& attributes); - - virtual ~WebGraphicsContext3DInProcessCommandBufferImpl(); - - size_t GetMappedMemoryLimit(); - - bool InitializeOnCurrentThread(); - - //---------------------------------------------------------------------- - // WebGraphicsContext3D methods - virtual bool isContextLost(); - - virtual WGC3Denum getGraphicsResetStatusARB(); - - ::gpu::ContextSupport* GetContextSupport(); - - ::gpu::gles2::GLES2Implementation* GetImplementation() { - return real_gl_; - } - - private: - WebGraphicsContext3DInProcessCommandBufferImpl( - scoped_ptr< ::gpu::GLInProcessContext> context, - const blink::WebGraphicsContext3D::Attributes& attributes, - bool lose_context_when_out_of_memory, - bool is_offscreen, - gfx::AcceleratedWidget window); - - void OnContextLost(); - - bool MaybeInitializeGL(); - - // Used to try to find bugs in code that calls gl directly through the gl api - // instead of going through WebGraphicsContext3D. - void ClearContext(); - - ::gpu::gles2::ContextCreationAttribHelper attribs_; - bool share_resources_; - bool webgl_context_; - - bool is_offscreen_; - // Only used when not offscreen. - gfx::AcceleratedWidget window_; - - // The context we use for OpenGL rendering. - scoped_ptr< ::gpu::GLInProcessContext> context_; - // The GLES2Implementation we use for OpenGL rendering. - ::gpu::gles2::GLES2Implementation* real_gl_; -}; - -} // namespace gpu -} // namespace webkit - -#endif // WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_ diff --git a/webkit/common/gpu/webkit_gpu.gyp b/webkit/common/gpu/webkit_gpu.gyp index 7a289ff..390aacc 100644 --- a/webkit/common/gpu/webkit_gpu.gyp +++ b/webkit/common/gpu/webkit_gpu.gyp @@ -42,8 +42,6 @@ 'context_provider_web_context.h', 'grcontext_for_webgraphicscontext3d.cc', 'grcontext_for_webgraphicscontext3d.h', - 'webgraphicscontext3d_in_process_command_buffer_impl.cc', - 'webgraphicscontext3d_in_process_command_buffer_impl.h', ], 'defines': [ 'WEBKIT_GPU_IMPLEMENTATION', |