CachedPainter.paint0() uses the object returned by getClass() as a key
for the cache.
Is it possible to use PainterMultiResolutionCachedImage.class object as
a key in the PainterMultiResolutionCachedImage.getResolutionVariant()
method?
Thanks,
Alexandr.
On 8/26/2016 1:34 PM, Ambarish Rapte wrote:
Hi Alex & All,
Please review the updated webrev :
http://cr.openjdk.java.net/~arapte/8163261/webrev.02/
<http://cr.openjdk.java.net/%7Earapte/8163261/webrev.02/>
Changes: (Copying from the previous email)
I have included the change you suggested, to set component reference
null after painting the component.
In addition there is change in PainterMultiResolutionCachedImage to
add /hashCode()/ & /equals()/ methods.
Object of /PainterMultiResolutionCachedImage/ is used as key in the
/Map<Object, ImageCache> cacheMap./
/hashCode()/ & /equals()/ would avoid multiple entries of similar
image objects in the /cacheMap/ & help reduce the size of /cacheMap./
//
Verified this change by executing the /SwinSet2/ demo, all components
get painted correctly.
Also a small change in test, added check on panel reference and
modified error message.
Regards,
Ambarish
*From:*Ambarish Rapte
*Sent:* Friday, August 26, 2016 12:34 PM
*To:* Ambarish Rapte; Alexander Scherbatiy; Sergey Bylokhov; Rajeev
Chamyal; swing-dev@openjdk.java.net
*Subject:* RE: <Swing Dev> Review Request for 8163261: regression on
Linux: java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java
Hi All,
Please hold the review for this.
There are some merge conflicts with latest code so I shall update the
webrev again for review.
Regards,
Ambarish
*From:*Ambarish Rapte
*Sent:* Thursday, August 25, 2016 10:19 PM
*To:* Alexander Scherbatiy; Sergey Bylokhov; Rajeev Chamyal;
swing-dev@openjdk.java.net <mailto:swing-dev@openjdk.java.net>
*Subject:* Re: <Swing Dev> Review Request for 8163261: regression on
Linux: java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java
Hi Alex,
Thanks for the review comments,
Please review the updated webrev:
http://cr.openjdk.java.net/~arapte/8163261/webrev.01/
<http://cr.openjdk.java.net/%7Earapte/8163261/webrev.01/>
I have included the change you suggested, to set component reference
null after painting the component.
In addition there is change in PainterMultiResolutionCachedImage to
add /hashCode()/ & /equals()/ methods.
Object of /PainterMultiResolutionCachedImage/ is used as key in the
/Map<Object, ImageCache> cacheMap./
/hashCode()/ & /equals()/ would avoid multiple entries of similar
image objects in the /cacheMap/ & help reduce the size of /cacheMap./
//
Verified this change by executing the /SwinSet2/ demo, all components
get painted correctly.
Also a small change in test, added check on panel reference and
modified error message.
Regards,
Ambarish
*From:*Alexander Scherbatiy
*Sent:* Monday, August 22, 2016 5:47 PM
*To:* Ambarish Rapte; Sergey Bylokhov; Rajeev Chamyal;
swing-dev@openjdk.java.net <mailto:swing-dev@openjdk.java.net>
*Subject:* Re: <Swing Dev> Review Request for 8163261: regression on
Linux: java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java
On 17/08/16 15:49, Alexandr Scherbatiy wrote:
On 8/15/2016 12:43 PM, Ambarish Rapte wrote:
Hi,
Please review fix for JDK9,
Bug: https://bugs.openjdk.java.net/browse/JDK-8163261
Webrev:
http://cr.openjdk.java.net/~arapte/8163261/webrev.00/
<http://cr.openjdk.java.net/%7Earapte/8163261/webrev.00/>
Issue:
Reference to JButton was not getting collected by GC.
Cause:
A strong reference to objects was held by
PainterMultiResolutionCachedImage.
And the image reference was held by HashMap.
Fix:
Changing the HashMap to WeakHashMap. Entry to
WeakHashMap gets removed after the object has no other strong reference.
May be using the soft reference would be better in this case. It
could be expensive to recreate a cache with images every time GC
removed them.
There is the code which sets a component to the
PainterMultiResolutionCachedImage:
CachedPainter.paint0(...)
-------
if (image instanceof PainterMultiResolutionCachedImage) {
((PainterMultiResolutionCachedImage) image).setParams(c,
args);
}
// Render to the passed in Graphics
paintImage(c, g, x, y, w, h, image, args);
-------
May be it is possible to clean up the component and args from the
PainterMultiResolutionCachedImage after the image is drawn?
Thanks,
Alexandr.
Regards,
Ambarish