Lisp HUG Maillist Archive

CAPI: tab-layout / switchable-layout switching speed

I'm working on a data-entry application which has a layout of moderate 
complexity.  I've been trying to track down an issue with 
slower-than-expected switching speeds in tab- and switchable- layouts 
which occurs on LWF6 (motif) and LWW6 (and LWF51).

The current scheme involves a tab-layout (switchable mode) with each 
visible child being an interface containing a switchable-layout.  The 
switchable layouts have scrolling disabled; the children they display 
are simple-layouts with scrolling enabled.

Switching between switchable-layout children can be slow (1-4s).  With 
:combine-child-constraints t, switching between any two tabs can also be 
slow (1-10s).

I profiled the case of switching between the same two switchable-layout 
children within a particular tab (increasing the total number of 
elements each time).  The call counts for capi:map-pane-children and 
capi::set-element-parent were very high (results for LWW shown; 
:combine-child-constraints t passed to tab-layout and all 
switchable-layouts):

1539 TOTAL ELEMENTS (0 grids added):

Cumulative profile summary
Symbol                            called  profile   (%)      top   (%)
(METHOD
  CAPI:MAP-PANE-CHILDREN
  (CAPI:LAYOUT T))                  54489      263 ( 26)        3 (  0)
CAPI:EXECUTE-WITH-INTERFACE            8      138 ( 14)        0 (  0)
(METHOD
  CAPI::SET-ELEMENT-PARENT
  (CAPI::BASIC-ELEMENT T))         171306      134 ( 13)        0 (  0)

1569 TOTAL ELEMENTS (1 grid added):

Cumulative profile summary
Symbol                            called  profile   (%)      top   (%)
(METHOD
  CAPI:MAP-PANE-CHILDREN
  (CAPI:LAYOUT T))                 168225      735 ( 74)       12 (  1)
(METHOD
  CAPI::SET-ELEMENT-PARENT
  (CAPI::BASIC-ELEMENT T))         769834      356 ( 36)        5 (  0)
CAPI:EXECUTE-WITH-INTERFACE            7      225 ( 22)        0 (  0)

1839 TOTAL ELEMENTS (10 grids added):

Cumulative profile summary
Symbol                            called  profile   (%)      top   (%)
(METHOD
  CAPI:MAP-PANE-CHILDREN
  (CAPI:LAYOUT T))                1191849     6074 (607)      109 ( 11)
(METHOD
  CAPI::SET-ELEMENT-PARENT
  (CAPI::BASIC-ELEMENT T))        6156586     3013 (301)       28 (  3)
CAPI:EXECUTE-WITH-INTERFACE            7     1398 (140)        0 (  0)


"Total elements" means the result of the following form:

  (let ((count 0))
    (capi:map-pane-descendant-children
     *the-toplevel-interface*
     (lambda (c) (incf count)))
    count)

"Adding grids" consisted of clicking a button inside one of the 
displayed switchable-layout children (same one each time).  The 
selection-callback of the button adds an instance of a grid-layout 
subclass containing 29 built-in CAPI items and invalidates the pane 
constraints of each parent above it (up to the switchable-layout child 
which is the ancestor of the button).

The profiled activity consisted of switching once (back and forth a 
single time) between two switchable children of a switchable layout (via 
mouse-click).

Profiling was configured as follows:

  (progn
      (hcl:set-up-profiler :packages :all
                           :style :list
                           :call-counter t)
      (hcl:do-profiling :processes (slot-value *the-toplevel-interface*
                                               'capi::process)
                        :sleep 10))


Has anyone experienced similar slow switching behavior and/or similar 
exponential blowup behavior?

I assume I've overlooked a pitfall which would be obvious to someone 
better versed in CAPI.  I would appreciate any and all advice anyone 
might have on this matter.


Thanks in advance,


Mike Watters


Re: CAPI: tab-layout / switchable-layout switching speed

Unable to parse email body. Email id is 9882

Updated at: 2020-12-10 08:39 UTC