Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [udig-dev] Add Layer Wizard Performance

Ok, created a pull request:
https://github.com/uDig/udig-platform/pull/179

On 06/06/2014 9:35 PM, Jody Garnett wrote:
Good bit of digging Emily, the improvement would be gratefully accepted.


Jody Garnett


On Sat, Jun 7, 2014 at 6:41 AM, Emily Gouge <egouge@xxxxxxxxxxxxxxx> wrote:

I noticed if I dragged a layer from the catalog onto the map it was added
instantly. However if I used the Add Data wizard the layers were added
immediately, but it would take another 5-10 seconds for the wizard to close.
I always found this somewhat annoying, so I decided to see if I could find
the source of the issue.

I discovered the problem occurs when Tools' enabled states are updated
after the newly added layers is selected.  Updating each tool (from the
import data wizard) makes a Display.AsyncExec call for each tool, which
apparently, when you have 40 or so tools, causes quite a delay.  This was
not a problem when dragging from the catalog as this code is already
executed in the display thread.

This can be fixed by wrapping the setEnabled calls in a single Display
thread so it is only done once.  I accomplished this by updating the
ToolManager.setEnabled function as shown below (so it is execute once for
each category of tools).

If this seems reasonable to others I can contribute the change back to the
uDig master easily enough.

Emily

private void setEnabled( final IMap map, final Collection<? extends
ToolCategory> categories) {
   if(selectedLayerListener == null)
     selectedLayerListener = new EditManagerListener();

   selectedLayerListener.setCurrentMap(map);

     //One listener is enough. Say NO to listeners hell:)
   if(!map.getEditManager().containsListener(selectedLayerListener))
     map.getEditManager().addListener(selectedLayerListener);

   PlatformGIS.syncInDisplayThread(new Runnable(){
     @Override
     public void run() {
       ILayer selectedLayer = map.getEditManager().getSelectedLayer();

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
QmCC
--------------040500080309040101080301--


Back to the top