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

Unified Diff: content/browser/renderer_host/compositing_iosurface_context_mac.mm

Issue 311263003: Delete non-CoreAnimation code in RWHVMac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@swappressure
Patch Set: Update driver bug 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/compositing_iosurface_context_mac.mm
diff --git a/content/browser/renderer_host/compositing_iosurface_context_mac.mm b/content/browser/renderer_host/compositing_iosurface_context_mac.mm
index fecab509325fd0c1f8d6cd3cb840afdf488ae973..a66bf5022d3a484b995208e6f891fd53393080f3 100644
--- a/content/browser/renderer_host/compositing_iosurface_context_mac.mm
+++ b/content/browser/renderer_host/compositing_iosurface_context_mac.mm
@@ -19,14 +19,6 @@
namespace content {
-CoreAnimationStatus GetCoreAnimationStatus() {
- static CoreAnimationStatus status =
- CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kDisableCoreAnimation) ?
- CORE_ANIMATION_DISABLED : CORE_ANIMATION_ENABLED;
- return status;
-}
-
// static
scoped_refptr<CompositingIOSurfaceContext>
CompositingIOSurfaceContext::Get(int window_number) {
@@ -42,88 +34,44 @@ CompositingIOSurfaceContext::Get(int window_number) {
static bool is_vsync_disabled =
CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableGpuVsync);
- base::scoped_nsobject<NSOpenGLContext> nsgl_context;
base::ScopedTypeRef<CGLContextObj> cgl_context_strong;
CGLContextObj cgl_context = NULL;
- if (GetCoreAnimationStatus() == CORE_ANIMATION_DISABLED) {
- std::vector<NSOpenGLPixelFormatAttribute> attributes;
- attributes.push_back(NSOpenGLPFADoubleBuffer);
- // We don't need a depth buffer - try setting its size to 0...
- attributes.push_back(NSOpenGLPFADepthSize); attributes.push_back(0);
- if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus())
- attributes.push_back(NSOpenGLPFAAllowOfflineRenderers);
- attributes.push_back(0);
-
- base::scoped_nsobject<NSOpenGLPixelFormat> glPixelFormat(
- [[NSOpenGLPixelFormat alloc] initWithAttributes:&attributes.front()]);
- if (!glPixelFormat) {
- LOG(ERROR) << "NSOpenGLPixelFormat initWithAttributes failed";
- return NULL;
- }
-
- // Create all contexts in the same share group so that the textures don't
- // need to be recreated when transitioning contexts.
- NSOpenGLContext* share_context = nil;
- if (!window_map()->empty())
- share_context = window_map()->begin()->second->nsgl_context();
- nsgl_context.reset(
- [[NSOpenGLContext alloc] initWithFormat:glPixelFormat
- shareContext:share_context]);
- if (!nsgl_context) {
- LOG(ERROR) << "NSOpenGLContext initWithFormat failed";
- return NULL;
- }
-
- // Grab the CGL context that the NSGL context is using. Explicitly
- // retain it, so that it is not double-freed by the scoped type.
- cgl_context = reinterpret_cast<CGLContextObj>(
- [nsgl_context CGLContextObj]);
- if (!cgl_context) {
- LOG(ERROR) << "Failed to retrieve CGLContextObj from NSOpenGLContext";
- return NULL;
- }
-
- // Force [nsgl_context flushBuffer] to wait for vsync.
- GLint swapInterval = is_vsync_disabled ? 0 : 1;
- [nsgl_context setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
- } else {
- CGLError error = kCGLNoError;
-
- // Create the pixel format object for the context.
- std::vector<CGLPixelFormatAttribute> attribs;
- attribs.push_back(kCGLPFADepthSize);
- attribs.push_back(static_cast<CGLPixelFormatAttribute>(0));
- if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) {
- attribs.push_back(kCGLPFAAllowOfflineRenderers);
- attribs.push_back(static_cast<CGLPixelFormatAttribute>(1));
- }
- attribs.push_back(static_cast<CGLPixelFormatAttribute>(0));
- GLint number_virtual_screens = 0;
- base::ScopedTypeRef<CGLPixelFormatObj> pixel_format;
- error = CGLChoosePixelFormat(&attribs.front(),
- pixel_format.InitializeInto(),
- &number_virtual_screens);
- if (error != kCGLNoError) {
- LOG(ERROR) << "Failed to create pixel format object.";
- return NULL;
- }
-
- // Create all contexts in the same share group so that the textures don't
- // need to be recreated when transitioning contexts.
- CGLContextObj share_context = NULL;
- if (!window_map()->empty())
- share_context = window_map()->begin()->second->cgl_context();
- error = CGLCreateContext(
- pixel_format, share_context, cgl_context_strong.InitializeInto());
- if (error != kCGLNoError) {
- LOG(ERROR) << "Failed to create context object.";
- return NULL;
- }
- cgl_context = cgl_context_strong;
+ CGLError error = kCGLNoError;
+
+ // Create the pixel format object for the context.
+ std::vector<CGLPixelFormatAttribute> attribs;
+ attribs.push_back(kCGLPFADepthSize);
+ attribs.push_back(static_cast<CGLPixelFormatAttribute>(0));
+ if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) {
+ attribs.push_back(kCGLPFAAllowOfflineRenderers);
+ attribs.push_back(static_cast<CGLPixelFormatAttribute>(1));
+ }
+ attribs.push_back(static_cast<CGLPixelFormatAttribute>(0));
+ GLint number_virtual_screens = 0;
+ base::ScopedTypeRef<CGLPixelFormatObj> pixel_format;
+ error = CGLChoosePixelFormat(&attribs.front(),
+ pixel_format.InitializeInto(),
+ &number_virtual_screens);
+ if (error != kCGLNoError) {
+ LOG(ERROR) << "Failed to create pixel format object.";
+ return NULL;
+ }
- // Note that VSync is ignored because CoreAnimation will automatically
- // rate limit draws.
+ // Create all contexts in the same share group so that the textures don't
+ // need to be recreated when transitioning contexts.
+ CGLContextObj share_context = NULL;
+ if (!window_map()->empty())
+ share_context = window_map()->begin()->second->cgl_context();
+ error = CGLCreateContext(
+ pixel_format, share_context, cgl_context_strong.InitializeInto());
+ if (error != kCGLNoError) {
+ LOG(ERROR) << "Failed to create context object.";
+ return NULL;
}
+ cgl_context = cgl_context_strong;
+
+ // Note that VSync is ignored because CoreAnimation will automatically
+ // rate limit draws.
// Prepare the shader program cache. Precompile the shader programs
// needed to draw the IO Surface for non-offscreen contexts.
@@ -148,7 +96,6 @@ CompositingIOSurfaceContext::Get(int window_number) {
return new CompositingIOSurfaceContext(
window_number,
- nsgl_context.release(),
cgl_context_strong,
cgl_context,
is_vsync_disabled,
@@ -169,13 +116,11 @@ void CompositingIOSurfaceContext::PoisonContextAndSharegroup() {
CompositingIOSurfaceContext::CompositingIOSurfaceContext(
int window_number,
- NSOpenGLContext* nsgl_context,
base::ScopedTypeRef<CGLContextObj> cgl_context_strong,
CGLContextObj cgl_context,
bool is_vsync_disabled,
scoped_ptr<CompositingIOSurfaceShaderPrograms> shader_program_cache)
: window_number_(window_number),
- nsgl_context_(nsgl_context),
cgl_context_strong_(cgl_context_strong),
cgl_context_(cgl_context),
is_vsync_disabled_(is_vsync_disabled),
@@ -205,12 +150,6 @@ CompositingIOSurfaceContext::~CompositingIOSurfaceContext() {
}
}
-NSOpenGLContext* CompositingIOSurfaceContext::nsgl_context() const {
- // This should not be called from any CoreAnimation paths.
- CHECK(GetCoreAnimationStatus() == CORE_ANIMATION_DISABLED);
- return nsgl_context_;
-}
-
void CompositingIOSurfaceContext::OnGpuSwitching() {
// Recreate all browser-side GL contexts whenever the GPU switches. If this
// is not done, performance will suffer.

Powered by Google App Engine
This is Rietveld 408576698