Subject: Re: Automatic graphics switching...

On Mar 29, 2011, at 11:36 PM, Nick Zitzmann wrote:

> On Mar 29, 2011, at 3:16 PM, Jason Harris wrote:
>> Hi All,
>> Some users are complaining that my application (MacHg) is causing their
>> MacBooks to switch from using the integrated Intel (lower power) card to the
>> NVIDIA (higher power) graphics card.
>> Eg some related articles I dug up:
>> However, my application doesn't appear on the surface to make heavy use of
>> graphics. (It does make heavy use of GCD though). Is there a general cause
>> for this switching of the graphics card?.
> There are a few of them I know about:
> 1. Your application starts CoreAnimation by calling -setWantsLayer: on a view
> with a layer, or adding a layer in IB

Ahhh... yes I use core animation, but just very very lightly... some simple
static stuff like:

CIColor* black = [CIColor colorWithRed: 0.0/255.0 green: 0.0/255.0
blue: 0.0/255.0 alpha:1.0];
CIColor* color0 = [CIColor colorWithRed: 77.0/255.0 green: 78.0/255.0
blue: 87.0/255.0 alpha:0.8];
CIColor* color1 = [CIColor colorWithRed: 39.0/255.0 green: 40.0/255.0
blue: 52.0/255.0 alpha:0.5];
CIVector* center = [self recomputePosition];
NSNumber* radius = radius_ ? radius_ : [NSNumber numberWithFloat:450.0];

CIFilter* gradiantFilter = [CIFilter
[gradiantFilter setValue:color0 forKey:@"inputColor0"];
[gradiantFilter setValue:color1 forKey:@"inputColor1"];
[gradiantFilter setValue:center forKey:@"inputCenter"];
[gradiantFilter setValue:radius forKey:@"inputRadius"];

CIFilter* constantFilter = [CIFilter
[constantFilter setValue:black forKey:@"inputColor"];

foregroundFilters_ = [NSArray arrayWithObject:gradiantFilter];
backgroundFilters_ = [NSArray arrayWithObject:constantFilter];

[[self layer] setFilters: foregroundFilters_];
[[self layer] setBackgroundFilters:backgroundFilters_];

Not much more... Ohh well at least I know where its coming from then!


> 2. Your application initializes an NSOpenGLView using a pixel format that
> works best using the discrete GPU
> 3. Your application initializes a QTCaptureView, QTMovieView, or QCView
> 4. The user plugged in an external display (external displays must use the
> discrete GPU)
> There might be more, but those are the ones I know about.
>> How can I find out when such a switch occurs in my code and for what
>> reasons?
> If you have a dual-GPU Mac, then try breaking on IOServiceOpen and look at
> the stack trace when it breaks. If you don't, then you can't.
> Nick Zitzmann
> <>


Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)

Help/Unsubscribe/Update your Subscription:

This email sent to [email protected]

Programming list archiving by: Enterprise Git Hosting