<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 macosx-port-dev
mailing list