22
33use nano;
44
5+ use Terminal::Widgets::Common;
56use Terminal::Widgets::Layout;
67use Terminal::Widgets::Events;
78use Terminal::Widgets::TextContent;
@@ -36,7 +37,7 @@ my class DisplayLeaf does DisplayNode {
3637 method branch-size (--> 1 ) { }
3738}
3839
39- my class DisplayParent does DisplayNode {
40+ my class DisplayParent does DisplayNode does Terminal::Widgets::Common {
4041 has Terminal::Widgets::Viewer::Tree: D $ . tree is required ;
4142
4243 has DisplayNode: D @ . children ;
@@ -67,6 +68,9 @@ my class DisplayParent does DisplayNode {
6768
6869 # | Set expanded state, refreshing or emptying children as appropriate
6970 method set-expanded ($ ! expanded ) {
71+ note " ⚙️ Starting set-expanded to $ ! expanded for dir { $ ! data . short-name. raku} " if $ ! debug ;
72+ my $ t0 = nano;
73+
7074 my $ id = $ ! data . id;
7175 if $ ! expanded {
7276 $ ! tree . previously-expanded{$ id } = True if $ id ;
@@ -76,6 +80,8 @@ my class DisplayParent does DisplayNode {
7680 $ ! tree . previously-expanded{$ id }: delete if $ id ;
7781 @ ! children = Empty;
7882 }
83+
84+ self . debug-elapsed($ t0 , desc => " set-expanded to $ ! expanded for dir { $ ! data . short-name. raku} " );
7985 }
8086
8187 # | Number of nodes in visible child branches, including self
@@ -117,21 +123,25 @@ class Terminal::Widgets::Viewer::Tree
117123 method set-sort-by (& ! sort-by ) { self . clear-caches }
118124
119125 # Auto-cache flattened nodes and displayable lines
126+ my sub cache-size (@ c ) {
127+ my $ count = @ c . elems ;
128+ $ count ~ ' elem' ~ ($ count == 1 ?? ' ' !! ' s' )
129+ }
120130 method flat-node-cache () {
121131 @ ! flat-node-cache ||= do {
122132 my $ t0 = nano;
123133 self . flattened-nodes($ ! display-root , my @ n );
124- note sprintf ( " 💲 Refill flattened-nodes: %.3fms ( % d elems) " ,
125- (nano - $ t0 ) / 1_000_000 , @ n . elems ) if $ . debug ;
134+ self . debug-elapsed( $ t0 , icon => ' 💲 ' ,
135+ desc => " Refill flat-node-cache ( { cache-size @ n } ) " ) ;
126136 @ n
127137 }
128138 }
129139 method flat-line-cache () {
130140 @ ! flat-line-cache ||= do {
131141 my $ t0 = nano;
132142 self . node-lines($ ! display-root , my @ l );
133- note sprintf ( " 💲 Refill node-lines: %.3fms ( % d elems) " ,
134- (nano - $ t0 ) / 1_000_000 , @ l . elems ) if $ . debug ;
143+ self . debug-elapsed( $ t0 , icon => ' 💲 ' ,
144+ desc => " Refill flat-line-cache ( { cache-size @ l } ) " ) ;
135145 @ l
136146 }
137147 }
@@ -156,8 +166,8 @@ class Terminal::Widgets::Viewer::Tree
156166 + duospace-width-core(. [1 ]. text, 0 )
157167 }). max ;
158168
159- note sprintf ( " 💲 Recalculate max-line-width: %.3fms ( % d elems) " ,
160- (nano - $ t0 ) / 1_000_000 , @ ! flat-line-cache . elems ) if $ . debug ;
169+ self . debug-elapsed( $ t0 , icon => ' 💲 ' ,
170+ desc => " Recalc max-line-width ( { cache-size @ ! flat-line-cache } ) " ) ;
161171 $ max
162172 }
163173 }
@@ -234,11 +244,13 @@ class Terminal::Widgets::Viewer::Tree
234244
235245 # | Convert a displayed line index to the matching DisplayNode
236246 method line-to-display-node (UInt : D $ line ) {
247+ note ' … line-to-display-node' ;
237248 self . flat-node-cache[$ line ]
238249 }
239250
240251 # | Determine the displayed line index of a given DisplayNode
241252 method display-node-to-line ($ node ) {
253+ note ' … display-node-to-line' ;
242254 self . flat-node-cache. first (* === $ node , : k)
243255 }
244256
@@ -268,6 +280,7 @@ class Terminal::Widgets::Viewer::Tree
268280 # | Select a given node as current, expanding parents if needed and
269281 # | processing a "click" on the node
270282 method select-node ($ node , Bool : D : $ refresh = True ) {
283+ note ' … select-node' ;
271284 if $ ! current-node ! === $ node {
272285 self . remove-highlight($ ! current-node );
273286 $ ! current-node = $ node ;
@@ -313,8 +326,7 @@ class Terminal::Widgets::Viewer::Tree
313326 self . fix-scroll-maxes;
314327 self . refresh-for-scroll(: force);
315328
316- note sprintf (" ⏱️ Refresh for expand change of { self . gist-name} : %.3fms" ,
317- (nano - $ t0 ) / 1_000_000 ) if $ . debug ;
329+ self . debug-elapsed($ t0 );
318330 }
319331
320332 # | Walk up the parents from a given DisplayNode, making sure they are
0 commit comments