On 10/31/13 9:19 AM, Alexander Scherbatiy wrote:

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

I'd like to point out a potential issue here with respect to ImageObserver.

Typically, when the ImageObserver is notified that the image loading is complete then it becomes irrelevant. I'm not sure if we've documented this anywhere, and I've not done a code survey to see if anyone has ever created code based on that assumption, but it is true. complete means the bits are all there and all calls to drawImage() forever-more will succeed without any problems.

The way that the scaled images are introduced here, there will be separate image loading for both the regular and @2x versions of the image. A developer could render the image on one resolution display which would trigger the loading of that version of the image until it says it is complete, but the first time they load the image on a new display of a different resolution, then suddenly a new version of the image is needed and will not have been loaded - but that has never been possible before and so the developer could be caught off guard by this.

There would ideally be some way to make the status of the image only complete when all resolution variants of an image are loaded.

This gets more complicated with the MediaTracker object which is supposed to be used to load an image completely. We don't explicitly say that if a MediaTracker says an image is complete that they can then ignore their observers, and there is already an issue with animated GIFs where we document that the tracker will claim they are done after their first frame is loaded, but I don't doubt that many programmers have written code to funnel all images through MT and then assume they don't need observers after that. In fact, I believe that Swing has done things like that internally. The question then is, what happens with MT and @2x images?

                        ...jim

Reply via email to