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

Side by Side Diff: content/browser/renderer_host/compositing_iosurface_mac.mm

Issue 147493011: Use base::ScopedTypeRef for CGL types (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase again Created 6 years, 10 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
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/browser/renderer_host/compositing_iosurface_mac.h" 5 #include "content/browser/renderer_host/compositing_iosurface_mac.h"
6 6
7 #include <OpenGL/CGLRenderers.h> 7 #include <OpenGL/CGLRenderers.h>
8 #include <OpenGL/OpenGL.h> 8 #include <OpenGL/OpenGL.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 base::Bind(&CompositingIOSurfaceMac::CheckIfAllCopiesAreFinished, 250 base::Bind(&CompositingIOSurfaceMac::CheckIfAllCopiesAreFinished,
251 base::Unretained(this), 251 base::Unretained(this),
252 false), 252 false),
253 true), 253 true),
254 gl_error_(GL_NO_ERROR) { 254 gl_error_(GL_NO_ERROR) {
255 CHECK(offscreen_context_); 255 CHECK(offscreen_context_);
256 } 256 }
257 257
258 CompositingIOSurfaceMac::~CompositingIOSurfaceMac() { 258 CompositingIOSurfaceMac::~CompositingIOSurfaceMac() {
259 FailAllCopies(); 259 FailAllCopies();
260 CGLSetCurrentContext(offscreen_context_->cgl_context()); 260 {
261 DestroyAllCopyContextsWithinContext(); 261 gfx::ScopedCGLSetCurrentContext scoped_set_current_context(
262 UnrefIOSurfaceWithContextCurrent(); 262 offscreen_context_->cgl_context());
263 CGLSetCurrentContext(0); 263 DestroyAllCopyContextsWithinContext();
264 UnrefIOSurfaceWithContextCurrent();
265 }
264 offscreen_context_ = NULL; 266 offscreen_context_ = NULL;
265 } 267 }
266 268
267 bool CompositingIOSurfaceMac::SetIOSurfaceWithContextCurrent( 269 bool CompositingIOSurfaceMac::SetIOSurfaceWithContextCurrent(
268 scoped_refptr<CompositingIOSurfaceContext> current_context, 270 scoped_refptr<CompositingIOSurfaceContext> current_context,
269 uint64 io_surface_handle, 271 uint64 io_surface_handle,
270 const gfx::Size& size, 272 const gfx::Size& size,
271 float scale_factor) { 273 float scale_factor) {
272 pixel_io_surface_size_ = size; 274 pixel_io_surface_size_ = size;
273 scale_factor_ = scale_factor; 275 scale_factor_ = scale_factor;
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 kOpaque_SkAlphaType); 435 kOpaque_SkAlphaType);
434 436
435 if (!output->allocPixels()) { 437 if (!output->allocPixels()) {
436 DLOG(ERROR) << "Failed to allocate SkBitmap pixels!"; 438 DLOG(ERROR) << "Failed to allocate SkBitmap pixels!";
437 callback.Run(false, *output); 439 callback.Run(false, *output);
438 return; 440 return;
439 } 441 }
440 DCHECK_EQ(output->rowBytesAsPixels(), dst_pixel_size.width()) 442 DCHECK_EQ(output->rowBytesAsPixels(), dst_pixel_size.width())
441 << "Stride is required to be equal to width for GPU readback."; 443 << "Stride is required to be equal to width for GPU readback.";
442 444
443 CGLSetCurrentContext(offscreen_context_->cgl_context()); 445 base::Closure copy_done_callback;
444 const base::Closure copy_done_callback = CopyToSelectedOutputWithinContext( 446 {
445 src_pixel_subrect, gfx::Rect(dst_pixel_size), false, 447 gfx::ScopedCGLSetCurrentContext scoped_set_current_context(
446 output.get(), NULL, 448 offscreen_context_->cgl_context());
447 base::Bind(&ReverseArgumentOrder, callback, base::Passed(&output))); 449 copy_done_callback = CopyToSelectedOutputWithinContext(
448 CGLSetCurrentContext(0); 450 src_pixel_subrect, gfx::Rect(dst_pixel_size), false,
451 output.get(), NULL,
452 base::Bind(&ReverseArgumentOrder, callback, base::Passed(&output)));
453 }
449 if (!copy_done_callback.is_null()) 454 if (!copy_done_callback.is_null())
450 copy_done_callback.Run(); 455 copy_done_callback.Run();
451 } 456 }
452 457
453 void CompositingIOSurfaceMac::CopyToVideoFrame( 458 void CompositingIOSurfaceMac::CopyToVideoFrame(
454 const gfx::Rect& src_pixel_subrect, 459 const gfx::Rect& src_pixel_subrect,
455 const scoped_refptr<media::VideoFrame>& target, 460 const scoped_refptr<media::VideoFrame>& target,
456 const base::Callback<void(bool)>& callback) { 461 const base::Callback<void(bool)>& callback) {
457 CGLSetCurrentContext(offscreen_context_->cgl_context()); 462 base::Closure copy_done_callback;
458 const base::Closure copy_done_callback = CopyToVideoFrameWithinContext( 463 {
459 src_pixel_subrect, false, target, callback); 464 gfx::ScopedCGLSetCurrentContext scoped_set_current_context(
460 CGLSetCurrentContext(0); 465 offscreen_context_->cgl_context());
466 copy_done_callback = CopyToVideoFrameWithinContext(
467 src_pixel_subrect, false, target, callback);
468 }
461 if (!copy_done_callback.is_null()) 469 if (!copy_done_callback.is_null())
462 copy_done_callback.Run(); 470 copy_done_callback.Run();
463 } 471 }
464 472
465 base::Closure CompositingIOSurfaceMac::CopyToVideoFrameWithinContext( 473 base::Closure CompositingIOSurfaceMac::CopyToVideoFrameWithinContext(
466 const gfx::Rect& src_pixel_subrect, 474 const gfx::Rect& src_pixel_subrect,
467 bool called_within_draw, 475 bool called_within_draw,
468 const scoped_refptr<media::VideoFrame>& target, 476 const scoped_refptr<media::VideoFrame>& target,
469 const base::Callback<void(bool)>& callback) { 477 const base::Callback<void(bool)>& callback) {
470 gfx::Rect region_in_frame = media::ComputeLetterboxRegion( 478 gfx::Rect region_in_frame = media::ComputeLetterboxRegion(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 GetAndSaveGLError(); 543 GetAndSaveGLError();
536 if (gl_error_ != GL_NO_ERROR) { 544 if (gl_error_ != GL_NO_ERROR) {
537 LOG(ERROR) << "GL error in MapIOSurfaceToTexture: " << gl_error_; 545 LOG(ERROR) << "GL error in MapIOSurfaceToTexture: " << gl_error_;
538 UnrefIOSurfaceWithContextCurrent(); 546 UnrefIOSurfaceWithContextCurrent();
539 return false; 547 return false;
540 } 548 }
541 return true; 549 return true;
542 } 550 }
543 551
544 void CompositingIOSurfaceMac::UnrefIOSurface() { 552 void CompositingIOSurfaceMac::UnrefIOSurface() {
545 CGLSetCurrentContext(offscreen_context_->cgl_context()); 553 gfx::ScopedCGLSetCurrentContext scoped_set_current_context(
554 offscreen_context_->cgl_context());
546 UnrefIOSurfaceWithContextCurrent(); 555 UnrefIOSurfaceWithContextCurrent();
547 CGLSetCurrentContext(0);
548 } 556 }
549 557
550 void CompositingIOSurfaceMac::DrawQuad(const SurfaceQuad& quad) { 558 void CompositingIOSurfaceMac::DrawQuad(const SurfaceQuad& quad) {
551 TRACE_EVENT0("gpu", "CompositingIOSurfaceMac::DrawQuad"); 559 TRACE_EVENT0("gpu", "CompositingIOSurfaceMac::DrawQuad");
552 560
553 glEnableClientState(GL_VERTEX_ARRAY); CHECK_AND_SAVE_GL_ERROR(); 561 glEnableClientState(GL_VERTEX_ARRAY); CHECK_AND_SAVE_GL_ERROR();
554 glEnableClientState(GL_TEXTURE_COORD_ARRAY); CHECK_AND_SAVE_GL_ERROR(); 562 glEnableClientState(GL_TEXTURE_COORD_ARRAY); CHECK_AND_SAVE_GL_ERROR();
555 563
556 glVertexPointer(2, GL_FLOAT, sizeof(SurfaceVertex), &quad.verts_[0].x_); 564 glVertexPointer(2, GL_FLOAT, sizeof(SurfaceVertex), &quad.verts_[0].x_);
557 glTexCoordPointer(2, GL_FLOAT, sizeof(SurfaceVertex), &quad.verts_[0].tx_); 565 glTexCoordPointer(2, GL_FLOAT, sizeof(SurfaceVertex), &quad.verts_[0].tx_);
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 base::Bind(&MapBufferToSkBitmap, bitmap_output) : 748 base::Bind(&MapBufferToSkBitmap, bitmap_output) :
741 base::Bind(&MapBufferToVideoFrame, video_frame_output, dst_pixel_rect); 749 base::Bind(&MapBufferToVideoFrame, video_frame_output, dst_pixel_rect);
742 } 750 }
743 751
744 void CompositingIOSurfaceMac::CheckIfAllCopiesAreFinished( 752 void CompositingIOSurfaceMac::CheckIfAllCopiesAreFinished(
745 bool block_until_finished) { 753 bool block_until_finished) {
746 if (copy_requests_.empty()) 754 if (copy_requests_.empty())
747 return; 755 return;
748 756
749 std::vector<base::Closure> done_callbacks; 757 std::vector<base::Closure> done_callbacks;
750 CGLContextObj previous_context = CGLGetCurrentContext(); 758 {
751 CGLSetCurrentContext(offscreen_context_->cgl_context()); 759 gfx::ScopedCGLSetCurrentContext scoped_set_current_context(
752 CheckIfAllCopiesAreFinishedWithinContext( 760 offscreen_context_->cgl_context());
753 block_until_finished, &done_callbacks); 761 CheckIfAllCopiesAreFinishedWithinContext(
754 CGLSetCurrentContext(previous_context); 762 block_until_finished, &done_callbacks);
763 }
755 for (size_t i = 0; i < done_callbacks.size(); ++i) 764 for (size_t i = 0; i < done_callbacks.size(); ++i)
756 done_callbacks[i].Run(); 765 done_callbacks[i].Run();
757 } 766 }
758 767
759 void CompositingIOSurfaceMac::CheckIfAllCopiesAreFinishedWithinContext( 768 void CompositingIOSurfaceMac::CheckIfAllCopiesAreFinishedWithinContext(
760 bool block_until_finished, 769 bool block_until_finished,
761 std::vector<base::Closure>* done_callbacks) { 770 std::vector<base::Closure>* done_callbacks) {
762 while (!copy_requests_.empty()) { 771 while (!copy_requests_.empty()) {
763 CopyContext* const copy_context = copy_requests_.front(); 772 CopyContext* const copy_context = copy_requests_.front();
764 773
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 } 927 }
919 928
920 GLenum CompositingIOSurfaceMac::GetAndSaveGLError() { 929 GLenum CompositingIOSurfaceMac::GetAndSaveGLError() {
921 GLenum gl_error = glGetError(); 930 GLenum gl_error = glGetError();
922 if (gl_error_ == GL_NO_ERROR) 931 if (gl_error_ == GL_NO_ERROR)
923 gl_error_ = gl_error; 932 gl_error_ = gl_error;
924 return gl_error; 933 return gl_error;
925 } 934 }
926 935
927 } // namespace content 936 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/compositing_iosurface_layer_mac.mm ('k') | content/browser/renderer_host/display_link_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698