[mcclim-devel] performance of incremental redisplay

Robert Strandh strandh at labri.fr
Thu Jan 4 06:57:29 UTC 2007


Andy Hefner writes:
 > 
 > To clarify, I imagined setting the coordinates slot of the bounding
 > rectangle to nil as a signal that the bounding rectangle needs to be
 > recomputed. Recompute-extent-for-changed-child can set the slot to nil
 > rather than immediately recomputing the bounding rectangle, and
 > bounding-rectangle* checks for the nil case and can call
 > tree-recompute-extent itself, saving the value in the slot (until the
 > next change that invalidates it). That way the bounding rectangle is
 > only computed when it is needed, and moving/deleting a number of
 > records does not cause it to be recomputed each time only to be
 > discarded.

This sounds like a good idea, and easy to implement.

 > > The second type of application is more likely to move or delete output
 > > records, that makes it necessary to go through all output records to
 > > determine the bounding rectangle.  For this type of application it
 > > would just be easier to compute the bounding rectangle at the end of
 > > the command loop.
 > 
 > Can you elaborate on when and for what records recomputing of bounding
 > rectangles would be supressed? Formatting utilities such as
 > surrounding-output-with-border and the table formatter require correct
 > bounding rectangles for their contained output, the process of
 > producing which may at some point require a call to
 > tree-recompute-extent. Restricting this to the topmost
 > (stream-output-history) record would be safer and sufficient for some
 > applications, but others may encounter the same problems deeper in the
 > output tree.

I haven't thought this through completely, but it seems to me that
even table formatting only needs to be computed right before the
output is to be replayed.  What I am suggesting is to suppress  all
such computations and just go through the entire tree once, right
before replay.  Doing that would have to invoke the table-formatting
code, of course.  But again, I don't know for sure that it will work.  

-- 
Robert Strandh

---------------------------------------------------------------------
Greenspun's Tenth Rule of Programming: any sufficiently complicated C
or Fortran program contains an ad hoc informally-specified bug-ridden
slow implementation of half of Common Lisp.
---------------------------------------------------------------------



More information about the mcclim-devel mailing list