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

Side by Side Diff: webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.cc

Issue 8586048: base::Bind() conversion for remaining GPU files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 9 years, 1 month 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
« no previous file with comments | « gpu/gles2_conform_support/egl/display.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #if defined(ENABLE_GPU) 5 #if defined(ENABLE_GPU)
6 6
7 #include "webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h" 7 #include "webkit/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h"
8 8
9 #include <GLES2/gl2.h> 9 #include <GLES2/gl2.h>
10 #ifndef GL_GLEXT_PROTOTYPES 10 #ifndef GL_GLEXT_PROTOTYPES
11 #define GL_GLEXT_PROTOTYPES 1 11 #define GL_GLEXT_PROTOTYPES 1
12 #endif 12 #endif
13 #include <GLES2/gl2ext.h> 13 #include <GLES2/gl2ext.h>
14 14
15 #include <algorithm> 15 #include <algorithm>
16 #include <set> 16 #include <set>
17 17
18 #include "base/string_tokenizer.h" 18 #include "base/bind.h"
19 #include "base/bind_helpers.h"
20 #include "base/callback.h"
19 #include "base/command_line.h" 21 #include "base/command_line.h"
20 #include "base/lazy_instance.h" 22 #include "base/lazy_instance.h"
21 #include "base/logging.h" 23 #include "base/logging.h"
24 #include "base/memory/singleton.h"
22 #include "base/message_loop.h" 25 #include "base/message_loop.h"
23 #include "base/memory/singleton.h"
24 #include "base/metrics/histogram.h" 26 #include "base/metrics/histogram.h"
27 #include "base/string_tokenizer.h"
25 #include "base/synchronization/lock.h" 28 #include "base/synchronization/lock.h"
26 #include "gpu/command_buffer/client/gles2_lib.h" 29 #include "gpu/command_buffer/client/gles2_lib.h"
27 #include "gpu/command_buffer/client/gles2_implementation.h" 30 #include "gpu/command_buffer/client/gles2_implementation.h"
28 #include "gpu/command_buffer/common/constants.h" 31 #include "gpu/command_buffer/common/constants.h"
29 #include "gpu/command_buffer/service/context_group.h" 32 #include "gpu/command_buffer/service/context_group.h"
30 #include "gpu/command_buffer/service/gpu_scheduler.h" 33 #include "gpu/command_buffer/service/gpu_scheduler.h"
31 #include "gpu/command_buffer/service/command_buffer_service.h" 34 #include "gpu/command_buffer/service/command_buffer_service.h"
32 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" 35 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
33 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 36 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
34 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 37 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 133
131 // Create a new texture in the parent's GLInProcessContext. Returns zero if 134 // Create a new texture in the parent's GLInProcessContext. Returns zero if
132 // GLInProcessContext does not have a parent. 135 // GLInProcessContext does not have a parent.
133 uint32 CreateParentTexture(const gfx::Size& size); 136 uint32 CreateParentTexture(const gfx::Size& size);
134 137
135 // Deletes a texture in the parent's GLInProcessContext. 138 // Deletes a texture in the parent's GLInProcessContext.
136 void DeleteParentTexture(uint32 texture); 139 void DeleteParentTexture(uint32 texture);
137 140
138 // Provides a callback that will be invoked when SwapBuffers has completed 141 // Provides a callback that will be invoked when SwapBuffers has completed
139 // service side. 142 // service side.
140 void SetSwapBuffersCallback(Callback0::Type* callback); 143 void SetSwapBuffersCallback(const base::Closure& callback);
141 144
142 void SetContextLostCallback(Callback0::Type* callback); 145 void SetContextLostCallback(const base::Closure& callback);
143 146
144 // Set the current GLInProcessContext for the calling thread. 147 // Set the current GLInProcessContext for the calling thread.
145 static bool MakeCurrent(GLInProcessContext* context); 148 static bool MakeCurrent(GLInProcessContext* context);
146 149
147 // For a view GLInProcessContext, display everything that has been rendered 150 // For a view GLInProcessContext, display everything that has been rendered
148 // since the last call. For an offscreen GLInProcessContext, resolve 151 // since the last call. For an offscreen GLInProcessContext, resolve
149 // everything that has been rendered since the last call to a copy that can be 152 // everything that has been rendered since the last call to a copy that can be
150 // accessed by the parent GLInProcessContext. 153 // accessed by the parent GLInProcessContext.
151 bool SwapBuffers(); 154 bool SwapBuffers();
152 155
(...skipping 23 matching lines...) Expand all
176 const char* allowed_extensions, 179 const char* allowed_extensions,
177 const int32* attrib_list, 180 const int32* attrib_list,
178 const GURL& active_url, 181 const GURL& active_url,
179 gfx::GpuPreference gpu_preference); 182 gfx::GpuPreference gpu_preference);
180 void Destroy(); 183 void Destroy();
181 184
182 void OnSwapBuffers(); 185 void OnSwapBuffers();
183 void OnContextLost(); 186 void OnContextLost();
184 187
185 base::WeakPtr<GLInProcessContext> parent_; 188 base::WeakPtr<GLInProcessContext> parent_;
186 scoped_ptr<Callback0::Type> swap_buffers_callback_; 189 base::Closure swap_buffers_callback_;
187 scoped_ptr<Callback0::Type> context_lost_callback_; 190 base::Closure context_lost_callback_;
188 uint32 parent_texture_id_; 191 uint32 parent_texture_id_;
189 scoped_ptr<CommandBufferService> command_buffer_; 192 scoped_ptr<CommandBufferService> command_buffer_;
190 scoped_ptr< ::gpu::GpuScheduler> gpu_scheduler_; 193 scoped_ptr< ::gpu::GpuScheduler> gpu_scheduler_;
191 scoped_ptr< ::gpu::gles2::GLES2Decoder> decoder_; 194 scoped_ptr< ::gpu::gles2::GLES2Decoder> decoder_;
192 scoped_refptr<gfx::GLContext> context_; 195 scoped_refptr<gfx::GLContext> context_;
193 scoped_refptr<gfx::GLSurface> surface_; 196 scoped_refptr<gfx::GLSurface> surface_;
194 scoped_ptr<GLES2CmdHelper> gles2_helper_; 197 scoped_ptr<GLES2CmdHelper> gles2_helper_;
195 int32 transfer_buffer_id_; 198 int32 transfer_buffer_id_;
196 scoped_ptr<GLES2Implementation> gles2_implementation_; 199 scoped_ptr<GLES2Implementation> gles2_implementation_;
197 Error last_error_; 200 Error last_error_;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 uint32 texture = 0; 319 uint32 texture = 0;
317 gles2_implementation_->GenTextures(1, &texture); 320 gles2_implementation_->GenTextures(1, &texture);
318 gles2_implementation_->Flush(); 321 gles2_implementation_->Flush();
319 return texture; 322 return texture;
320 } 323 }
321 324
322 void GLInProcessContext::DeleteParentTexture(uint32 texture) { 325 void GLInProcessContext::DeleteParentTexture(uint32 texture) {
323 gles2_implementation_->DeleteTextures(1, &texture); 326 gles2_implementation_->DeleteTextures(1, &texture);
324 } 327 }
325 328
326 void GLInProcessContext::SetSwapBuffersCallback(Callback0::Type* callback) { 329 void GLInProcessContext::SetSwapBuffersCallback(const base::Closure& callback) {
327 swap_buffers_callback_.reset(callback); 330 swap_buffers_callback_ = callback;
328 } 331 }
329 332
330 void GLInProcessContext::SetContextLostCallback(Callback0::Type* callback) { 333 void GLInProcessContext::SetContextLostCallback(const base::Closure& callback) {
331 context_lost_callback_.reset(callback); 334 context_lost_callback_ = callback;
332 } 335 }
333 336
334 bool GLInProcessContext::MakeCurrent(GLInProcessContext* context) { 337 bool GLInProcessContext::MakeCurrent(GLInProcessContext* context) {
335 if (context) { 338 if (context) {
336 gles2::SetGLContext(context->gles2_implementation_.get()); 339 gles2::SetGLContext(context->gles2_implementation_.get());
337 340
338 // Don't request latest error status from service. Just use the locally 341 // Don't request latest error status from service. Just use the locally
339 // cached information from the last flush. 342 // cached information from the last flush.
340 // TODO(apatrick): I'm not sure if this should actually change the 343 // TODO(apatrick): I'm not sure if this should actually change the
341 // current context if it fails. For now it gets changed even if it fails 344 // current context if it fails. For now it gets changed even if it fails
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 515
513 if (!decoder_->SetParent( 516 if (!decoder_->SetParent(
514 parent_.get() ? parent_->decoder_.get() : NULL, 517 parent_.get() ? parent_->decoder_.get() : NULL,
515 parent_texture_id_)) { 518 parent_texture_id_)) {
516 LOG(ERROR) << "Could not set parent."; 519 LOG(ERROR) << "Could not set parent.";
517 Destroy(); 520 Destroy();
518 return false; 521 return false;
519 } 522 }
520 523
521 command_buffer_->SetPutOffsetChangeCallback( 524 command_buffer_->SetPutOffsetChangeCallback(
522 NewCallback(this, &GLInProcessContext::PumpCommands)); 525 base::Bind(&GLInProcessContext::PumpCommands, base::Unretained(this)));
523 526
524 // Create the GLES2 helper, which writes the command buffer protocol. 527 // Create the GLES2 helper, which writes the command buffer protocol.
525 gles2_helper_.reset(new GLES2CmdHelper(command_buffer_.get())); 528 gles2_helper_.reset(new GLES2CmdHelper(command_buffer_.get()));
526 if (!gles2_helper_->Initialize(kCommandBufferSize)) { 529 if (!gles2_helper_->Initialize(kCommandBufferSize)) {
527 Destroy(); 530 Destroy();
528 return false; 531 return false;
529 } 532 }
530 533
531 // Create a transfer buffer. 534 // Create a transfer buffer.
532 transfer_buffer_id_ = 535 transfer_buffer_id_ =
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 command_buffer_->DestroyTransferBuffer(transfer_buffer_id_); 581 command_buffer_->DestroyTransferBuffer(transfer_buffer_id_);
579 transfer_buffer_id_ = -1; 582 transfer_buffer_id_ = -1;
580 } 583 }
581 584
582 gles2_helper_.reset(); 585 gles2_helper_.reset();
583 586
584 command_buffer_.reset(); 587 command_buffer_.reset();
585 } 588 }
586 589
587 void GLInProcessContext::OnSwapBuffers() { 590 void GLInProcessContext::OnSwapBuffers() {
588 if (swap_buffers_callback_.get()) 591 if (!swap_buffers_callback_.is_null())
589 swap_buffers_callback_->Run(); 592 swap_buffers_callback_.Run();
590 } 593 }
591 594
592 void GLInProcessContext::OnContextLost() { 595 void GLInProcessContext::OnContextLost() {
593 if (context_lost_callback_.get()) 596 if (!context_lost_callback_.is_null())
594 context_lost_callback_->Run(); 597 context_lost_callback_.Run();
595 } 598 }
596 599
597 WebGraphicsContext3DInProcessCommandBufferImpl:: 600 WebGraphicsContext3DInProcessCommandBufferImpl::
598 WebGraphicsContext3DInProcessCommandBufferImpl() 601 WebGraphicsContext3DInProcessCommandBufferImpl()
599 : context_(NULL), 602 : context_(NULL),
600 gl_(NULL), 603 gl_(NULL),
601 web_view_(NULL), 604 web_view_(NULL),
602 #if defined(OS_MACOSX) 605 #if defined(OS_MACOSX)
603 plugin_handle_(NULL), 606 plugin_handle_(NULL),
604 #endif // defined(OS_MACOSX) 607 #endif // defined(OS_MACOSX)
605 context_lost_callback_(0), 608 context_lost_callback_(NULL),
606 context_lost_reason_(GL_NO_ERROR), 609 context_lost_reason_(GL_NO_ERROR),
607 cached_width_(0), 610 cached_width_(0),
608 cached_height_(0), 611 cached_height_(0),
609 bound_fbo_(0) { 612 bound_fbo_(0) {
610 } 613 }
611 614
612 WebGraphicsContext3DInProcessCommandBufferImpl:: 615 WebGraphicsContext3DInProcessCommandBufferImpl::
613 ~WebGraphicsContext3DInProcessCommandBufferImpl() { 616 ~WebGraphicsContext3DInProcessCommandBufferImpl() {
614 base::AutoLock a(g_all_shared_contexts_lock.Get()); 617 base::AutoLock a(g_all_shared_contexts_lock.Get());
615 g_all_shared_contexts.Pointer()->erase(this); 618 g_all_shared_contexts.Pointer()->erase(this);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 681
679 if (!context_) 682 if (!context_)
680 return false; 683 return false;
681 684
682 gl_ = context_->GetImplementation(); 685 gl_ = context_->GetImplementation();
683 686
684 if (gl_ && attributes.noExtensions) 687 if (gl_ && attributes.noExtensions)
685 gl_->EnableFeatureCHROMIUM("webgl_enable_glsl_webgl_validation"); 688 gl_->EnableFeatureCHROMIUM("webgl_enable_glsl_webgl_validation");
686 689
687 context_->SetContextLostCallback( 690 context_->SetContextLostCallback(
688 NewCallback( 691 base::Bind(
689 this, 692 &WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost,
690 &WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost)); 693 base::Unretained(this)));
691 694
692 // Set attributes_ from created offscreen context. 695 // Set attributes_ from created offscreen context.
693 { 696 {
694 attributes_ = attributes; 697 attributes_ = attributes;
695 GLint alpha_bits = 0; 698 GLint alpha_bits = 0;
696 getIntegerv(GL_ALPHA_BITS, &alpha_bits); 699 getIntegerv(GL_ALPHA_BITS, &alpha_bits);
697 attributes_.alpha = alpha_bits > 0; 700 attributes_.alpha = alpha_bits > 0;
698 GLint depth_bits = 0; 701 GLint depth_bits = 0;
699 getIntegerv(GL_DEPTH_BITS, &depth_bits); 702 getIntegerv(GL_DEPTH_BITS, &depth_bits);
700 attributes_.depth = depth_bits > 0; 703 attributes_.depth = depth_bits > 0;
(...skipping 971 matching lines...) Expand 10 before | Expand all | Expand 10 after
1672 context_lost_reason_ = GL_UNKNOWN_CONTEXT_RESET_ARB; 1675 context_lost_reason_ = GL_UNKNOWN_CONTEXT_RESET_ARB;
1673 if (context_lost_callback_) { 1676 if (context_lost_callback_) {
1674 context_lost_callback_->onContextLost(); 1677 context_lost_callback_->onContextLost();
1675 } 1678 }
1676 } 1679 }
1677 1680
1678 } // namespace gpu 1681 } // namespace gpu
1679 } // namespace webkit 1682 } // namespace webkit
1680 1683
1681 #endif // defined(ENABLE_GPU) 1684 #endif // defined(ENABLE_GPU)
OLDNEW
« no previous file with comments | « gpu/gles2_conform_support/egl/display.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698