<AWT Dev> [8] Review request for 8011059 [macosx] Make JDK demos look perfect on retina displays

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Thu Oct 31 09:19:14 PDT 2013


  Could you review the updated fix:
    http://cr.openjdk.java.net/~alexsch/8011059/webrev.04/

    The reflection is used to skip the Image.getScaledInstance() method 
call if it is not overridden by a user.

On 10/29/2013 11:08 PM, Sergey Bylokhov wrote:
> Hi, Alexander.
> The fix looks fine to me in general. But there is at least one issue. 
> I build you fix and test it:
>  - Consuming of cpu increased by 500 times Java2Demo on images tab.
>  - FPS is dropped from 220(jdk8)/35(jdk7u40) to 15 in guimark2. Note 
> that jdk6 has the same FPS(15) on my system.

    The main problem is that the Image.SCALE_DEFAULT hint is used to 
retrieve a scaled image from Image.getScaledInstance() method.
    It always uses the ReplicateScaleFilter for images which 
getScaledInstance() method has not been overridden.
    The ReplicateScaleFilter creates a lot of arrays and consumes the 
CPU during the image parsing.

    The better fix would be to introduce the new Image.SCALE_CUSTOM hint 
which could be used to get a scaled image and does not use filters by 
default.
    But it should be a separated bug with a new CCC request.

   Thanks,
   Alexandr.

>
> On 29.10.2013 20:45, Alexander Scherbatiy wrote:
>>
>>   Could you review the updated fix:
>>     http://cr.openjdk.java.net/~alexsch/8011059/webrev.03
>>
>> On 10/28/2013 2:33 PM, Artem Ananiev wrote:
>>> Hi, Alexander,
>>>
>>> a few comments:
>>>
>>> 1. SunGraphics2D.java:3076 - should isHiDPIImage() be used here?
>>      The isHiDPIImage() method is used to check that the 
>> drawHiDPIImage should be called like:
>>         if (isHiDPIImage(img)) {
>>             return drawHiDPIImage(...);
>>         }
>>
>>> 2. I'm not sure that the proposed getScaledImageName() 
>>> implementation in ScalableToolkitImage works perfectly for URLs like 
>>> this:
>>>
>>>   http://www.exampmle.com/dir/image
>>>
>>> In this case it will try to find 2x image here:
>>>
>>>   http://www.example@2x.com/dir/image
>>>
>>> which doesn't look correct.
>>        Fixed. Only path part of a URL is converted to path2x.
>>
>>> 3. RenderingHints spec references Retina or non-Retina displays, 
>>> which should be removed.
>>        Fixed.
>>
>>     - devScale is used instead of transform parsing in the 
>> drawHiDPIImage() method just to not have performance regression more 
>> than 2 times on HiDPI displays
>>     - LWCToolkit.ScalableToolkitImage is made public for the fix 
>> 8024926 [macosx] AquaIcon HiDPI support.
>>
>>     Thanks,
>>     Alexandr.
>>
>>>
>>> Thanks,
>>>
>>> Artem
>>>
>>> On 10/25/2013 5:18 PM, Alexander Scherbatiy wrote:
>>>>
>>>>    Could you review the updated fix:
>>>> http://cr.openjdk.java.net/~alexsch/8011059/webrev.02/
>>>>
>>>>    - Scaled image width and height are transformed according to the
>>>> AffineTransform type.
>>>>    - ToolkitImage subclass is used to hold @2x image instance.
>>>>
>>>>   Thanks,
>>>>   Alexandr.
>>>>
>>>> On 10/23/2013 7:24 PM, Alexander Scherbatiy wrote:
>>>>>
>>>>>   Could you review the updated fix:
>>>>> http://cr.openjdk.java.net/~alexsch/8011059/webrev.01/
>>>>>
>>>>>   The JCK failures has been resolved:
>>>>>     - Some tests tries to draw an image with Integer.MAX_VALUE width
>>>>> or height. Passing large values to image.getScaledImage(width, 
>>>>> height,
>>>>> hints).
>>>>>        leads that an Image filter is not able to create necessary
>>>>> arrays.  The fix uses the original image if width or height are equal
>>>>> to Integer.MAX_VALUE.
>>>>>     - Using Image.SCALE_DEFAULT hint for the getScaledImage(width,
>>>>> height, hints) method to get the high resolution image interferes 
>>>>> with
>>>>>        JCK tests that expect that the scaled image by certain
>>>>> algorithm is returned. This is fixed by invoking the
>>>>> super.getScaledImage(width, height, hints)
>>>>>        method in ToolkitImage in case if a high resolution image is
>>>>> not set.
>>>>>
>>>>>     Thanks,
>>>>>     Alexandr.
>>>>>
>>>>>
>>>>>
>>>>> On 10/22/2013 1:31 PM, Alexander Scherbatiy wrote:
>>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> Could you review the fix:
>>>>>>
>>>>>>   bug: https://bugs.openjdk.java.net/browse/JDK-8011059
>>>>>>   webrev: http://cr.openjdk.java.net/~alexsch/8011059/webrev.00
>>>>>>
>>>>>>   The IMAGE_SCALING rendering hint is added to the RenderingHints 
>>>>>> class.
>>>>>>   Enabling the image scaling rendering hint forces the SunGraphics2D
>>>>>> to use getScaledInstance(width, height, hints) method
>>>>>>   from Image class with SCALE_DEFAULT hint.
>>>>>>
>>>>>>   By default the image scaling rendering hint is enabled on HiDPI
>>>>>> display and disabled for standard displays.
>>>>>>
>>>>>>   User can override the getScaledInstance(width, height, hints)
>>>>>> method and return necessary high resolution image
>>>>>>   according to the given image width and height.
>>>>>>
>>>>>>   For example:
>>>>>>   ---------------------
>>>>>>         final Image highResolutionImage =
>>>>>>                 new BufferedImage(2 * WIDTH, 2 * HEIGHT,
>>>>>> BufferedImage.TYPE_INT_RGB);
>>>>>>         Image image = new BufferedImage(WIDTH, HEIGHT,
>>>>>> BufferedImage.TYPE_INT_RGB) {
>>>>>>
>>>>>>             @Override
>>>>>>             public Image getScaledInstance(int width, int height, 
>>>>>> int
>>>>>> hints) {
>>>>>>                 if ((hints & Image.SCALE_DEFAULT) != 0) {
>>>>>>                     return (width <= WIDTH && height <= HEIGHT)
>>>>>>                             ? this : highResolutionImage;
>>>>>>                 }
>>>>>>                 return super.getScaledInstance(width, height, 
>>>>>> hints);
>>>>>>             }
>>>>>>         };
>>>>>>   ---------------------
>>>>>>
>>>>>>   The LWCToolkit and ToolkitImage classes are patched to
>>>>>> automatically get provided image at 2x.ext images on MacOSX.
>>>>>>
>>>>>>   There are no significant changes in the Java2D demo to make it 
>>>>>> look
>>>>>> perfect on Retina displays.
>>>>>>   It needs only to put necessary images with the @2x postfix and 
>>>>>> they
>>>>>> will be automatically drawn.
>>>>>>
>>>>>> Thanks,
>>>>>> Alexandr.
>>>>>>
>>>>>
>>>>
>>
>
>



More information about the awt-dev mailing list