Modify

Opened 15 months ago

Closed 3 months ago

#7485 closed defect (fixed)

upload dialog: typing a comment is slow due to high cpu load

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

Description

Typing a changeset comment is very slow, during typing a lot of cpu time is consumed.
Something must be triggered in the background.

Version: r5047

Attachments (0)

Change History (7)

comment:1 Changed 15 months ago by akks

How to reproduce it? (I can not) Does it depend on OS or OSM file?

comment:2 Changed 15 months ago by Cobra

This happens when editing in densely mapped areas or large areas.
I noticed that for every character typed, a way gets unhighlighted and highlighted again (like it happens when moving the cursor over it). I did not see this every time, but every time I could see it, that lag was present.

I could figure out a way to reproduce this for me:

  • download some densely mapped area
  • change something
  • move the cursor over a complex way (e.g. landuse=residential with many nodes) so it gets highlighted (and notice there is a slight lag doing so)
  • open the upload dialog via shortkey (it will also happen when using the button, but this is unreliable)
  • type fast

Monitoring cpu usage at low intervals (I've got 50ms resolution) helps to see that something is going on.

Java version: 1.6.0_30, Sun Microsystems Inc., Java HotSpot(TM) 64-Bit Server VM, ubuntu 10.10

comment:3 Changed 15 months ago by xeen

I can get the CPU usage up using the way Cobra described (from 40% to 100%). No idea to what’s the cause, though.

comment:4 Changed 15 months ago by akks

Each key press in upload dialog cause repaint of layer... I am debugging.

comment:5 Changed 15 months ago by akks

It is not specific for upload dialog. Keypress in every dialog - add property, F12 preferences, etc. (but not in main window) leads to map repaint.

Thank you for noticing such big waste of CPU!

@team: render is called with following stack (setVisible is called only once):

org.openstreetmap.josm.gui.layer.OsmDataLayer.paint(OsmDataLayer.java:281)
org.openstreetmap.josm.gui.MapView.paintLayer(MapView.java:455)
org.openstreetmap.josm.gui.MapView.paint(MapView.java:534)
javax.swing.JComponent.paintChildren(JComponent.java:887)
javax.swing.JSplitPane.paintChildren(JSplitPane.java:1047)
javax.swing.JComponent.paint(JComponent.java:1063)
javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
javax.swing.RepaintManager.paint(RepaintManager.java:1206)
javax.swing.JComponent._paintImmediately(JComponent.java:5169)
javax.swing.JComponent.paintImmediately(JComponent.java:4980)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
javax.swing.RepaintManager.access$700(RepaintManager.java:59)
javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
java.awt.EventQueue.access$000(EventQueue.java:101)
java.awt.EventQueue$3.run(EventQueue.java:666)
java.awt.EventQueue$3.run(EventQueue.java:664)
java.security.AccessController.doPrivileged(AccessController.java)
java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:121)
java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221)
java.security.AccessController.doPrivileged(AccessController.java)
java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219)
java.awt.Dialog.show(Dialog.java:1072)
java.awt.Component.show(Component.java:1651)
java.awt.Component.setVisible(Component.java:1603)
java.awt.Window.setVisible(Window.java:1013)
java.awt.Dialog.setVisible(Dialog.java:1003)
org.openstreetmap.josm.gui.io.UploadDialog.setVisible(UploadDialog.java:362)
org.openstreetmap.josm.actions.UploadAction.uploadData(UploadAction.java:214)
org.openstreetmap.josm.actions.UploadAction.actionPerformed(UploadAction.java:242)
javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661)
javax.swing.JComponent.processKeyBinding(JComponent.java:2879)
javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:306)
javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:263)
javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2971)
javax.swing.JComponent.processKeyBindings(JComponent.java:2963)
javax.swing.JComponent.processKeyEvent(JComponent.java:2842)
java.awt.Component.processEvent(Component.java:6282)
java.awt.Container.processEvent(Container.java:2229)
...
Last edited 15 months ago by akks (previous) (diff)

comment:6 follow-up: Changed 3 months ago by Don-vip

Do you still observe this behaviour ? I cannot reproduce with latest.

comment:7 in reply to: ↑ 6 Changed 3 months ago by Cobra

  • Resolution set to fixed
  • Status changed from new to closed

Replying to Don-vip:

I cannot reproduce with latest.

Me neither. Seems like this has been fixed by now.

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as closed .
as The resolution will be set. Next status will be 'closed'.
The resolution will be deleted. Next status will be 'reopened'.
Author


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

 
Note: See TracTickets for help on using tickets.