Dave Hansen napsal(a):
> On Thu, 2009-10-08 at 00:10 -0700, Dave Hansen wrote:
>> It takes almost a second for me to do a mouse click and have a single
>> object be selected.  I think it's worse for large data sets, but it
>> seems to exist most of the time despite the size of the data set.
>> Personally, I think a whole second to wait for a mouse click is pretty
>> bad.
>>
>> Most of the time appears to be spent notifying things about the
>> selection change.  I just counted 110 of these, and we fire once for the
>> clearSelection() and again for the new selection.  They all seem to add
>> up to almost a second of latency.  I actually went and printed out a
>> bunch of timestamps to confirm this.
>>
>> Any thoughts on how to make this better?  I've been using my QuadBuckets
>> code to make the click coordinate searches faster, but I'm clueless as
>> to what to do with these notifiers.
> 
> Digging in a bit more... Virtually none of these actions care about the
> contents of selections.  The vast majority just do:
> 
>     @Override
>     protected void updateEnabledState() {
>         setEnabled(getCurrentDataSet() != null && ! 
> getCurrentDataSet().getSelected().isEmpty());
>     }
> 
> The problem is that getSelected() iterates over the entire data set
> looked for selected OsmPrimitives.  We do this ~112 times for each mouse
> click.  That's a bit, um, suboptimal.
> 
> I tried a really quick and dirty solution which is to just keep a copy
> of the selected primitives around.  That makes a *huge* difference.

First and foremost, selection status is not a property of the data.
Changing the data set just because the user have selected something is 
plain wrong. Having a per-dataset selection is quite disturbing too - 
there should be only one, system-wide.

Regards,
   Nenik.

_______________________________________________
josm-dev mailing list
josm-dev@openstreetmap.org
http://lists.openstreetmap.org/listinfo/josm-dev

Reply via email to