[OpenJDK 2D-Dev] [14] Review request for 8227392: Colors with alpha are painted incorrectly on Linux, after JDK-8214579
Anton Litvinov
anton.litvinov at oracle.com
Fri Jul 12 18:34:12 UTC 2019
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
>>>>>>>>
>>>>>>>
>>>>
>>
>
More information about the 2d-dev
mailing list