On Fri, 30 Oct 2020 16:04:51 GMT, Ambarish Rapte <ara...@openjdk.org> wrote:

> Each test in RegionBackgroundImageUITest makes several calls to 
> `robot.getPixelColor()` on App thread. Due to this each test requires more 
> than **60** seconds for execution.
> 
> Fix is to save a screen capture of Scene (on App thread) and then read pixel 
> color from the screen capture(not on app thread). This reduces execution time 
> of each test to less than **3** seconds.
> Ideally with this fix(commit#1) all the tests should pass. All tests do pass 
> on Windows and Linux but three tests fail on Mac, which used to pass without 
> this change.
> - RegionBackgroundImageUITest.unalignedImage
> - RegionBackgroundFillUITest.testScenario2
> - RegionBackgroundFillUITest.testScenario3
> 
> commit#2 solves the above problem. Solution is to fallback to test color 
> again by reading it using `robot.getPixelColor()` on App thread when a test 
> fails.
> 
> One test RegionBackgroundImageUITest.unalignedImage_Cover, fails only on Mac 
> platform, before and after this fix.
> It is reported as a new issue 
> [JDK-8255679](https://bugs.openjdk.java.net/browse/JDK-8255679)
> 
> This is a test fix and affects only the tests that extend from 
> `RegionUITestBase` test class and does not affect other tests.
> Verified that `RegionBackgroundImageUITest` and `RegionBackgroundFillUITest` 
> tests pass on all three platforms(except 
> RegionBackgroundImageUITest.unalignedImage_Cover which fails on Mac).

The fact that you needed to implement a fallback to `Robot::getPixelColor` if 
reading a pixel from the buffer obtained by `Robot::getScreenCapture` fails (on 
Mac) suggests that `RegionBackgroundImageUITest` has some issues running on 
HiDPI displays. It also points out that there is a difference between the 
scaling algorithm used to read a single pixel vs an array of pixels (this might 
be a bug in Robot itself).

I confirmed the fact that these problems are related to HiDPI scaling by 
running it on my Windows 10 system with 125% scaling, and I get 30 test 
failures. I instrumented the code and I see a couple hundred fallbacks per test 
even for the non-failing tests. If I force screen scale to 1 on Windows then 
all tests pass with no fallbacks.

We used to have this problem for some of the tests in 
`RegionBackgroundFillUITest` as well. The fix for 
[JDK-8170026](https://bugs.openjdk.java.net/browse/JDK-8170026) addressed this 
by skipping the tests that were sensitive to screen scale (14 of them).  You 
either need to do something similar for `RegionBackgroundImageUITest` or else 
fix the tests to work with different screen scales (this would be challenging).

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

Changes requested by kcr (Lead).

PR: https://git.openjdk.java.net/jfx/pull/344

Reply via email to