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

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

Issue 8233027: Support dynamic switching between integrated and discrete GPUs on Mac OS X. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 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) 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 #import "content/browser/renderer_host/accelerated_plugin_view_mac.h" 5 #import "content/browser/renderer_host/accelerated_plugin_view_mac.h"
6 6
7 #include <vector>
8
7 #include "base/command_line.h" 9 #include "base/command_line.h"
8 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
9 #include "content/browser/browser_thread.h" 11 #include "content/browser/browser_thread.h"
10 #include "content/browser/renderer_host/render_widget_host_view_mac.h" 12 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
13 #include "ui/gfx/gl/gl_context.h"
11 #include "ui/gfx/gl/gl_switches.h" 14 #include "ui/gfx/gl/gl_switches.h"
12 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" 15 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
13 16
14 @implementation AcceleratedPluginView 17 @implementation AcceleratedPluginView
15 18
16 - (void)drawView { 19 - (void)drawView {
17 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 20 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
18 TRACE_EVENT0("browser", "AcceleratedPluginViewMac::drawView"); 21 TRACE_EVENT0("browser", "AcceleratedPluginViewMac::drawView");
19 22
20 if (renderWidgetHostView_) { 23 if (renderWidgetHostView_) {
21 // TODO(thakis): Pixel or view coordinates for size? 24 // TODO(thakis): Pixel or view coordinates for size?
22 renderWidgetHostView_->DrawAcceleratedSurfaceInstance( 25 renderWidgetHostView_->DrawAcceleratedSurfaceInstance(
23 cglContext_, pluginHandle_, [super frame].size); 26 cglContext_, pluginHandle_, [super frame].size);
24 } 27 }
25 28
26 CGLFlushDrawable(cglContext_); 29 CGLFlushDrawable(cglContext_);
27 CGLSetCurrentContext(0); 30 CGLSetCurrentContext(0);
28 } 31 }
29 32
30 - (id)initWithRenderWidgetHostViewMac:(RenderWidgetHostViewMac*)r 33 - (id)initWithRenderWidgetHostViewMac:(RenderWidgetHostViewMac*)r
31 pluginHandle:(gfx::PluginWindowHandle)pluginHandle { 34 pluginHandle:(gfx::PluginWindowHandle)pluginHandle {
32 if ((self = [super initWithFrame:NSZeroRect])) { 35 if ((self = [super initWithFrame:NSZeroRect])) {
33 renderWidgetHostView_ = r; 36 renderWidgetHostView_ = r;
34 pluginHandle_ = pluginHandle; 37 pluginHandle_ = pluginHandle;
35 38
36 [self setAutoresizingMask:NSViewMaxXMargin|NSViewMinYMargin]; 39 [self setAutoresizingMask:NSViewMaxXMargin|NSViewMinYMargin];
37 40
38 NSOpenGLPixelFormatAttribute attributes[] = 41 std::vector<NSOpenGLPixelFormatAttribute> attributes;
39 { NSOpenGLPFAAccelerated, NSOpenGLPFADoubleBuffer, 0}; 42 attributes.push_back(NSOpenGLPFAAccelerated);
43 attributes.push_back(NSOpenGLPFADoubleBuffer);
44 if (gfx::GLContext::SupportsDualGpus())
45 attributes.push_back(NSOpenGLPFAAllowOfflineRenderers);
46 attributes.push_back(0);
40 47
41 // TODO(zmo): remove the diagnostic error messages once we figure out the 48 // TODO(zmo): remove the diagnostic error messages once we figure out the
42 // cause of the failure and a fix. 49 // cause of the failure and a fix.
43 50
44 glPixelFormat_.reset([[NSOpenGLPixelFormat alloc] 51 glPixelFormat_.reset([[NSOpenGLPixelFormat alloc]
45 initWithAttributes:attributes]); 52 initWithAttributes:&attributes.front()]);
46 if (!glPixelFormat_) 53 if (!glPixelFormat_)
47 LOG(ERROR) << "NSOpenGLPixelFormat initWithAttributes failed"; 54 LOG(ERROR) << "NSOpenGLPixelFormat initWithAttributes failed";
48 55
49 glContext_.reset([[NSOpenGLContext alloc] initWithFormat:glPixelFormat_ 56 glContext_.reset([[NSOpenGLContext alloc] initWithFormat:glPixelFormat_
50 shareContext:nil]); 57 shareContext:nil]);
51 if (!glContext_) 58 if (!glContext_)
52 LOG(ERROR) << "NSOpenGLContext initWithFormat failed"; 59 LOG(ERROR) << "NSOpenGLContext initWithFormat failed";
53 60
54 // We "punch a hole" in the window, and have the WindowServer render the 61 // We "punch a hole" in the window, and have the WindowServer render the
55 // OpenGL surface underneath so we can draw over it. 62 // OpenGL surface underneath so we can draw over it.
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 return YES; 245 return YES;
239 } 246 }
240 247
241 - (void)viewDidMoveToSuperview { 248 - (void)viewDidMoveToSuperview {
242 TRACE_EVENT0("browser", "AcceleratedPluginView::viewDidMoveToSuperview"); 249 TRACE_EVENT0("browser", "AcceleratedPluginView::viewDidMoveToSuperview");
243 if (![self superview]) 250 if (![self superview])
244 [self onRenderWidgetHostViewGone]; 251 [self onRenderWidgetHostViewGone];
245 } 252 }
246 @end 253 @end
247 254
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698