kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #30929
Re: [PATCH] GerbView GAL support
-
To:
Jon Evans <jon@xxxxxxxxxxxxx>, Seth Hillbrand <seth.hillbrand@xxxxxxxxx>, Maciej Sumiński <maciej.suminski@xxxxxxx>
-
From:
Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx>
-
Date:
Fri, 22 Sep 2017 15:09:36 +0200
-
Authentication-results:
spf=pass (sender IP is 188.184.36.50) smtp.mailfrom=cern.ch; lists.launchpad.net; dkim=none (message not signed) header.d=none;lists.launchpad.net; dmarc=bestguesspass action=none header.from=cern.ch;
-
Cc:
KiCad Developers <kicad-developers@xxxxxxxxxxxxxxxxxxx>
-
In-reply-to:
<CA+qGbCDPdxsghjLGXz1XUy7YvcPdAudS48eb56m=9COPX2OvUQ@mail.gmail.com>
-
Spamdiagnosticmetadata:
NSPM
-
Spamdiagnosticoutput:
1:99
-
User-agent:
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0
On 22.09.2017 04:04, Jon Evans wrote:
> Hi Orson,
>
> I have dug into Seth's report of slowness on this large Gerber file, and
> reproduced it.
> It looks like VIEW is struggling under the load of all the items, so
> this is a generic GAL problem, but Gerber files in general have many
> more draw items than PCB files, so we only notice it now.
>
> I have played around a bit with some profiling and optimizations, but
> have gotten stuck on one.
> It seems like RTREE::Remove is very costly, and so one optimization I
> tried is to skip the remove/add step in VIEW::updateLayers() if the
> layers are the same.
> This has some subtle problems that I don't understand, so maybe you can
> advise?
>
> 1) If I compile the code with the attached patch, GerbView is much
> faster (1 minute load time -> 5 seconds on Seth's file), but the message
> box info doesn't show up for selected items. In PcbNew, selected items
> are invisible.
> 2) If I comment out line 1262 ("if( !same )") to unconditionally run the
> insert, the message box and invisible items problems are solved, but the
> programs segfault after selecting a few items.
>
> I don't have a good understanding of the inner workings of the R-Tree or
> whether Remove could be optimized so that we wouldn't have to skip it,
> but I also don't understand why if updateLayers() is called and the
> layers of an item haven't changed, it seems like we still have to do the
> remove and insert loops to get proper behavior.
>
Hi Jon,
I once though about deferring item removal from the VIEW_RTREES:
- Add() causes immediate insertion into the three
- Remove() marks the item as incorrect and puts it in the removal queue,
but does not physically remove it from the rtree
- Add() can reuse one of the removed leaves (provided it has the same
bounding box)
- When the queue reaches certain threshold, we rebuild the entire tree
(in fact it's currently rebalanced after each remove operation, which is
quite similar in complexity to building a fresh tree from scratch).
Tom
>
> Thanks,
> -Jon
>
> On Thu, Sep 21, 2017 at 3:13 PM, Seth Hillbrand
> <seth.hillbrand@xxxxxxxxx <mailto:seth.hillbrand@xxxxxxxxx>> wrote:
>
> Hi Jon-
>
> Sorry, my wording was bad. This is not a merging show-stopper.
> Legacy use is unaffected.
>
> Best-
> Seth
>
> On Thu, Sep 21, 2017 at 11:55 AM, Jon Evans <jon@xxxxxxxxxxxxx
> <mailto:jon@xxxxxxxxxxxxx>> wrote:
>
> Hi Seth,
>
> Thanks for reporting and providing your example file. I will
> investigate this issue, but is this actually a show stopper for
> merging? Can't you just keep using legacy canvas?
>
> Thanks,
> Jon
>
> On Thu, Sep 21, 2017 at 2:47 PM, Seth Hillbrand
> <seth.hillbrand@xxxxxxxxx <mailto:seth.hillbrand@xxxxxxxxx>> wrote:
>
> -- Apologies if this message is a repeat. Looks like first
> attempt didn't go through --
>
> Hi Jon-
>
> This is really neat work! I especially like the selection
> highlighting.
>
> However, I do have a show-stopping (for me) issue. Loading
> a few of my projects takes a really long time. Using the
> legacy canvas, I can load the attached layer in about 2
> seconds on my relatively modest machine. When I use the
> OpenGL canvas, it takes almost a full minute. Same again
> when I zoom and scroll. There is no lag on the legacy
> canvas, but at least 2-3 seconds to zoom or scroll under OpenGL.
>
> I am running Linux, latest NVidia drivers on a GeForce 750 GTX.
>
> Best-
> Seth
>
> On Thu, Sep 21, 2017 at 3:05 AM, Maciej Sumiński wrote:
>
> Hi Jon,
>
> Thanks you, this is really cool! Now it is even more
> tempting to merge
> the gerbview_gal branch. I am going to wait one more day
> for vetos and
> tomorrow I will push it to the master branch.
>
> Regards,
> Orson
>
> On 09/20/2017 09:57 PM, Jon Evans wrote:
> > Hi Orson,
> >
> > Give this a shot in your branch. It should work in
> pcbnew also now.
> >
> > -Jon
> >
> > On Wed, Sep 20, 2017 at 9:28 AM, Jon Evans
> <jon@xxxxxxxxxxxxx <mailto:jon@xxxxxxxxxxxxx>> wrote:
> >
> >> Hi Orson,
> >>
> >> Thank you for staging this for merge on your branch.
> I checked and you do
> >> have all the patches.
> >>
> >> 1) Yes I planned on refactoring the selection tool
> once things stabilized
> >> with the highlighting etc.
> >> 2) Do you mean when you are highlighting Gerber X2
> attributes, or when you
> >> are deselecting things, or something else?
> >> 3) That's a good idea on VIEW_GROUP, I will give it a
> try and send a patch.
> >>
> >> Thanks,
> >> Jon
> >>
> >> On Wed, Sep 20, 2017 at 5:46 AM, Maciej Sumiński
> <maciej.suminski@xxxxxxx <mailto:maciej.suminski@xxxxxxx>>
> >> wrote:
> >>
> >>> Hi Jon,
> >>>
> >>> GALifying GerbView is a huge task, so thank you very
> much for your work!
> >>> I have just tested your changes and in my opinion it
> is in a state that
> >>> deserves merging and further tests. The new way of
> item highlighting is
> >>> awesome, we need to port it to pcbnew as well.
> >>>
> >>> For now I keep your patches in a separate branch,
> with some minor
> >>> modifications on top of it [1]. Please verify it
> contains all the needed
> >>> patches. If nobody objects, I would like to merge it
> this week.
> >>>
> >>> Just a few minor remarks:
> >>> - It seems there is some code that could be
> refactored to share it with
> >>> pcbnew (e.g. selection tool).
> >>> - 'Clear highlight' operation takes long time to
> finish (seems more than
> >>> with the legacy canvas), but I cannot really see
> what is happening
> >>> there. If it cannot be easily fixed, perhaps it
> could set the mouse
> >>> cursor to busy.
> >>> - For the new highlighting method: perhaps a more
> universal way is to
> >>> create a temporary VIEW_GROUP object containing the
> selection candidate.
> >>> This way it can be temporarily displayed on the
> overlay layer, without
> >>> modifying the original ViewGetLayer() methods.
> >>>
> >>> Regards,
> >>> Orson
> >>>
> >>> 1.
> https://code.launchpad.net/~orsonmmz/kicad/+git/kicad/+ref/
> <https://code.launchpad.net/~orsonmmz/kicad/+git/kicad/+ref/>
> >>> gerbview_gal
> >>>
> >>> On 09/18/2017 12:47 AM, Jon Evans wrote:
> >>>> Hi all,
> >>>>
> >>>> The day has finally come! I have distilled my
> GerbView GAL branch into
> >>> a
> >>>> patchset attached to this email. Hopefully with
> this merged into
> >>> master we
> >>>> can identify any remaining bugs and clean it up for
> 5.0.
> >>>>
> >>>> Note that this set is split into 5 patches to make
> review easier, but
> >>> they
> >>>> are not intended to compile and work independently.
> >>>>
> >>>> Best,
> >>>> Jon
> >>>>
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> Mailing list:
> https://launchpad.net/~kicad-developers
> <https://launchpad.net/~kicad-developers>
> >>>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
> >>>> Unsubscribe :
> https://launchpad.net/~kicad-developers
> <https://launchpad.net/~kicad-developers>
> >>>> More help : https://help.launchpad.net/ListHelp
> <https://help.launchpad.net/ListHelp>
> >>>>
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> Mailing list:
> https://launchpad.net/~kicad-developers
> <https://launchpad.net/~kicad-developers>
> >>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
> >>> Unsubscribe :
> https://launchpad.net/~kicad-developers
> <https://launchpad.net/~kicad-developers>
> >>> More help : https://help.launchpad.net/ListHelp
> <https://help.launchpad.net/ListHelp>
> >>>
> >>>
> >>
> >
>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> <https://launchpad.net/~kicad-developers>
> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
> Unsubscribe : https://launchpad.net/~kicad-developers
> <https://launchpad.net/~kicad-developers>
> More help : https://help.launchpad.net/ListHelp
> <https://help.launchpad.net/ListHelp>
>
>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> <https://launchpad.net/~kicad-developers>
> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
> Unsubscribe : https://launchpad.net/~kicad-developers
> <https://launchpad.net/~kicad-developers>
> More help : https://help.launchpad.net/ListHelp
> <https://help.launchpad.net/ListHelp>
>
>
>
>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help : https://help.launchpad.net/ListHelp
>
References