> 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 with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision: - Merge branch 'master' into JDK-8252133 - Update CGraphicsEnvironment.java Make sure the main display is in the list of all displays. Prevent duplicate main screen if the switch has happened. - Merge branch 'master' into JDK-8252133 - Update CycleDMImage.java - Merge branch 'master' into JDK-8252133 - 8252133: The java/awt/GraphicsDevice/DisplayModes/CycleDMImage.java fails if metal pipeline is active ------------- Changes: - all: https://git.openjdk.java.net/jdk/pull/554/files - new: https://git.openjdk.java.net/jdk/pull/554/files/93ebb049..a38ef0ef Webrevs: - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=554&range=02 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=554&range=01-02 Stats: 2246 lines in 89 files changed: 1365 ins; 632 del; 249 mod Patch: https://git.openjdk.java.net/jdk/pull/554.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/554/head:pull/554 PR: https://git.openjdk.java.net/jdk/pull/554