[OpenJDK 2D-Dev] RFR: 8251854: [macosx] Java forces the use of discrete GPU

Kevin Rushforth kcr at openjdk.java.net
Tue Nov 10 12:53:55 UTC 2020

On Tue, 10 Nov 2020 08:19:13 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:

> This is a review request for the bug particularly fixed some time ago:
> https://mail.openjdk.java.net/pipermail/2d-dev/2015-May/005425.html
> In that review request it was found that the old fix does not work well in all cases, see:
> https://mail.openjdk.java.net/pipermail/2d-dev/2015-August/005611.html
> The current fix updates an embedded plist.info, so the java will not require
> discrete graphics by default, same as for any other applications. 
> The discrete card will be used:
>  1. If macOS decided to enable it for some reason
>  2. If the java app sets/uses a full-screen window
>  3. If the user disable "automatic graphics switching" in the system preferences
>  4. If an external monitor is connected to the laptop
> In other cases, the integrated graphics will be used, which should be fine in most cases since this graphic is used/tested in the mbp 13/etc. This is not only about rendering performance but also about startup performance, on my current new laptop mbp 16 + Cataline 10.15.7 the switching discrete/integrated causes unexpected delays up to 10 seconds.
> Note that the new "metal" pipeline also does not require discrete graphics.
> The documentation for NSSupportsAutomaticGraphicsSwitching:
> https://developer.apple.com/documentation/bundleresources/information_property_list/nssupportsautomaticgraphicsswitching
> I'll create a release note after approval.
> Performance numbers:
> https://mail.openjdk.java.net/pipermail/2d-dev/2020-August/010979.html
> Old review request:
> https://mail.openjdk.java.net/pipermail/2d-dev/2020-August/010973.html

I'm still somewhat unsure whether we want to do this in all cases. As mentioned offline, the discrete GPU will be unused (might as well not be there) for almost all Java applications when using a single screen. When the MacBook Pro is running on battery, this seems like a good thing, but when it is plugged in, it seems like we wasting the discrete GPU. It's too bad Apple doesn't provide a way for an application to hint whether they would like to use the discrete GPU if available.

I want to run some performance tests with JavaFX, since it will likely impact JavaFX applications.


PR: https://git.openjdk.java.net/jdk/pull/1139

More information about the 2d-dev mailing list