<AWT Dev> [9] Review Request: 6815345 java.awt.Component.createImage(int width, int height) should remove behavioral optionality
Semyon Sadetsky
semyon.sadetsky at oracle.com
Thu Sep 24 17:16:10 UTC 2015
On 9/24/2015 7:42 PM, Sergey Bylokhov wrote:
> On 24.09.15 18:38, Semyon Sadetsky wrote:
>>
>>
>> On 9/24/2015 4:58 PM, Sergey Bylokhov wrote:
>>> The new version of the fix:
>>> http://cr.openjdk.java.net/~serb/6815345/webrev.05
>> You assumption can be broken with the next
>>
>> AWTAccessor.getComponentAccessor().setPeer(jbutton1,
>> new ButtonPeer() {
>> ...
>> @Override
>> public Image createImage(int width, int height) {
>> return new BufferedImage(width, height,
>> BufferedImage.TYPE_INT_RGB);
>> }
>> ...
>> });
>
> AWTAccessor is unspecified thing, it is a safer version of reflection
> which can break lots of things if used incorrectly. This api is for
> internal use only.
>
>>
>> Maybe it would be better to write about peer=null in the method spec?
>
> peer is a private field it cannot be mentioned in the specification.
>
> Or
>> not to be that direct and leave the initial phrase mentioning
>> isHeadless()?
>
I read this article:
http://www.oracle.com/technetwork/articles/javase/headless-136834.html.
As I understand peer is not strictly disabled for the headless mode,
because some native resources like fonts, printing and images can be
used. In headless mode peer#getImage()/getVolatileImage() can be used to
construct native images, so they must not return null. Maybe
Component#getImage() implementation should simply check for isHeadless()
and return null?
You specified isHeadless()=true that describes the whole environment.
Why isHeadlessInstance()=true is not mentioned? What if the whole
environment is not headless but this component's graphics is headless?
And more global question: Why should we disable the creating of
component image buffer for the headless mode? It could be used for the
same performance reason as in non-headless.
>
>>>
>>> The headless case is covered, heavyweight components cannot be created
>>> in such mode, so only lightweight buttons are checked.
>>>
>>> On 24.09.15 15:58, Semyon Sadetsky wrote:
>>>>
>>>>
>>>> On 9/24/2015 3:25 PM, Sergey Bylokhov wrote:
>>>>> On 24.09.15 11:36, Semyon Sadetsky wrote:
>>>>>> Hi Sergey,
>>>>>>
>>>>>> isHeadless()=true must return null. If so please add the
>>>>>> corresponding
>>>>>> test case. It is not not obvious from the code.
>>>>>
>>>>> isHeadless()=true is headless mode where the frames are always not
>>>>> displayable, so everything is similar to the current test except that
>>>>> in headless the pack() will be throw an exception and second part of
>>>>> the test in this mode is unnecessary.
>>>> Then maybe simply do not call pack() for the headless test?
>>>> Okay, let me rephrase what I meant. Since isHeadless()=true case is
>>>> mentioned in those 3 specs so explicitly it must be guarantied that
>>>> the
>>>> specified behavior works for the case as described. I cannot trace
>>>> the
>>>> result by reading the code of the createImage(), isHeadless()
>>>> method is
>>>> not even called there. So the test case should be added. Or you could
>>>> remove isHeadless() references from the specs. Or write something like
>>>> "the result is non-deterministic if isHeadless() is not false..."
>>>>>
>>>>>>
>>>>>> --Semyon
>>>>>>
>>>>>> On 9/23/2015 9:14 PM, Sergey Bylokhov wrote:
>>>>>>> Hello.
>>>>>>> Please review the fix for jdk9.
>>>>>>> The specification is updated as suggested in JDK-6186530 and
>>>>>>> JDK-6815345. The test is added to prove that we always return null
>>>>>>> when the component is not displayable.
>>>>>>>
>>>>>>> ccc request will be created after the technical review. One
>>>>>>> additional
>>>>>>> bug filed https://bugs.openjdk.java.net/browse/JDK-8137047
>>>>>>>
>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-6815345
>>>>>>> Webrev can be found at:
>>>>>>> http://cr.openjdk.java.net/~serb/6815345/webrev.04
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>
More information about the awt-dev
mailing list