[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Incremental Redisplay
Date: Thu, 26 Jan 89 11:59:00 EST
From: owens-christopher@YALE.ARPA (Christopher Owens)
I am getting some unexpected processing overhead when using
incremental redisplay of a pane within a program framework defined by
dw:define-program-framework.
This particular pane is designed to display a list of objects,
presented one per line. When I defined the pane, I used options
:redisplay-after-commands T
:incremental-redisplay T
:redisplay-function 'foo-display
(defmethod (foo-display my-program) (stream)
(dw:with-redisplayable-output
(:stream stream
:cache-value *list*
:unique-id 'list)
(formatting-table (stream)
(dolist (thing *list*)
(formatting-row (stream)
(formatting-cell (stream)
(dw:with-redisplayable-output (:cache-value thing)
(dw:redisplayable-present thing 'thing-presentation
stream))))))))
Does *LIST* remain EQ between commands, or EQUAL? You might try a
:CACHE-TEST of EQUAL.
Also, the DW:REDISPLAYABLE-PRESENT inside the
DW:WITH-REDISPLAYABLE-OUTPUT is probably not needed.
This has the right behavior in that if *list* changes the display
updates, and if *list* does not change, the display does not update.
But, in the cases where *list* does not change, the code runs almost
as long as it does when *list* does change. I do not understand this,
since I was under the impression that the outermost
dw:with-redisplayable-output form prevents any code inside it from
executing when the cache-value has not changed. I find that if I
recompile the program frame, shutting off the redisplay-after-commands
option, the code runs nice and fast.
So what am I doing? Do I not understand something correctly here?
Thank you,
/c