Modify

Opened 21 months ago

Last modified 14 months ago

#6797 new defect

Loading of http:// images blocks user input. It should be done in background

Reported by: bastiK Owned by: team
Priority: normal Component: Core
Version: Keywords:
Cc:

Description (last modified by bastiK)

...continued from #6137.

At the moment, we load images in EDT. When there is delay in the network, the user interface may block for some time. Instead, we should fetch the images asynchronously in a background thread.

Attachments (3)

async.diff (7.7 KB) - added by bastiK 16 months ago.
async2.diff (19.1 KB) - added by bastiK 16 months ago.
async3.diff (31.2 KB) - added by bastiK 15 months ago.
ready for commit

Download all attachments as: .zip

Change History (12)

comment:1 Changed 21 months ago by bastiK

Replying to cmuelle8:

  • First the preliminary icon is shown on the map, but when loading is finished, no repaint is done.

This should be solvable.

  • The ElemStyles are cached and the preliminary Image causes wrong hash value. Consequently the wrong icon may be shown.

This really sucks. There is a comment in StyleCache I suppose you are refering to: "StyleCache must not be changed after it has been added to the intern pool." This would mitigate all efforts to do asynchronous resource loading.

Since resources effect hashCode calculation and hashCodes must not be manipulated after intern pool is built, we would have to wait building the intern pool until all resources are fetched.

Would it not suffice to just hash the name of the image? After all, if images use the same icon-image value in a style sheet, they evaluate to the same hashCode, just as the name values should, if they are identical. There would only be deviations to current behavior if a style writer uses the same image under different names - a case highly improbable.

You are right, it can be fixed relatively easy. The name is not enough, because there can be multiple zip archives that contain icons with the same name. See MapPaintStyles.IconReference class for a full description. My point was, that the patch doesn't quite work like this, but there is more to do...

comment:2 Changed 21 months ago by bastiK

Replying to cmuelle8:

Replying to bastiK:

  • First the preliminary icon is shown on the map, but when loading is finished, no repaint is done.

In MapPainter.java, function drawNodeIcon(), line

icon.paintIcon ( nc, g,   [...]

nc is used as a Component implementing ImageObserver. Maybe we can leverage this and use AWT functionality for asynchronous image loading, no need to write code twice.

Sure, whatever works best. No need to force it, though.

comment:3 Changed 16 months ago by bastiK

In [4822/josm]:

make identity of map icons depend on the name and not the image data (see #6797)

comment:4 Changed 16 months ago by bastiK

In [4823/josm]:

forgot to add (see #6797)

Changed 16 months ago by bastiK

comment:5 Changed 16 months ago by bastiK

  • Description modified (diff)

First version. Should work, but is there a better (simpler) way to do this?

Changed 16 months ago by bastiK

comment:6 Changed 16 months ago by bastiK

Improved version.

FIXME: Text label position is not updated when the image is loaded and the final image is smaller or larger than the dummy image.

Changed 15 months ago by bastiK

ready for commit

comment:7 Changed 15 months ago by bastiK

Fixed wrong label position, this should work now.

comment:8 Changed 15 months ago by bastiK

In 5054/josm:

see #6797: load map images in background, in case they are loaded over a network. Show temporary image in the meantime.

comment:9 Changed 14 months ago by bastiK

FIXME: update disabled image cache

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as new .
as The resolution will be set. Next status will be 'closed'.
to The owner will be changed from team. Next status will be 'new'.
Next status will be 'needinfo'.The owner will change to bastiK
as duplicate The resolution will be set to duplicate. Next status will be 'closed'.The specified ticket will be cross-referenced with this ticket
The owner will be changed from team to anonymous. Next status will be 'assigned'.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.