> Would such a workaround be acceptable as part of this back out fix?

Yes, very much so !

-phil.

On 7/12/19 11:34 AM, Anton Litvinov wrote:
Hello Phil,

I tried to apply your code and can confirm that value of "color" is always the same for the case, when the test passes and fails. For each test run the "paint(Graphics)" method is called either 2 or 3 times and this tracing output is always the same and following:
"color=java.awt.Color[r=255,g=255,b=255] alpha=127"

My today's experiments show that this intermittent failure is reproducible with builds prior to the builds with the fix for 8214579 and this is also reproducible on Oracle Linux 7.4 x64. I was able to reproduce in the following environment configurations:

1. Oracle Linux 7.4 x64 with JDK 13+23 (the build without the fix 8214579 which was integrated in JDK 13+24) 2. openSUSE Leap 15.0 with JDK 13+23, JDK 11+25 (build in which the test itself was introduced), JDK 11+28 (GA build).

I attached a screenshot with the test failure and wrote a comment in the bug (https://bugs.openjdk.java.net/browse/JDK-8224825).

MY OBSERVATION:

Although I have not been able to identify the root cause of the intermittent test failure, I think that the wrong color is got, when the black color, which is set as the background for the frame, is not participating in color blending.

THE DISCOVERED WORKAROUND:

I discovered that if the following workaround is applied to the regression test "test/jdk/java/awt/Color/AlphaColorTest.java", then the intermittent test failure disappears (is not reproducible, when test is run 20 times in a row). Also I verified with the workaround the test fails as it should with JDK 11+24 (the build without the fix 8204931 which was integrated in JDK 11+25 and introduced the test). The workaround is following.

Substitute the next 2 code lines:

77        frame = new Frame("Alpha Color Test");
78        frame.setBackground(Color.black);

for the next 8 code lines:

        frame = new Frame("Alpha Color Test") {
            @Override
            public void paint(Graphics g) {
                g.setColor(Color.black);
                g.fillRect(0, 0, getWidth(), getHeight());
                super.paint(g);
            }
        };

Would such a workaround be acceptable as part of this back out fix?

Thank you,
Anton

On 11/07/2019 19:48, Phil Race wrote:
I don't think we ever saw it fail until 8214579 was pushed.
I don't know the reason for the color you are sporadically getting in VB
Maybe it is slow and the paint event is being missed ?
But then I'd expect black .. not light grey.

Still, it might be informative to put a print statement in here (in the test)
    public void paint(Graphics g) {
        System.out.println("color=" + color + " alpha=" + color.getAlpha());  // << add this
        g.setColor(color);
        g.fillRect(0, 0, getSize().width, getSize().height);
    }

and compare what is printed for failing and passing runs.
If you can't figure it out quickly, then update the test to not exit so quickly and grab a screen
shot of the failure and add it to the bug.


-phil.

On 7/11/19 11:13 AM, Anton Litvinov wrote:
Hello Phil,

Thank you for these additional details. I have tried to run the test "open/test/jdk/java/awt/Color/AlphaColorTest.java" with JDK 13 compiled from "jdk/jdk13" with/without this back out fix and the results are not so stable on my VirtualBox host with openSUSE Leap 15.0 OS (GNOME 3.26.2):

1. "AlphaColorTest.java" stably fails with JDK 13 without this back out fix and the test failure message is stably:
    "Color is not as expected. Got java.awt.Color[r=255,g=255,b=255]"

2. "AlphaColorTest.java" starts passing with JDK 13 with the back out fix, but continues to intermittently fail with the failure message:
    "Color is not as expected. Got java.awt.Color[r=189,g=189,b=189]"

It looks that either this regression test had been failing intermittently before the fix 8214579, which we are backing out, was integrated, or some other fix causes this intermittent failure.

Maybe in this case it is better not to change this "open/test/jdk/ProblemList.txt" as well as the test itself "open/test/jdk/java/awt/Color/AlphaColorTest.java" as part of this back out fix for JCK test failure?

Thank you,
Anton

On 11/07/2019 17:38, Philip Race wrote:
There is a regression test that is supposed to catch this exact problem.

So I had looked into how we did not catch this earlier and found that in fact we did. This was originally found and filed as https://bugs.openjdk.java.net/browse/JDK-8224825 The test java/awt/Color/AlphaColorTest.java was then problem listed on Linux.

$ grep AlphaColorTest test/jdk/ProblemList.txt
java/awt/Color/AlphaColorTest.java 8224825 linux-all

So I think we can close JDK-8224825 as a duplicate of this as well as updating the problem list and the test - after confirming that this backout resolves that as I expect it will.

-phil.

On 7/11/19, 9:20 AM, Anton Litvinov wrote:
By your request regenerated the webrev specifically against (http://hg.openjdk.java.net/jdk/jdk13) repository. JDK 13 specific webrev: http://cr.openjdk.java.net/~alitvinov/8227392/jdk13/webrev.00

I confirm again, that 2 failing manual tests: "ColorTest0003", "ColorTest0004" from the test "api/java_awt/interactive/ColorTests.html" in JCK 13 do not fail anymore after this fix is applied to JDK 13 compiled from "jdk/jdk13" repository.

"jdk/jdk13" repository does not contain any problem list mentioning "api/java_awt/interactive/ColorTests.html" test from JCK 13, thus I cannot de-problem list it and have no idea, where it is problem-listed. I also doubt that it is problem-listed, since it is manual. I added "noreg-jck" label to the bug in JBS deliberately according to OpenJDK process (Section #6 from the web page (http://openjdk.java.net/guide/changePlanning.html)), because this back out fix does not contain a new separate regression test, while this regression can be checked by running existing mentioned above test from JCK package.

If this "noreg-jck" label creates problems, I can remove it at all.

Thank you,
Anton

On 11/07/2019 15:51, Philip Race wrote:
One more thing I just realised you should do here is de-problem list
the regression test that fails ... after verifying it now works,
updating it with this bug ID.
And you can remove that noreg-jck label as a consequence.

-phil.

On 7/11/19, 7:35 AM, Philip Race wrote:
In such cases I like more than to be told "it would apply cleanly" but also to see that you actually prepared the webrev against 13. This is more certain and ensures that when the fix is approved you don't accidentally push it to the wrong repo. You have to go clone 13 and apply the patch there anyway ...

-phil.

On 7/11/19, 5:44 AM, Anton Litvinov wrote:
Hello Phil,

Thank you for review and the important remark about the need to work with "jdk/jdk13" stabilization repository, I forgot about this feature of post RDP 1 phase. Today I checked the fix against "jdk/jdk13" repository and confirm that it resolves this bug for JDK 13.

Will wait for feedback or approval from any other second code reviewer.

Thank you,
Anton

On 10/07/2019 19:55, Phil Race wrote:
Anton,

This looks fine except that it needs to be prepared against 13, and then pushed there, not 14. And it will get forwarded synced from 13 to 14. That is the RDP process ..

-phil.

On 7/10/19 5:00 AM, Anton Litvinov wrote:
Hello,

Could you please review the following fix for the bug. The fix is backing out of the fix for the bug JDK-8214579 which caused this JCK test failure. If this fix is accepted, then a new separate bug for readdressing the bug reported in JDK-8214579 will be filed.

Bug: https://bugs.openjdk.java.net/browse/JDK-8227392
Webrev: http://cr.openjdk.java.net/~alitvinov/8227392/jdk14/webrev.00 Changeset of JDK-8214579: http://hg.openjdk.java.net/jdk/client/rev/c53905e7dc57

Thank you,
Anton







Reply via email to