In article <517fe428.8070...@lyx.org>, Jean-Marc Lasgouttes <lasgout...@lyx.org> wrote:
> Le 28/04/2013 13:06, pdv a écrit : > > OK, here is a new version. Let me know if you experience anymore > > problems. > > For the time being I've left the clean-up step of the map as it was, > > although I realize it's of limited value; when entering the same word > > multiple times, the partial words get included anyway; > > For now I only tried performance, and did not notice any problem. With > the attached patch I get the following numbers. > > The profiler only computes the time needed to recomputes the metrics. I > do not know what other parts should be intrumented, probably around > rowpainter. > > Experiment is to load the user's guide, go to top and press PageDown 40 > times. The numbers are in milliseconds, 3 runs for each case. > > My numbers are quite noisy actually, but it seems that the cost of > calculate_qt_char_width is non-negligible. OTOH, I do not understand why > calculate_qt_char_widths=0 does not give the same numbers as master? > Didn't you say that it should be equivalent? There are 2 occurences of calculate_qt_char_width, in TextMetrics and in RowPainter. and there is at least one change which is not enclosed by these conditionals: In TextMetrics I changed rowBreakPoint() to return the breakpoint as well as the width, so that the subsequent call to rowWidth() is not needed anymore. I'm still many revisions behind master; I'll catch-up and see what I obtain with pmprof. I've done some timing with Instruments and a testdocument; with calculate_qt_char_width=0 GuiPainter::text takes 17.4s with calculate_qt_char_width=1 GuiPainter::text takes 4.5s the time taken by TextMetrics::textMetrics is then 137ms Was this scrolling problem not an "OS X" issue? > > JMarc > > > Your patch with #define calculate_qt_char_widths 1 > > #pmprof# metrics: 4.43msec, count=49, total=216.90msec > > #pmprof# metrics: 4.23msec, count=49, total=207.36msec > > #pmprof# metrics: 4.49msec, count=49, total=219.83msec > > > Your patch with #define calculate_qt_char_widths 0 > > #pmprof# metrics: 3.05msec, count=49, total=149.61msec > > #pmprof# metrics: 2.81msec, count=50, total=140.57msec > > #pmprof# metrics: 2.74msec, count=50, total=136.93msec > > > Current master: > > #pmprof# metrics: 3.18msec, count=50, total=158.78msec > > #pmprof# metrics: 3.95msec, count=50, total=197.63msec > > #pmprof# metrics: 3.97msec, count=50, total=198.61msec > > > --------------------------------------------------------------------- > diff --git a/src/BufferView.cpp b/src/BufferView.cpp > index 10b5263..4af1b14 100644 > --- a/src/BufferView.cpp > +++ b/src/BufferView.cpp > @@ -78,6 +78,7 @@ > #include "support/lstrings.h" > #include "support/Package.h" > #include "support/types.h" > +#include "support/pmprof.h" > > #include <cerrno> > #include <fstream> > @@ -2574,6 +2575,7 @@ bool BufferView::singleParUpdate() > > void BufferView::updateMetrics() > { > + PROFILE_THIS_BLOCK(metrics); > if (height_ == 0 || width_ == 0) > return; >