Closed joshkulesza closed 6 years ago
I can confirm this. (Retina Macbook.)
I can't reproduce this at all. You're not fiddling with the GPU settings in Energy Saver prefs or something are you?
I've noticed the same problem with the release on the MacBook Pro Retina. After one click, the check mark is still next to Dynamic. Upon a second click, it moves to the Integrated. I have not touched any settings in Energy Saver prefs, and it does not exhibit this behavior with the previous release.
Maybe there's some bad state left over in your PRAM from the previous version? I'd try resetting your PRAM and see if that fixes the issue.
Unfortunately, resetting PRAM has not helped.
After clicking Integrated Only for the first time and the menu doesn't update, can you run this command in Terminal and paste the output here? system_profiler SPDisplaysDataType
I assume the Notification Center notification doesn't show up until the second time you click as well?
No notification appears on first click
Output after first click on 'integrated only':
Graphics/Displays:
Intel HD Graphics 4000:
Chipset Model: Intel HD Graphics 4000
Type: GPU
Bus: Built-In
VRAM (Total): 512 MB
Vendor: Intel (0x8086)
Device ID: 0x0166
Revision ID: 0x0009
gMux Version: 3.2.19 [3.2.8]
Displays:
Color LCD:
Display Type: LCD
Resolution: 2880 X 1800
Retina: Yes
Pixel Depth: 32-Bit Color (ARGB8888)
Main Display: Yes
Mirror: Off
Online: Yes
Built-In: Yes
Connection Type: DisplayPort
NVIDIA GeForce GT 650M:
Chipset Model: NVIDIA GeForce GT 650M
Type: GPU
Bus: PCIe
PCIe Lane Width: x8
VRAM (Total): 1024 MB
Vendor: NVIDIA (0x10de)
Device ID: 0x0fd5
Revision ID: 0x00a2
ROM Revision: 3688
gMux Version: 3.2.19 [3.2.8]
And you were on Dynamic Switching before you clicked Integrated Only, right?
Whoooooaaaaa okay I was just able to reproduce this for the first time. That's nuts. Tons of WindowServer display disconnect/reconnect messages in Console.app every time this happens.
Yep, I was on Dynamic before. Hadn't thought to check the Console.app, I'm also met with about 14 reconnect messages
And... this stil happens.
I don’t have any idea what’s causing this off the top of my head. As it stands, I won’t be able to investigate this for a few months (at minimum). I wouldn’t expect this to be fixed anytime soon.
This seems like an interesting issue, I seem to have no such issue with the older gfxCardStatus. So either this is caused by some of the changes from 2.3 or older versions were reporting a successful switchover when in fact it was not. But as far as I can tell it seems to be the former rather than the latter.
This started occurring when 10.8.2 was released. Until that point, v2.3 worked fine, and this issue was nonexistent. If I had to guess, older versions of gfxCardStatus likely don't have this issue because they don't have the fix for issue #102 in place. If that is indeed the problem, then that would seem like a logical place to poke at first, and is potentially worth replacing with something more like the mechanism in #107.
Sent from my iPhone
On May 6, 2013, at 7:00 PM, iDontCYnot notifications@github.com wrote:
This seems like an interesting issue, I seem to have no such issue with the older gfxCardStatus. So either this is caused by some of the changes from 2.3 or older versions were reporting a successful switchover when in fact it was not. But as far as I can tell it seems to be the former rather than the latter.
— Reply to this email directly or view it on GitHubhttps://github.com/codykrieger/gfxCardStatus/issues/103#issuecomment-17519260 .
This happens to me as well. I am on v2.3, Lion and a late 2011 system.
FWIW, when going from dynamic to forced integrated-only, the app seems to take it and two small right-shifts (and back) occur in the top menu bar, for about one second.
Doing it over and over I seem to notice that the "right shifts" is the the "U.S." in the menubar disappearing briefly and then reappearing. http://dl.dropbox.com/u/364883/Screenshots/ch0x.png
$ system_profiler SPDisplaysDataType
Graphics/Displays:
AMD Radeon HD 6750M:
Chipset Model: AMD Radeon HD 6750M
Type: GPU
Bus: PCIe
PCIe Lane Width: x8
VRAM (Total): 512 MB
Vendor: ATI (0x1002)
Device ID: 0x6741
Revision ID: 0x0000
ROM Revision: 113-C0170L-573
gMux Version: 1.9.23
EFI Driver Version: 01.00.573
Intel HD Graphics 3000:
Chipset Model: Intel HD Graphics 3000
Type: GPU
Bus: Built-In
VRAM (Total): 512 MB
Vendor: Intel (0x8086)
Device ID: 0x0116
Revision ID: 0x0009
gMux Version: 1.9.23
Displays:
Color LCD:
Display Type: LCD
Resolution: 1680 x 1050
Pixel Depth: 32-Bit Color (ARGB8888)
Main Display: Yes
Mirror: Off
Online: Yes
Built-In: Yes
I have fixed this in code by removing
[integratedOnly setState:(isOnIntegratedOnly && !dynamic) ? NSOnState : NSOffState];
[discreteOnly setState:(!isOnIntegratedOnly && !dynamic) ? NSOnState : NSOffState];
[dynamicSwitching setState:dynamic ? NSOnState : NSOffState];
in GSMenuController.m. I don't know what this is intended to do but the dynamic variable is true even when integreted only mode was selected.
@myMartek Unfortunately I don't think that's a proper fix. dynamic
should never be true after you've selected Integrated Only, which seems to suggest that something is wrong at a lower level.
On a late 2011 mabook pro 10.8.4 it works with the first click (the Notification Center notification shows up) but the menu is not marked. I have to click a second time to get it marked. Another problem : menu choice is never kept when I restart. Is it normal ? I noticed that the menu which usually shows the name of the external card (gray menu) stays with the word "Card"... Precedent version had the right card name shown.
Also happens on 2013 Retina MacBook Pro. Investigating.
When I set "Integrated Only" the first time, -[GSMenuController setMode:]
is called and sets the checkmark to NSOnState
at the end of the method. Yay! We are in good state, now, the menu item agrees with the current mode of the system.
But then, _displayReconfigurationCallback
gets called multiple times. A few of these have the kCGDisplaySetModeFlag
set, and thus GPUDidChangeTo:
is called on the AppDelegate, which then calls updateMenu
on the menu controller.
updateMenu
tries to set the state of the checkmarks again:
[integratedOnly setState:(isOnIntegratedOnly && !dynamic) ? NSOnState : NSOffState];
[discreteOnly setState:(!isOnIntegratedOnly && !dynamic) ? NSOnState : NSOffState];
However, in this situation, both [GSMux isUsingDynamicSwitching]
and [GSMux isUsingOldStyleSwitchPolicy]
are returning YES, but we never actually use the result from isUsingOldStyleSwitchPolicy
other than in a log.
If I change this section of the method as follows, it works:
BOOL dynamic = [GSMux isUsingDynamicSwitching];
BOOL isOldStyle = [GSMux isUsingOldStyleSwitchPolicy];
BOOL isOnIntegratedOnly = [GSMux isOnIntegratedOnlyMode];
GTMLoggerInfo(@"Using dynamic switching?: %d", dynamic);
GTMLoggerInfo(@"Using old-style switching policy?: %d", isOldStyle);
if (isOldStyle && dynamic)
dynamic = NO;
[integratedOnly setState:(isOnIntegratedOnly && !dynamic) ? NSOnState : NSOffState];
[discreteOnly setState:(!isOnIntegratedOnly && !dynamic) ? NSOnState : NSOffState];
[dynamicSwitching setState:dynamic ? NSOnState : NSOffState];
Same problem here; with a faulty early 2011 MBP this is rather annoying as the computer crashes every time the external card is activated. So every time I try to choose integrated only, the program sets the mac into external graphics instead. In the rare occasion that this poorly manufactured Mac doesn't crash, selecting integrated graphics second time works. gfxCardStatus v2.3, OSX 10.9.2.
My Retina Mac (A1398) has gone bad: after a few minutes it crashes with "GPU Panic". If I turn off the GPU (switch to "integrated only" using this tool), it's fine. PHEW THANK YOU CODY FOR SAVING ME $$$$ in repairs!
At startup, it's a race between me and the GPU, trying to switch it off. It would help greatly if the switch were to "take" the first time around (topic of this issue). Better, if it could be made permanent, as suggested by @okmacok .
OS 10.8.5, gfxCardStatus 2.3 Thanks!
Hopefully this can be fixed, because it simply nullifies the ability to launch the app at startup through the CLI.
Here is what I got that might be of help for those that can't reproduce the issue:
starting the app:
$ /Applications/gfxCardStatus.app/Contents/MacOS/gfxCardStatus --integrated
2014-05-10 10:30:08.911 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[gfxCardStatusAppDelegate applicationDidFinishLaunching:] GPUs present: (
"Intel HD Graphics 3000",
"AMD Radeon HD 6770M"
)
2014-05-10 10:30:08.911 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[gfxCardStatusAppDelegate applicationDidFinishLaunching:] Integrated GPU name: Intel HD Graphics 3000
2014-05-10 10:30:08.911 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[gfxCardStatusAppDelegate applicationDidFinishLaunching:] Discrete GPU name: AMD Radeon HD 6770M
2014-05-10 10:30:08.932 gfxCardStatus[495/0x7fff7de29310] [lvl=2] +[GSGPU is2010MacBookPro] Nuke it from orbit switching disabled.
2014-05-10 10:30:08.932 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[GSMenuController updateMenu] Using dynamic switching?: 1
2014-05-10 10:30:08.932 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[GSMenuController updateMenu] Using old-style switching policy?: 0
2014-05-10 10:30:08.933 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[GSMenuController updateMenu] Intel HD Graphics 3000 in use. Sweet deal! More battery life.
first click on integrated only:
2014-05-10 10:30:14.072 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[GSMenuController setMode:] Setting Integrated Only...
2014-05-10 10:30:15.077 gfxCardStatus[495/0x7fff7de29310] [lvl=2] _displayReconfigurationCallback() A non-built-in display reconfiguration callback has been triggered.
2014-05-10 10:30:15.132 gfxCardStatus[495/0x7fff7de29310] [lvl=2] _displayReconfigurationCallback() A non-built-in display reconfiguration callback has been triggered.
2014-05-10 10:30:15.579 gfxCardStatus[495/0x10b481000] [lvl=2] ___displayReconfigurationCallback_block_invoke_0() Notification: GPU changed. Integrated? 1
2014-05-10 10:30:15.580 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Using dynamic switching?: 1
2014-05-10 10:30:15.580 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Using old-style switching policy?: 1
2014-05-10 10:30:15.580 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Intel HD Graphics 3000 in use. Sweet deal! More battery life.
2014-05-10 10:30:16.082 gfxCardStatus[495/0x10b481000] [lvl=2] ___displayReconfigurationCallback_block_invoke_0() Notification: GPU changed. Integrated? 1
2014-05-10 10:30:16.083 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Using dynamic switching?: 1
2014-05-10 10:30:16.083 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Using old-style switching policy?: 1
2014-05-10 10:30:16.083 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Intel HD Graphics 3000 in use. Sweet deal! More battery life.
second click on integrated only:
2014-05-10 10:30:22.621 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[GSMenuController setMode:] Setting Integrated Only...
then, a click on dynamic switching:
2014-05-10 10:38:29.632 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[GSMenuController setMode:] Setting Dynamic Switching...
now, trying to switch to integrated only once again, first click of attempt 2:
2014-05-10 10:38:34.820 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[GSMenuController setMode:] Setting Integrated Only...
2014-05-10 10:38:35.824 gfxCardStatus[495/0x7fff7de29310] [lvl=2] _displayReconfigurationCallback() A non-built-in display reconfiguration callback has been triggered.
2014-05-10 10:38:35.879 gfxCardStatus[495/0x7fff7de29310] [lvl=2] _displayReconfigurationCallback() A non-built-in display reconfiguration callback has been triggered.
2014-05-10 10:38:36.326 gfxCardStatus[495/0x10b481000] [lvl=2] ___displayReconfigurationCallback_block_invoke_0() Notification: GPU changed. Integrated? 1
2014-05-10 10:38:36.326 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Using dynamic switching?: 1
2014-05-10 10:38:36.327 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Using old-style switching policy?: 1
2014-05-10 10:38:36.327 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Intel HD Graphics 3000 in use. Sweet deal! More battery life.
2014-05-10 10:38:36.828 gfxCardStatus[495/0x10b481000] [lvl=2] ___displayReconfigurationCallback_block_invoke_0() Notification: GPU changed. Integrated? 1
2014-05-10 10:38:36.828 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Using dynamic switching?: 1
2014-05-10 10:38:36.828 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Using old-style switching policy?: 1
2014-05-10 10:38:36.828 gfxCardStatus[495/0x10b481000] [lvl=2] -[GSMenuController updateMenu] Intel HD Graphics 3000 in use. Sweet deal! More battery life.
second click of attempt 2:
2014-05-10 10:38:42.434 gfxCardStatus[495/0x7fff7de29310] [lvl=2] -[GSMenuController setMode:] Setting Integrated Only...
This was on a macbook pro late 2011. OSX 10.9.2
Two years later, this problem persists.
@Fishrock123 Indeed, but until there is an actual fix, see my small MacOH project (https://github.com/qnxor/macoh) for a workaround. The macoh.sh
script makes consecutive attempts, monitoring the log file, to make sure the GPU is switched ... you can use the script directly, or just extract the code that deals with gfxCardStatus. I included a binary compiled form the latest sources in there as well.
@Fishrock123: You really know how to motivate someone to want to work on bugs!
I'm happy to donate to help get this bug fixed, it effects me every day.. Is there a bitcoin / paypal address for donations?
@NoahO: There is (see http://gfx.io), but I’m really sorry to say that even donations won’t help this get done any faster. :/ I just don’t have time to devote to this — especially not right now (currently in the middle of crunch time at work…seems like crunch time never ends).
On May 15, 2014, at 4:25 PM, NoahO notifications@github.com wrote:
I'm happy to donate to help get this bug fixed, it effects me every day.. Is there a bitcoin / paypal address for donations?
— Reply to this email directly or view it on GitHub.
I really wish I knew enough about this to help, but I have absolutely no clue how mac utilities work. Dx
@codykrieger : The way I see it, your app has two user bases: People looking for better battery life; And people looking to avoid problems with their discrete GPU.
Unfortunately, the subject of better battery life is already loaded with bloatware, misinformation and many articles that state the same things, for example.
As for the people looking to avoid problems with their discrete GPU, the subject is a little more serious, less commercial, I would say, and fortunately your app solves a huge problem for a LOT of people. However, for these people, I believe that there is a fundamental feature lacking in your app, which is the ability to load it as soon as possible to force the integrated graphics on. On my macbook, for example, I would love if I could force the discrete graphics OFF as soon as I click the power on button, or maybe at the first stages of booting.
This feature would mean that many macbooks would be revived: a quick search on the web shows that there is a enormous quantity of notebook that have failed discrete GPUs and can't be used because of this.
So, maybe you could try to fix the double click thing and try to enable people to load the app early at system boot.
I would love to help, but like @Fishrock123 said, I must climb the learning curve of mac utilities. I hope next month I will be able to, and it would also help if you could give people your thoughts on a possible fix so it's easier for other to contribute to your code.
I've already posted a solution for the startup issue. Download my MacOH project from https://github.com/qnxor/macoh (download master zip), then unzip it in your home folder, then run bash macoh.sh -gpuswitch integrated
. This will download the compiled binary from my project. Then schedule the same command line to start at boot.
You can change integrated
with discrete
or dynamic
. The macoh.sh
script makes several attempts to switch the GPU and checks the output of gfxCardStatus to make sure it's actually switched. It works for me every time. Although I'm not using it at startup, it should work just fine. Feel free to try it and let me know; post an issue in the macoh project if it doesn't.
Someone else posted a solution in another issue which you could try: https://github.com/codykrieger/gfxCardStatus/issues/150#issuecomment-43399276 (it's a compiled binary which is supposed to have fixed this issue #103 ... I haven't tried it yet)
For those who is lucky as me and have faulty MBP late 2011 (discrete GPU causes crashes from time to time), i've forked this project to stripped it down to CLI only (to run during startup via LauchDaemons). Not sure if it really works, but i'm able to start laptop without issues almost always. https://github.com/zais/gfxCardStatus (fill free to test it out)
I'm experiencing this too on a late 2013 15" rMBP.
@zais , tried it an it didn't work :( Sadly, because I had high hopes. top | grep -i gfxCardStatus top | grep -i gfx both bring me nothing. Looking at top there is nothing there :(
Tested and it didn't work.
Just to make sure, here's what I've got after xcodebuild, in case I did something wrong:
Pinks-MacBook-Pro:gfxCardStatusCLI PinkFreud$ pwd
/usr/local/bin/gfxCardStatusCLI
Pinks-MacBook-Pro:gfxCardStatusCLI PinkFreud$ ls -lah
total 152
drwxr-xr-x@ 18 PinkFreud staff 612B Jun 10 00:25 .
drwxr-xr-x 6 root wheel 204B Jun 8 21:45 ..
-rw-r--r--@ 1 PinkFreud staff 6.0K Jun 8 21:43 .DS_Store
-rwxr-xr-x@ 1 PinkFreud staff 15B May 29 11:50 .gitattributes
-rwxr-xr-x@ 1 PinkFreud staff 163B May 29 11:50 .gitignore
-rwxr-xr-x@ 1 PinkFreud staff 131B May 29 11:50 .gitmodules
-rwxr-xr-x@ 1 PinkFreud staff 1.0K May 29 11:50 GSGPU.h
-rwxr-xr-x@ 1 PinkFreud staff 7.5K May 29 11:50 GSGPU.m
-rwxr-xr-x@ 1 PinkFreud staff 1.0K May 29 11:50 GSMux.h
-rwxr-xr-x@ 1 PinkFreud staff 15K May 29 11:50 GSMux.m
-rwxr-xr-x@ 1 PinkFreud staff 1.5K May 29 11:50 LICENSE
-rwxr-xr-x@ 1 PinkFreud staff 2.6K May 29 11:50 README.md
drwxr-xr-x@ 4 PinkFreud staff 136B Jun 8 21:45 build
-rwxr-xr-x@ 1 PinkFreud staff 128B May 29 11:50 build.sh
-rwxr-xr-x@ 1 PinkFreud staff 182B May 29 11:50 gfxCardStatusCLI-Prefix.pch
-rwxr-xr-x@ 1 PinkFreud staff 3.1K May 29 11:50 gfxCardStatusCLI.1
drwxr-xr-x@ 3 PinkFreud staff 102B May 29 11:50 gfxCardStatusCLI.xcodeproj
-rwxr-xr-x@ 1 PinkFreud staff 2.1K May 29 11:50 main.m
eduardoxfurtado, /usr/local/bin/gfxCardStatusCLI should be executable (not directory), plus it's not a demon (should not be in processes after login). But it doesn't work anyway. My MBP laying in dust :(
@zais I knew something was fishy, however I followed your instructions :p
I just created a $15 bounty for this on bountysource.. Hopefully others can contribute too if it is important to you. https://www.bountysource.com/issues/1260994-changing-to-integrated-only-requires-two-clicks
Is there anything that we can do to help resolve this issue? :)
I am experiencing the same issue in my mbp 2011, yosemite. In addition to that I notice that when I select integrated only, most of the time, the first click after system restart sets it discrete only mode first, the second click performs the correct operation. This issue is killing me since my discrete card is not functioning properly, most of the time when I try to switch to integrated only, system freezes and crashes, because it is setting it to discrete only mode instead of integrated only. On the bright side, this issue motivated me to learn objective c, at this moment, I am trying to find the root cause of the issue;-)
Hi, I see this is an old issue - still going in 10.10.5 (mid-2010 MacBook Pro). The "discreet" card causes crashes, so being able to stay with the integrated one is a lifesaver. However, if I set it to "i" and then start Adobe Illustrator, it overrides that and switches back to "d". I have to quick shut down Illustrator, click on "integrated" again, and then it behaves for the rest of the day. Has anyone figured out a way around this?
@bmacgreg312: This is a different bug that only exists on 2011-and-newer MBPs. You're running into #107.
Okay, thanks. Sounds like there’s still no easy fix? I will try to remain vigilant…
On 13 Jun 2016, at 11:39, Cody Krieger notifications@github.com<mailto:notifications@github.com> wrote:
@bmacgreg312https://github.com/bmacgreg312: This is a different bug that only exists on 2011-and-newer MBPs. You're running into #107https://github.com/codykrieger/gfxCardStatus/pull/107.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/codykrieger/gfxCardStatus/issues/103#issuecomment-225619552, or mute the threadhttps://github.com/notifications/unsubscribe/AS_SfcPbEJ3P1GKynL5QD4g3LvlbNTe-ks5qLXmWgaJpZM4ANPvU.
Barbara MacGregor University of North Carolina Department of Marine Sciences 3117C Venable Hall (a/k/a Murray) CB#3300 Chapel Hill NC 27599
Email bmacgreg@unc.edumailto:bmacgreg@unc.edu Cell +1 (919) 260-6038 Fax +1 (919) 962-1254 Lab 3110 Venable Hall
My computer also needs integrated to be selected twice and often during this the computer would freeze and crash then tries to repeatedly reboot on the discrete card and I'd get the blue screen.
This workaround below has been doing well for me if I have the computer set to Integrated only and something happens that requires a reboot. It gets my machine back up and running quickly without endless reboots and hoping each time that I don't get the blue stripey screen.
1) make sure gfx card status isn't set to fire up on computer boot up via the gfx prefs. If you're unable to get your machine to fully reboot to change this, you should be able to delete gfx card status if you fire up the computer in safe mode. Then on to step 2.
2) After the first reboot you'll probably get the blue stripey screen if you have the same issue as me, the fans will turn on high, leave it like this until the computer shuts itself down from getting too hot. Immediately press the power button and turn the computer back on after the shut down. I got this tip from elsewhere. For some reason immediately rebooting after an overheat shutdown fires up the integrated card AND dynamic switching enabled on the next reboot. But it will start off with the integrated card selected. The key is to not do anything that will cause dynamic switching to kick in at this point.
Disclaimer: I don't know if immediately turning on your computer after an overheat shutdown is damaging, that is something you'll have to research.
3) Delete your old copy of gfx card status if you haven't done so already via safe mode and download a fresh copy. Then do the double integrated click to switch to integrated only. This has worked about 8 times in a row for me without fail. For some reason using the existing copy of gfx card status will crash the computer when trying to switch to "integrated only" after reboot. Deleting the existing copy and installing a fresh copy doesn't crash for some reason. Don't use google chrome to download your new copy, this will switch to the discrete card and cause another crash. Using Firefox will keep it on the Integrated card.
I'm sure this makes no technical sense but as I said, it's worked for me and I can get back up and running fast after a reboot.
I'm on a 2011 Macbook Pro running Mavericks 10.9.3 and gfx v2.3
Tracking in #310; closing.
When using gfxcardstatus on a retina macbook, clicking 'integrated only' does no change the graphics settings and the tick moves back to 'dynamic only' almost instantly. Pressing 'integrated only' a second time does however activate integrated only