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

Side by Side Diff: webkit/plugins/npapi/webplugin_delegate_impl_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 <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 #import <QuartzCore/QuartzCore.h> 6 #import <QuartzCore/QuartzCore.h>
7 7
8 #include "webkit/plugins/npapi/webplugin_delegate_impl.h" 8 #include "webkit/plugins/npapi/webplugin_delegate_impl.h"
9 9
10 #include <string> 10 #include <string>
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 // the surface. 377 // the surface.
378 CALayer* layer = nil; 378 CALayer* layer = nil;
379 NPError err = instance()->NPP_GetValue(NPPVpluginCoreAnimationLayer, 379 NPError err = instance()->NPP_GetValue(NPPVpluginCoreAnimationLayer,
380 reinterpret_cast<void*>(&layer)); 380 reinterpret_cast<void*>(&layer));
381 if (!err) { 381 if (!err) {
382 if (drawing_model == NPDrawingModelCoreAnimation) { 382 if (drawing_model == NPDrawingModelCoreAnimation) {
383 // Create the timer; it will be started when we get a window handle. 383 // Create the timer; it will be started when we get a window handle.
384 redraw_timer_.reset(new base::RepeatingTimer<WebPluginDelegateImpl>); 384 redraw_timer_.reset(new base::RepeatingTimer<WebPluginDelegateImpl>);
385 } 385 }
386 layer_ = layer; 386 layer_ = layer;
387 surface_ = plugin_->GetAcceleratedSurface(); 387
388 gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
389 // On dual GPU systems, force the use of the discrete GPU for
390 // the CARenderer underlying our Core Animation backend for
391 // all plugins except Flash. For some reason Unity3D's output
392 // doesn't show up if the integrated GPU is used. Safari keeps
393 // even Flash 11 with Stage3D on the integrated GPU, so mirror
394 // that behavior here.
395 const WebPluginInfo& plugin_info =
396 instance_->plugin_lib()->plugin_info();
397 if (plugin_info.name.find(ASCIIToUTF16("Flash")) != string16::npos)
398 gpu_preference = gfx::PreferIntegratedGpu;
399 surface_ = plugin_->GetAcceleratedSurface(gpu_preference);
388 400
389 // If surface initialization fails for some reason, just continue 401 // If surface initialization fails for some reason, just continue
390 // without any drawing; returning false would be a more confusing user 402 // without any drawing; returning false would be a more confusing user
391 // experience (since it triggers a missing plugin placeholder). 403 // experience (since it triggers a missing plugin placeholder).
392 if (surface_ && surface_->context()) { 404 if (surface_ && surface_->context()) {
393 renderer_ = [[CARenderer rendererWithCGLContext:surface_->context() 405 renderer_ = [[CARenderer rendererWithCGLContext:surface_->context()
394 options:NULL] retain]; 406 options:NULL] retain];
395 [renderer_ setLayer:layer_]; 407 [renderer_ setLayer:layer_];
396 } 408 }
397 plugin_->BindFakePluginWindowHandle(false); 409 plugin_->BindFakePluginWindowHandle(false);
(...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 qd_manager_->SetFastPathEnabled(enabled); 1221 qd_manager_->SetFastPathEnabled(enabled);
1210 qd_port_.port = qd_manager_->port(); 1222 qd_port_.port = qd_manager_->port();
1211 WindowlessSetWindow(); 1223 WindowlessSetWindow();
1212 // Send a paint event so that the new buffer gets updated immediately. 1224 // Send a paint event so that the new buffer gets updated immediately.
1213 WindowlessPaint(buffer_context_, clip_rect_); 1225 WindowlessPaint(buffer_context_, clip_rect_);
1214 } 1226 }
1215 #endif // !NP_NO_QUICKDRAW 1227 #endif // !NP_NO_QUICKDRAW
1216 1228
1217 } // namespace npapi 1229 } // namespace npapi
1218 } // namespace webkit 1230 } // namespace webkit
OLDNEW
« ui/gfx/gl/gl_context_mac.cc ('K') | « webkit/plugins/npapi/webplugin.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698