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

Side by Side Diff: content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc

Issue 9667012: Fix --single-process mode issues with GpuChannelHostFactory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" 5 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
6 6
7 #include "third_party/khronos/GLES2/gl2.h" 7 #include "third_party/khronos/GLES2/gl2.h"
8 #ifndef GL_GLEXT_PROTOTYPES 8 #ifndef GL_GLEXT_PROTOTYPES
9 #define GL_GLEXT_PROTOTYPES 1 9 #define GL_GLEXT_PROTOTYPES 1
10 #endif 10 #endif
(...skipping 30 matching lines...) Expand all
41 base::AutoLock lock(g_all_shared_contexts_lock.Get()); 41 base::AutoLock lock(g_all_shared_contexts_lock.Get());
42 g_all_shared_contexts.Pointer()->clear(); 42 g_all_shared_contexts.Pointer()->clear();
43 } 43 }
44 44
45 } // namespace anonymous 45 } // namespace anonymous
46 46
47 47
48 WebGraphicsContext3DCommandBufferImpl::WebGraphicsContext3DCommandBufferImpl( 48 WebGraphicsContext3DCommandBufferImpl::WebGraphicsContext3DCommandBufferImpl(
49 int surface_id, 49 int surface_id,
50 const GURL& active_url, 50 const GURL& active_url,
51 GpuChannelHostFactory* factory,
51 const base::WeakPtr<WebGraphicsContext3DSwapBuffersClient>& swap_client) 52 const base::WeakPtr<WebGraphicsContext3DSwapBuffersClient>& swap_client)
52 : initialize_failed_(false), 53 : initialize_failed_(false),
54 factory_(factory),
53 context_(NULL), 55 context_(NULL),
54 gl_(NULL), 56 gl_(NULL),
55 host_(NULL), 57 host_(NULL),
56 surface_id_(surface_id), 58 surface_id_(surface_id),
57 active_url_(active_url), 59 active_url_(active_url),
58 swap_client_(swap_client), 60 swap_client_(swap_client),
59 memory_allocation_changed_callback_(0), 61 memory_allocation_changed_callback_(0),
60 context_lost_callback_(0), 62 context_lost_callback_(0),
61 context_lost_reason_(GL_NO_ERROR), 63 context_lost_reason_(GL_NO_ERROR),
62 error_message_callback_(0), 64 error_message_callback_(0),
(...skipping 18 matching lines...) Expand all
81 base::AutoLock lock(g_all_shared_contexts_lock.Get()); 83 base::AutoLock lock(g_all_shared_contexts_lock.Get());
82 g_all_shared_contexts.Pointer()->erase(this); 84 g_all_shared_contexts.Pointer()->erase(this);
83 } 85 }
84 delete context_; 86 delete context_;
85 } 87 }
86 88
87 bool WebGraphicsContext3DCommandBufferImpl::Initialize( 89 bool WebGraphicsContext3DCommandBufferImpl::Initialize(
88 const WebGraphicsContext3D::Attributes& attributes) { 90 const WebGraphicsContext3D::Attributes& attributes) {
89 DCHECK(!context_); 91 DCHECK(!context_);
90 TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl::initialize"); 92 TRACE_EVENT0("gpu", "WebGfxCtx3DCmdBfrImpl::initialize");
91 GpuChannelHostFactory* factory = GpuChannelHostFactory::instance(); 93 if (!factory_)
92 if (!factory)
93 return false; 94 return false;
94 95
95 // The noExtensions and canRecoverFromContextLoss flags are 96 // The noExtensions and canRecoverFromContextLoss flags are
96 // currently used as hints that we are creating a context on 97 // currently used as hints that we are creating a context on
97 // behalf of WebGL or accelerated 2D canvas, respectively. 98 // behalf of WebGL or accelerated 2D canvas, respectively.
98 if (attributes.noExtensions || !attributes.canRecoverFromContextLoss) 99 if (attributes.noExtensions || !attributes.canRecoverFromContextLoss)
99 gpu_preference_ = gfx::PreferDiscreteGpu; 100 gpu_preference_ = gfx::PreferDiscreteGpu;
100 101
101 bool retry = false; 102 bool retry = false;
102 103
103 // Note similar code in Pepper PlatformContext3DImpl::Init. 104 // Note similar code in Pepper PlatformContext3DImpl::Init.
104 do { 105 do {
105 host_ = factory->EstablishGpuChannelSync( 106 host_ = factory_->EstablishGpuChannelSync(
106 content:: 107 content::
107 CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE); 108 CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE);
108 if (!host_) 109 if (!host_)
109 return false; 110 return false;
110 DCHECK(host_->state() == GpuChannelHost::kConnected); 111 DCHECK(host_->state() == GpuChannelHost::kConnected);
111 112
112 if (!retry) { 113 if (!retry) {
113 // If the creation of this context requires all contexts for this 114 // If the creation of this context requires all contexts for this
114 // client to be destroyed on the GPU process side, then drop the 115 // client to be destroyed on the GPU process side, then drop the
115 // channel and recreate it. 116 // channel and recreate it.
(...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after
1109 1110
1110 void WebGraphicsContext3DCommandBufferImpl::deleteShader(WebGLId shader) { 1111 void WebGraphicsContext3DCommandBufferImpl::deleteShader(WebGLId shader) {
1111 gl_->DeleteShader(shader); 1112 gl_->DeleteShader(shader);
1112 } 1113 }
1113 1114
1114 void WebGraphicsContext3DCommandBufferImpl::deleteTexture(WebGLId texture) { 1115 void WebGraphicsContext3DCommandBufferImpl::deleteTexture(WebGLId texture) {
1115 gl_->DeleteTextures(1, &texture); 1116 gl_->DeleteTextures(1, &texture);
1116 } 1117 }
1117 1118
1118 bool WebGraphicsContext3DCommandBufferImpl::ShouldUseSwapClient() { 1119 bool WebGraphicsContext3DCommandBufferImpl::ShouldUseSwapClient() {
1119 GpuChannelHostFactory* factory = GpuChannelHostFactory::instance(); 1120 return factory_ && factory_->IsMainThread() && swap_client_.get();
1120 return factory && factory->IsMainThread() && swap_client_.get();
1121 } 1121 }
1122 1122
1123 void WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete() { 1123 void WebGraphicsContext3DCommandBufferImpl::OnSwapBuffersComplete() {
1124 typedef WebGraphicsContext3DSwapBuffersClient WGC3DSwapClient; 1124 typedef WebGraphicsContext3DSwapBuffersClient WGC3DSwapClient;
1125 // This may be called after tear-down of the RenderView. 1125 // This may be called after tear-down of the RenderView.
1126 if (ShouldUseSwapClient()) { 1126 if (ShouldUseSwapClient()) {
1127 MessageLoop::current()->PostTask(FROM_HERE, base::Bind( 1127 MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
1128 &WGC3DSwapClient::OnViewContextSwapBuffersComplete, swap_client_)); 1128 &WGC3DSwapClient::OnViewContextSwapBuffersComplete, swap_client_));
1129 } 1129 }
1130 1130
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 } 1207 }
1208 1208
1209 void WebGraphicsContext3DCommandBufferImpl::OnErrorMessage( 1209 void WebGraphicsContext3DCommandBufferImpl::OnErrorMessage(
1210 const std::string& message, int id) { 1210 const std::string& message, int id) {
1211 if (error_message_callback_) { 1211 if (error_message_callback_) {
1212 WebKit::WebString str = WebKit::WebString::fromUTF8(message.c_str()); 1212 WebKit::WebString str = WebKit::WebString::fromUTF8(message.c_str());
1213 error_message_callback_->onErrorMessage(str, id); 1213 error_message_callback_->onErrorMessage(str, id);
1214 } 1214 }
1215 } 1215 }
1216 1216
OLDNEW
« no previous file with comments | « content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h ('k') | content/common/webkitplatformsupport_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698