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

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Fri Mar 14 15:53:29 UTC 2014


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.
>>



More information about the awt-dev mailing list