Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(335)

Unified Diff: webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc

Issue 12908004: Lazy initialize WGC3DInProcessCommandBufferImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc
diff --git a/webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc b/webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc
index f55d5a3a759f2ee502c827b44c925830702541cf..3caa796ac46b890e3e4ae65b5859d3ba067a7de9 100644
--- a/webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc
+++ b/webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc
@@ -544,7 +544,8 @@ void GLInProcessContext::OnContextLost() {
WebGraphicsContext3DInProcessCommandBufferImpl::
WebGraphicsContext3DInProcessCommandBufferImpl()
- : context_(NULL),
+ : pending_lazy_initialize_(false),
+ context_(NULL),
gl_(NULL),
context_lost_callback_(NULL),
context_lost_reason_(GL_NO_ERROR),
@@ -560,15 +561,22 @@ WebGraphicsContext3DInProcessCommandBufferImpl::
}
bool WebGraphicsContext3DInProcessCommandBufferImpl::Initialize(
- WebGraphicsContext3D::Attributes attributes,
- WebKit::WebGraphicsContext3D* view_context) {
+ const WebGraphicsContext3D::Attributes& attributes) {
+ attributes_ = attributes;
+ pending_lazy_initialize_ = true;
+ return true;
piman 2013/03/21 22:29:11 If Initialize doesn't do anything any more and can
boliu 2013/03/21 22:53:23 Done.
+}
+
+bool WebGraphicsContext3DInProcessCommandBufferImpl::DoInitialize() {
+ DCHECK(pending_lazy_initialize_);
+
// Convert WebGL context creation attributes into GLInProcessContext / EGL
// size requests.
- const int alpha_size = attributes.alpha ? 8 : 0;
- const int depth_size = attributes.depth ? 24 : 0;
- const int stencil_size = attributes.stencil ? 8 : 0;
- const int samples = attributes.antialias ? 4 : 0;
- const int sample_buffers = attributes.antialias ? 1 : 0;
+ const int alpha_size = attributes_.alpha ? 8 : 0;
+ const int depth_size = attributes_.depth ? 24 : 0;
+ const int stencil_size = attributes_.stencil ? 8 : 0;
+ const int samples = attributes_.antialias ? 4 : 0;
+ const int sample_buffers = attributes_.antialias ? 1 : 0;
const int32 attribs[] = {
GLInProcessContext::ALPHA_SIZE, alpha_size,
GLInProcessContext::DEPTH_SIZE, depth_size,
@@ -587,22 +595,14 @@ bool WebGraphicsContext3DInProcessCommandBufferImpl::Initialize(
// discrete GPU is created, or the last one is destroyed.
gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
- GLInProcessContext* parent_context = NULL;
- if (view_context) {
- WebGraphicsContext3DInProcessCommandBufferImpl* context_impl =
- static_cast<WebGraphicsContext3DInProcessCommandBufferImpl*>(
- view_context);
- parent_context = context_impl->context_;
- }
-
WebGraphicsContext3DInProcessCommandBufferImpl* context_group = NULL;
base::AutoLock lock(g_all_shared_contexts_lock.Get());
- if (attributes.shareResources)
+ if (attributes_.shareResources)
context_group = g_all_shared_contexts.Pointer()->empty() ?
NULL : *g_all_shared_contexts.Pointer()->begin();
context_ = GLInProcessContext::CreateOffscreenContext(
- parent_context,
+ NULL,
piman 2013/03/21 22:29:11 note: if we don't use parenting here any more, the
boliu 2013/03/21 22:53:23 Done.
gfx::Size(1, 1),
context_group ? context_group->context_ : NULL,
preferred_extensions,
@@ -614,7 +614,7 @@ bool WebGraphicsContext3DInProcessCommandBufferImpl::Initialize(
gl_ = context_->GetImplementation();
- if (gl_ && attributes.noExtensions)
+ if (gl_ && attributes_.noExtensions)
gl_->EnableFeatureCHROMIUM("webgl_enable_glsl_webgl_validation");
context_->SetContextLostCallback(
@@ -624,7 +624,6 @@ bool WebGraphicsContext3DInProcessCommandBufferImpl::Initialize(
// Set attributes_ from created offscreen context.
{
- attributes_ = attributes;
GLint alpha_bits = 0;
getIntegerv(GL_ALPHA_BITS, &alpha_bits);
attributes_.alpha = alpha_bits > 0;
@@ -638,15 +637,18 @@ bool WebGraphicsContext3DInProcessCommandBufferImpl::Initialize(
getIntegerv(GL_SAMPLE_BUFFERS, &sample_buffers);
attributes_.antialias = sample_buffers > 0;
}
- makeContextCurrent();
- if (attributes.shareResources)
+ if (attributes_.shareResources)
g_all_shared_contexts.Pointer()->insert(this);
+ pending_lazy_initialize_ = false;
return true;
}
bool WebGraphicsContext3DInProcessCommandBufferImpl::makeContextCurrent() {
+ if (pending_lazy_initialize_ && !DoInitialize())
+ return false;
+
return GLInProcessContext::MakeCurrent(context_);
}
« no previous file with comments | « webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h ('k') | webkit/support/test_webkit_platform_support.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698