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

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

Issue 301973010: Remove IOSurfaceSupport (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 6 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/CGLIOSurface.h>
7 #include <OpenGL/CGLRenderers.h> 8 #include <OpenGL/CGLRenderers.h>
8 #include <OpenGL/OpenGL.h> 9 #include <OpenGL/OpenGL.h>
9 10
10 #include "base/bind.h" 11 #include "base/bind.h"
11 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
12 #include "base/debug/trace_event.h" 13 #include "base/debug/trace_event.h"
13 #include "base/logging.h" 14 #include "base/logging.h"
14 #include "base/mac/mac_util.h" 15 #include "base/mac/mac_util.h"
15 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
16 #include "base/threading/platform_thread.h" 17 #include "base/threading/platform_thread.h"
17 #include "content/browser/gpu/gpu_data_manager_impl.h" 18 #include "content/browser/gpu/gpu_data_manager_impl.h"
18 #include "content/browser/renderer_host/compositing_iosurface_context_mac.h" 19 #include "content/browser/renderer_host/compositing_iosurface_context_mac.h"
19 #include "content/browser/renderer_host/compositing_iosurface_shader_programs_ma c.h" 20 #include "content/browser/renderer_host/compositing_iosurface_shader_programs_ma c.h"
20 #include "content/browser/renderer_host/compositing_iosurface_transformer_mac.h" 21 #include "content/browser/renderer_host/compositing_iosurface_transformer_mac.h"
21 #include "content/browser/renderer_host/render_widget_host_impl.h" 22 #include "content/browser/renderer_host/render_widget_host_impl.h"
22 #include "content/browser/renderer_host/render_widget_host_view_mac.h" 23 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
23 #include "content/common/content_constants_internal.h" 24 #include "content/common/content_constants_internal.h"
24 #include "gpu/config/gpu_driver_bug_workaround_type.h" 25 #include "gpu/config/gpu_driver_bug_workaround_type.h"
25 #include "media/base/video_util.h" 26 #include "media/base/video_util.h"
26 #include "third_party/skia/include/core/SkBitmap.h" 27 #include "third_party/skia/include/core/SkBitmap.h"
27 #include "ui/gfx/rect.h" 28 #include "ui/gfx/rect.h"
28 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" 29 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
29 #include "ui/gfx/size_conversions.h" 30 #include "ui/gfx/size_conversions.h"
30 #include "ui/gl/gl_context.h" 31 #include "ui/gl/gl_context.h"
31 #include "ui/gl/io_surface_support_mac.h"
32 32
33 #ifdef NDEBUG 33 #ifdef NDEBUG
34 #define CHECK_GL_ERROR() 34 #define CHECK_GL_ERROR()
35 #define CHECK_AND_SAVE_GL_ERROR() 35 #define CHECK_AND_SAVE_GL_ERROR()
36 #else 36 #else
37 #define CHECK_GL_ERROR() do { \ 37 #define CHECK_GL_ERROR() do { \
38 GLenum gl_error = glGetError(); \ 38 GLenum gl_error = glGetError(); \
39 LOG_IF(ERROR, gl_error != GL_NO_ERROR) << "GL Error: " << gl_error; \ 39 LOG_IF(ERROR, gl_error != GL_NO_ERROR) << "GL Error: " << gl_error; \
40 } while (0) 40 } while (0)
41 #define CHECK_AND_SAVE_GL_ERROR() do { \ 41 #define CHECK_AND_SAVE_GL_ERROR() do { \
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 for (int i = 0; i < num_outputs; ++i) { 211 for (int i = 0; i < num_outputs; ++i) {
212 if (!pixel_buffers[i]) { 212 if (!pixel_buffers[i]) {
213 glGenBuffersARB(1, &pixel_buffers[i]); CHECK_GL_ERROR(); 213 glGenBuffersARB(1, &pixel_buffers[i]); CHECK_GL_ERROR();
214 } 214 }
215 } 215 }
216 } 216 }
217 217
218 218
219 // static 219 // static
220 scoped_refptr<CompositingIOSurfaceMac> CompositingIOSurfaceMac::Create() { 220 scoped_refptr<CompositingIOSurfaceMac> CompositingIOSurfaceMac::Create() {
221 IOSurfaceSupport* io_surface_support = IOSurfaceSupport::Initialize();
222 if (!io_surface_support) {
223 LOG(ERROR) << "No IOSurface support";
224 return NULL;
225 }
226
227 scoped_refptr<CompositingIOSurfaceContext> offscreen_context = 221 scoped_refptr<CompositingIOSurfaceContext> offscreen_context =
228 CompositingIOSurfaceContext::Get( 222 CompositingIOSurfaceContext::Get(
229 CompositingIOSurfaceContext::kOffscreenContextWindowNumber); 223 CompositingIOSurfaceContext::kOffscreenContextWindowNumber);
230 if (!offscreen_context) { 224 if (!offscreen_context) {
231 LOG(ERROR) << "Failed to create context for offscreen operations"; 225 LOG(ERROR) << "Failed to create context for offscreen operations";
232 return NULL; 226 return NULL;
233 } 227 }
234 228
235 return new CompositingIOSurfaceMac(io_surface_support, 229 return new CompositingIOSurfaceMac(offscreen_context);
236 offscreen_context);
237 } 230 }
238 231
239 CompositingIOSurfaceMac::CompositingIOSurfaceMac( 232 CompositingIOSurfaceMac::CompositingIOSurfaceMac(
240 IOSurfaceSupport* io_surface_support,
241 const scoped_refptr<CompositingIOSurfaceContext>& offscreen_context) 233 const scoped_refptr<CompositingIOSurfaceContext>& offscreen_context)
242 : io_surface_support_(io_surface_support), 234 : offscreen_context_(offscreen_context),
243 offscreen_context_(offscreen_context),
244 io_surface_handle_(0), 235 io_surface_handle_(0),
245 scale_factor_(1.f), 236 scale_factor_(1.f),
246 texture_(0), 237 texture_(0),
247 finish_copy_timer_( 238 finish_copy_timer_(
248 FROM_HERE, 239 FROM_HERE,
249 base::TimeDelta::FromMilliseconds(kFinishCopyPollingPeriodMs), 240 base::TimeDelta::FromMilliseconds(kFinishCopyPollingPeriodMs),
250 base::Bind(&CompositingIOSurfaceMac::CheckIfAllCopiesAreFinished, 241 base::Bind(&CompositingIOSurfaceMac::CheckIfAllCopiesAreFinished,
251 base::Unretained(this), 242 base::Unretained(this),
252 false), 243 false),
253 true), 244 true),
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 scale_factor_ = scale_factor; 477 scale_factor_ = scale_factor;
487 dip_io_surface_size_ = gfx::ToFlooredSize( 478 dip_io_surface_size_ = gfx::ToFlooredSize(
488 gfx::ScaleSize(pixel_io_surface_size_, 1.0 / scale_factor_)); 479 gfx::ScaleSize(pixel_io_surface_size_, 1.0 / scale_factor_));
489 480
490 // Early-out if the IOSurface has not changed. Note that because IOSurface 481 // Early-out if the IOSurface has not changed. Note that because IOSurface
491 // sizes are rounded, the same IOSurface may have two different sizes 482 // sizes are rounded, the same IOSurface may have two different sizes
492 // associated with it. 483 // associated with it.
493 if (io_surface_ && io_surface_handle == io_surface_handle_) 484 if (io_surface_ && io_surface_handle == io_surface_handle_)
494 return true; 485 return true;
495 486
496 io_surface_.reset(io_surface_support_->IOSurfaceLookup( 487 io_surface_.reset(IOSurfaceLookup(static_cast<uint32>(io_surface_handle)));
497 static_cast<uint32>(io_surface_handle)));
498 // Can fail if IOSurface with that ID was already released by the gpu 488 // Can fail if IOSurface with that ID was already released by the gpu
499 // process. 489 // process.
500 if (!io_surface_) { 490 if (!io_surface_) {
501 UnrefIOSurfaceWithContextCurrent(); 491 UnrefIOSurfaceWithContextCurrent();
502 return false; 492 return false;
503 } 493 }
504 494
505 io_surface_handle_ = io_surface_handle; 495 io_surface_handle_ = io_surface_handle;
506 496
507 // Actual IOSurface size is rounded up to reduce reallocations during window 497 // Actual IOSurface size is rounded up to reduce reallocations during window
508 // resize. Get the actual size to properly map the texture. 498 // resize. Get the actual size to properly map the texture.
509 gfx::Size rounded_size( 499 gfx::Size rounded_size(IOSurfaceGetWidth(io_surface_),
510 io_surface_support_->IOSurfaceGetWidth(io_surface_), 500 IOSurfaceGetHeight(io_surface_));
511 io_surface_support_->IOSurfaceGetHeight(io_surface_));
512 501
513 glGenTextures(1, &texture_); 502 glGenTextures(1, &texture_);
514 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture_); 503 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture_);
515 glTexParameterf(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 504 glTexParameterf(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
516 glTexParameterf(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 505 glTexParameterf(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
517 CHECK_AND_SAVE_GL_ERROR(); 506 CHECK_AND_SAVE_GL_ERROR();
518 GLuint plane = 0; 507 GLuint plane = 0;
519 CGLError cgl_error = io_surface_support_->CGLTexImageIOSurface2D( 508 CGLError cgl_error = CGLTexImageIOSurface2D(
520 current_context->cgl_context(), 509 current_context->cgl_context(),
521 GL_TEXTURE_RECTANGLE_ARB, 510 GL_TEXTURE_RECTANGLE_ARB,
522 GL_RGBA, 511 GL_RGBA,
523 rounded_size.width(), 512 rounded_size.width(),
524 rounded_size.height(), 513 rounded_size.height(),
525 GL_BGRA, 514 GL_BGRA,
526 GL_UNSIGNED_INT_8_8_8_8_REV, 515 GL_UNSIGNED_INT_8_8_8_8_REV,
527 io_surface_.get(), 516 io_surface_.get(),
528 plane); 517 plane);
529 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); 518 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 } 977 }
989 978
990 // static 979 // static
991 base::LazyInstance<CompositingIOSurfaceMac::EvictionQueue> 980 base::LazyInstance<CompositingIOSurfaceMac::EvictionQueue>
992 CompositingIOSurfaceMac::eviction_queue_; 981 CompositingIOSurfaceMac::eviction_queue_;
993 982
994 // static 983 // static
995 bool CompositingIOSurfaceMac::eviction_scheduled_ = false; 984 bool CompositingIOSurfaceMac::eviction_scheduled_ = false;
996 985
997 } // namespace content 986 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/compositing_iosurface_mac.h ('k') | content/browser/renderer_host/render_process_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698