On Fri, 9 Oct 2020 05:42:31 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:
>> This bug easily reproduced by the test in question on the dual video card >> systems >> when the metal pipeline is active. But it is possible to reproduce it in the >> OGL >> pipeline as well, but it is required some additional steps. >> >> Problem description: >> Our CGraphicsEnvironment maintains the list of active graphics devices. >> The one >> important feature of this CGraphicsEnvironment is to invalidate the old >> devices and >> map them to the new devices. For example, if the user got a reference to the >> device, >> and this device was removed then this reference will refer to the main >> screen. >> >> The problem in the current implementation arise when the system has two >> video cards: >> 1 The user get some GraphicsDevice >> 2 The user sets the full-screen window for this device >> 3 The user change screen resolution for this device >> 4 The resolution of the screen is not changed ->> BUG. >> >> The problem is that somewhere after step 1 or 2 and before step 3 the macOS >> decided >> to switch to the discrete video card, but it does not report the old >> device(integrated VC) >> as removed, because actually no screens were removed. >> >> Since it was not reported as removed we did not invalidate it and did not >> map it to the >> new device ->> request to change the screen resolution at step 3 send to >> some non existed >> deviceID. >> >> As a fix I suggest to change this current logic: >> - Invalidate devices reported by macOS as removed >> - Initialize the main screen >> - Initialize all NEW screens >> >> To this logic: >> - Ignore devices reported by the macOS as removed >> - Initialize the main screen >> - Initialize all NEW screens >> - Check that the main device is in the list of all NEW devices >> - Invalidate all OLD devices which are not in the list of NEW devices >> >> The old review request: >> https://mail.openjdk.java.net/pipermail/2d-dev/2020-August/011011.html > > Sergey Bylokhov has updated the pull request incrementally with one > additional commit since the last revision: > > Update CGraphicsEnvironment.java src/java.desktop/macosx/classes/sun/awt/CGraphicsEnvironment.java line 182: > 180: } > 181: // fetch the main display again, the old value might be outdated > 182: mainDisplayID = getMainDisplayID(); What action since line 162 can trigger changing the getMainDisplayID() outcome? ------------- PR: https://git.openjdk.java.net/jdk/pull/554