RFR: 8282270: java/awt/Robot Screen Capture tests fail after 8280861 [v3]

Alexey Ivanov aivanov at openjdk.java.net
Wed Mar 9 23:15:44 UTC 2022


On Wed, 9 Mar 2022 13:35:44 GMT, Maxim Kartashev <duke at openjdk.java.net> wrote:

>> The two tests `ScreenCaptureGtkTest.java` and `HiDPIRobotScreenCaptureTest.java` under `java/awt/Robot/HiDPIScreenCapture` started to intermittently fail under Windows and Linux after the [recent changes](https://github.com/openjdk/jdk/commit/cc7cf81256ed4d74493472017b1c4df20fa2208a) made exclusively for the Linux `Robot` implementation.
>> 
>> `HiDPIRobotScreenCaptureTest.java`
>> Since the Windows failures cannot possibly have their origin in the fix made - the latter being Linux-only - the test apparently either exposes an existing bug in the Windows `Robot` or is bumping against a peculiarity of that platform. The test is reverted back to its original form that didn't fail.
>> 
>> `ScreenCaptureGtkTest.java`
>> The coordinates in the log `(83, 78)` of a failure are higher up than the test suggests `(83, 97)`. I've seen similar failures on Ubuntu 20.04 when the coordinates were set to `(0, 0)`. The color then picked matched the color of the bar drawn at the top of the screen. I believe it's best to place the test pixels towards the center of the window to avoid desktop elements interference.
>> 
>> The other possible reason for intermittent failures are window coordinates. Suppose that the test is executing with `sun.java2d.uiScale` set to 2. This effectively means that it can only pick colors of pixels at even coordinates (in the absolute desktop space). So if the window is placed at, say, `(201, 201)`, `Robot` can only pick the color at either `(200, 200)` or `(202, 202)`. Since the test only makes sense if it is pixel-accurate, I removed all `@run`s with `sun.java2d.uiScale` other than 1. This way window placement will not cause a failure.
>> 
>> This was tested on Ubuntu 20.04 and 18.04 with desktop scaling set to 100%, 200%, and 300%.
>
> Maxim Kartashev has updated the pull request incrementally with one additional commit since the last revision:
> 
>   HiDPIRobotScreenCaptureTest.java: smaller frame size such that it fits on a 1200x600 screen.
>   
>   ScreenCaptureGtkTest.java: smaller frame size; added code to save
>   the image on failure.

ScreenCaptureGtkTest failed when it was run with `-Djdk.gtk.version=2 -Dsun.java2d.uiScale=3` options:


----------messages:(5/317)----------
command: main -Djdk.gtk.version=2 -Dsun.java2d.uiScale=3 ScreenCaptureGtkTest
...
----------System.out:(1/128)----------
Checking color at 83, 78 to be equal to java.awt.Color[r=0,g=255,b=0]...
Mismatch: found java.awt.Color[r=54,g=52,b=58] instead
----------System.err:(13/786)----------
Gtk-Message: 20:23:41.357: Failed to load module "canberra-gtk-module"
java.lang.RuntimeException: Wrong screen pixel color
	at ScreenCaptureGtkTest.checkPixelColors(ScreenCaptureGtkTest.java:127)
	at ScreenCaptureGtkTest.main(ScreenCaptureGtkTest.java:101)


The regular screenshot shows nothing: the image is filled with green with three pixel dots.

However, multi-resolution screenshot reveals something (the image is zoomed):
![MRI screenshot zoomed](https://user-images.githubusercontent.com/70774172/157537522-2d61eda5-d499-4a23-8a28-083c19bf4079.png)

The first pixel line above is part of the background image. The robot seems to pick it up it instead of the correct pixel.

The host where the test fails is Ubuntu 18.04.

-------------

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



More information about the client-libs-dev mailing list