<AWT Dev> [9] Review request for 8035069 [macosx] Loading resolution variants by demand

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Mon Mar 17 12:09:41 UTC 2014

Hello, Alexander.
The fix looks good to me too. Thanks!

On 3/14/14 10:38 PM, Petr Pchelko wrote:
> Hello, Alexander.
> The updated version of the fix looks good to me.
> With best regards. Petr.
> 14 марта 2014 г., в 7:53 после полудня, Alexander Scherbatiy <alexandr.scherbatiy at oracle.com> написал(а):
>> Hello,
>> Could you review the updated fix:
>>   http://cr.openjdk.java.net/~alexsch/8035069/webrev.01
>> On 3/13/2014 12:21 PM, Petr Pchelko wrote:
>>> Hello, Alexander.
>>> 1. As Sergey always says, could you please split the long lines.
>>> 2. Instead of the MultiResolutionImageMapper you could use a BiFunction<Image, Integer, Integer>
>>> 3. About the ImageCache. As it's uses an AppContext, could you please mention in the JavaDoc that is must be used from the thread with an AppContext only?
>>      1. 2. and 3 are updated.
>>> 4. I don't really like that you are duplicating the RecyclableSingleton class. May be it's better to make also move it out from com.apple.laf and reuse?
>>       I have added the getSoftReferenceValue(Object key, Supplier<T> supplier) method to the AppContext class. It should reduce the code duplication.
>>> 5. Looks like the old ImageCache contained the following lines:
>>>   116 if (state.is(JRSUIConstants.Animating.YES)) {
>>>   117     return false;
>>>   118 }
>>> I agree that these are probably not needed, but could you please verify that? Also after these were removed the ImageCache.setImage never returns false, so it could be made void.
>>      Thank you for pointing it out. This is the necessary check for the animated images in the Aqua L&F. I just forgot to move it to the AquaPainter.
>>      I have found one more issue that ImageIcon preloads images by calling image.getProperty("comment", imageObserver) where the imageObserver
>>      is usually null. The MultiResolutionBufferedImage created non-preloaded resolution variants and they were not shown because JMenuItem as an image observer
>>      returns false for the image loading. This is described in the issue 8037405 JMenuItem should check L&F icons in the image observer
>>         https://bugs.openjdk.java.net/browse/JDK-8037405
>>       It seems as a common problem so I added resolution variants preloading to the MultiResolutionBufferedImage.
>>    Thanks,
>>    Alexandr.
>>> With best regards. Petr.
>>> On 12.03.2014, at 19:03, Alexander Scherbatiy <alexandr.scherbatiy at oracle.com> wrote:
>>>> Hello,
>>>> Could you review the fix:
>>>>   bug: https://bugs.openjdk.java.net/browse/JDK-8035069
>>>>   webrev: http://cr.openjdk.java.net/~alexsch/8035069/webrev.00
>>>>   Image resolution variants are generated by request and cached in the ImageCache.
>>>>   - ImageCache is refactored to store different type of images and moved to sun.awt.image package.
>>>>   - An object is used as the cache key instead of hash code to prevent inetsection of hash codes for
>>>>     different type of images.
>>>>   - The base image for MultiResolutionBufferedImage is not cached and used for the hash code calculation
>>>>     in the getResolutionVariant method.
>>>> Thanks,
>>>> Alexandr.

Best regards, Sergey.

More information about the awt-dev mailing list