Apple has used multiple GPU’s in their 15” MacBook Pro’s since 2011, and have also implemented a system to automatically switch between the slower but power efficient integrated GPU (iGPU) and higher performance discrete GPU (dGPU) depending on what the user’s applications require.
At first, many applications didn’t play nice with automatic graphics switching and unnecessarily activated the dGPU when it was clearly not needed. A well known example was the official Twitter application, which kept the dGPU running constantly when open, resulting in dramatically decreased battery life and increased system temperature.
Thankfully, most popular Mac OS applications behave themselves on systems with multiple GPUs and don’t activate the dGPU unless they actually require the higher performance. For example, Steam games and Adobe Photoshop activate the dGPU, but Evernote, MS Office and Spotify rightfully do not. However, there are a few applications that still stubbornly activate the dGPU upon opening, and keep the dGPU running as long as they’re open (even when in the background). The Radeon Pro 460 dGPU on the 2016 MacBook Pro idles at ~3W which is quite low for a dGPU, but 3W is still significant especially if it means the difference between 5 hours or 9 hours of battery life.

This small trick can prevent specific applications from activating the dGPU. I’m going to be using an app called Mendeley for this example. Mendeley activates the dGPU when open, and being a reference manager and PDF reader, I see no reason for the application requiring the extra performance a dGPU provides.
1) Navigate to the Applications folder
2) Right click Mendeley and select “Show Package Contents”
3) Click on “Contents”
4) Right click “Info.plist” and open with TextEdit

5) You’ll see something like this. You’ll want to paste the following (highlighted text in image) into the file
6) Save and close Info.plist
7) Open Mendeley and enjoy the extra 2+ hours of battery life by keeping the dGPU off
Every time Mendeley is updated, you’ll need to re-do this “mod”
For me, this method has worked for Mendeley, Graphpad Prism and Adobe Reader (for Adobe Reader you’ll need to find the helper application and change the info.plist file for that too). Some websites can activate the dGPU depending on the services they request, such as Facebook chat. I’m not sure how to stop this from happening (Facebook chat shouldn’t really be using my dGPU), so if anyone knows how to prevent this I’d love to know.
For those who want to keep an eye on which GPU is being used in their Macs, there’s a handy menu bar application called gfxCardStatus by Cody Krieger that can notify you when the system switches between GPUs. Within the application you can also force the integrated or discrete GPU, but there are limitations as he describes here.
I don’t think I should conclude about the “state of graphics switching in Mac OS”, as Mac OS and applications are constantly being updated and things should improve over time. Developers should be aware of the power cost of their applications, especially when a single application unnecessarily activating the dGPU on a MacBook Pro can cut battery life in half.
On the hardware front, integrated GPUs are currently not fast enough and discrete GPUs can’t idle low enough, so the solution naturally is graphics switching. Maybe someday in the future we’ll have a single GPU that can span the entire power/performance range that consumers and Apple are looking for today, but for now we’ll just have to put up with the minor niggles of graphics switching, such fun.