ui: the layout-queue is more efficient as a vector than a dlist
Improves memory usage in the #1488 example from about 20,4% to 17,4% on my machine.db4
parent
1873eda1d2
commit
9af7be2ef9
|
@ -1,9 +1,9 @@
|
||||||
! Copyright (C) 2008, 2009 Slava Pestov.
|
! Copyright (C) 2008, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors arrays colors.constants dlists io
|
USING: accessors arrays colors.constants dlists io io.streams.string
|
||||||
io.streams.string kernel namespaces opengl sequences ui
|
kernel namespaces opengl sequences ui ui.baseline-alignment ui.gadgets
|
||||||
ui.baseline-alignment ui.gadgets ui.gadgets.buttons
|
ui.gadgets.buttons ui.gadgets.labels ui.gadgets.private ui.pens
|
||||||
ui.gadgets.labels ui.gadgets.private ui.pens ui.render ui.text ;
|
ui.render ui.text vectors ;
|
||||||
IN: ui.gadgets.debug
|
IN: ui.gadgets.debug
|
||||||
|
|
||||||
! We can't print to output-stream here because that might be a pane
|
! We can't print to output-stream here because that might be a pane
|
||||||
|
@ -12,7 +12,7 @@ IN: ui.gadgets.debug
|
||||||
: with-grafted-gadget ( gadget quot -- )
|
: with-grafted-gadget ( gadget quot -- )
|
||||||
[
|
[
|
||||||
<dlist> \ graft-queue set
|
<dlist> \ graft-queue set
|
||||||
<dlist> \ layout-queue set
|
100 <vector> \ layout-queue set
|
||||||
over
|
over
|
||||||
graft notify-queued
|
graft notify-queued
|
||||||
dip
|
dip
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2005, 2010 Slava Pestov.
|
! Copyright (C) 2005, 2010 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors arrays binary-search combinators concurrency.flags
|
USING: accessors arrays binary-search combinators concurrency.flags
|
||||||
deques dlists fry kernel locals make math math.order math.rectangles
|
deques fry kernel locals make math math.order math.rectangles
|
||||||
math.vectors models namespaces sequences threads vectors ;
|
math.vectors models namespaces sequences threads vectors ;
|
||||||
IN: ui.gadgets
|
IN: ui.gadgets
|
||||||
|
|
||||||
|
@ -143,10 +143,9 @@ CONSTANT: layout-queue-limit 8000
|
||||||
|
|
||||||
: layout-later ( gadget -- )
|
: layout-later ( gadget -- )
|
||||||
layout-queue [
|
layout-queue [
|
||||||
[ push-back notify-ui-thread ] [ drop ] if*
|
[ push notify-ui-thread ]
|
||||||
] [
|
[ length layout-queue-limit > [ yield ] when ] bi
|
||||||
dlist-length layout-queue-limit > [ yield ] when
|
] [ drop ] if* ;
|
||||||
] bi ;
|
|
||||||
|
|
||||||
: invalidate* ( gadget -- )
|
: invalidate* ( gadget -- )
|
||||||
\ invalidate* >>layout-state
|
\ invalidate* >>layout-state
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
USING: accessors arrays assocs boxes classes.tuple
|
USING: accessors arrays assocs boxes classes.tuple
|
||||||
classes.tuple.parser combinators combinators.short-circuit
|
classes.tuple.parser combinators combinators.short-circuit
|
||||||
concurrency.flags concurrency.promises continuations deques
|
concurrency.flags concurrency.promises continuations deques
|
||||||
destructors dlists fry init kernel lexer make math namespaces
|
destructors dlists fry init kernel lexer make math namespaces parser
|
||||||
parser sequences sets strings threads ui.backend ui.gadgets
|
sequences sets strings threads ui.backend ui.gadgets
|
||||||
ui.gadgets.private ui.gadgets.worlds ui.gestures vocabs.parser
|
ui.gadgets.private ui.gadgets.worlds ui.gestures vectors vocabs.parser
|
||||||
words ;
|
words ;
|
||||||
IN: ui
|
IN: ui
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ M: world ungraft*
|
||||||
f hand-world set-global
|
f hand-world set-global
|
||||||
f world set-global
|
f world set-global
|
||||||
<dlist> \ graft-queue set-global
|
<dlist> \ graft-queue set-global
|
||||||
<dlist> \ layout-queue set-global
|
100 <vector> \ layout-queue set-global
|
||||||
<dlist> \ gesture-queue set-global
|
<dlist> \ gesture-queue set-global
|
||||||
V{ } clone ui-windows set-global ;
|
V{ } clone ui-windows set-global ;
|
||||||
|
|
||||||
|
@ -113,17 +113,14 @@ M: world ungraft*
|
||||||
dup hand-world get-global eq?
|
dup hand-world get-global eq?
|
||||||
[ hand-loc get-global swap move-hand ] [ drop ] if ;
|
[ hand-loc get-global swap move-hand ] [ drop ] if ;
|
||||||
|
|
||||||
: (layout-queued) ( deque -- seq )
|
: slurp-vector ( .. seq quot: ( ... elt -- .. ) -- )
|
||||||
[
|
over '[ _ empty? not ] -rot '[ _ pop @ ] while ; inline
|
||||||
in-layout? on
|
|
||||||
[
|
|
||||||
dup layout find-world [ , ] when*
|
|
||||||
] slurp-deque
|
|
||||||
] { } make members ; inline
|
|
||||||
|
|
||||||
: layout-queued ( -- seq )
|
: layout-queued ( -- seq )
|
||||||
layout-queue dup deque-empty?
|
layout-queue [
|
||||||
[ drop { } ] [ (layout-queued) ] if ;
|
in-layout? on
|
||||||
|
[ dup layout find-world [ , ] when* ] slurp-vector
|
||||||
|
] { } make members ;
|
||||||
|
|
||||||
: redraw-worlds ( seq -- )
|
: redraw-worlds ( seq -- )
|
||||||
[ dup update-hand draw-world ] each ;
|
[ dup update-hand draw-world ] each ;
|
||||||
|
|
Loading…
Reference in New Issue