[OpenJDK 2D-Dev] RFR: 8252133: The java/awt/GraphicsDevice/DisplayModes/CycleDMImage.java fails if metal pipeline is active [v3]

Sergey Bylokhov serb at openjdk.java.net
Fri Oct 9 02:03:34 UTC 2020


> 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


More information about the 2d-dev mailing list