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.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors arrays colors.constants dlists io
|
||||
io.streams.string kernel namespaces opengl sequences ui
|
||||
ui.baseline-alignment ui.gadgets ui.gadgets.buttons
|
||||
ui.gadgets.labels ui.gadgets.private ui.pens ui.render ui.text ;
|
||||
USING: accessors arrays colors.constants dlists io io.streams.string
|
||||
kernel namespaces opengl sequences ui ui.baseline-alignment ui.gadgets
|
||||
ui.gadgets.buttons ui.gadgets.labels ui.gadgets.private ui.pens
|
||||
ui.render ui.text vectors ;
|
||||
IN: ui.gadgets.debug
|
||||
|
||||
! 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 -- )
|
||||
[
|
||||
<dlist> \ graft-queue set
|
||||
<dlist> \ layout-queue set
|
||||
100 <vector> \ layout-queue set
|
||||
over
|
||||
graft notify-queued
|
||||
dip
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2005, 2010 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
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 ;
|
||||
IN: ui.gadgets
|
||||
|
||||
|
@ -143,10 +143,9 @@ CONSTANT: layout-queue-limit 8000
|
|||
|
||||
: layout-later ( gadget -- )
|
||||
layout-queue [
|
||||
[ push-back notify-ui-thread ] [ drop ] if*
|
||||
] [
|
||||
dlist-length layout-queue-limit > [ yield ] when
|
||||
] bi ;
|
||||
[ push notify-ui-thread ]
|
||||
[ length layout-queue-limit > [ yield ] when ] bi
|
||||
] [ drop ] if* ;
|
||||
|
||||
: invalidate* ( gadget -- )
|
||||
\ invalidate* >>layout-state
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
USING: accessors arrays assocs boxes classes.tuple
|
||||
classes.tuple.parser combinators combinators.short-circuit
|
||||
concurrency.flags concurrency.promises continuations deques
|
||||
destructors dlists fry init kernel lexer make math namespaces
|
||||
parser sequences sets strings threads ui.backend ui.gadgets
|
||||
ui.gadgets.private ui.gadgets.worlds ui.gestures vocabs.parser
|
||||
destructors dlists fry init kernel lexer make math namespaces parser
|
||||
sequences sets strings threads ui.backend ui.gadgets
|
||||
ui.gadgets.private ui.gadgets.worlds ui.gestures vectors vocabs.parser
|
||||
words ;
|
||||
IN: ui
|
||||
|
||||
|
@ -105,7 +105,7 @@ M: world ungraft*
|
|||
f hand-world set-global
|
||||
f world set-global
|
||||
<dlist> \ graft-queue set-global
|
||||
<dlist> \ layout-queue set-global
|
||||
100 <vector> \ layout-queue set-global
|
||||
<dlist> \ gesture-queue set-global
|
||||
V{ } clone ui-windows set-global ;
|
||||
|
||||
|
@ -113,17 +113,14 @@ M: world ungraft*
|
|||
dup hand-world get-global eq?
|
||||
[ hand-loc get-global swap move-hand ] [ drop ] if ;
|
||||
|
||||
: (layout-queued) ( deque -- seq )
|
||||
[
|
||||
in-layout? on
|
||||
[
|
||||
dup layout find-world [ , ] when*
|
||||
] slurp-deque
|
||||
] { } make members ; inline
|
||||
: slurp-vector ( .. seq quot: ( ... elt -- .. ) -- )
|
||||
over '[ _ empty? not ] -rot '[ _ pop @ ] while ; inline
|
||||
|
||||
: layout-queued ( -- seq )
|
||||
layout-queue dup deque-empty?
|
||||
[ drop { } ] [ (layout-queued) ] if ;
|
||||
layout-queue [
|
||||
in-layout? on
|
||||
[ dup layout find-world [ , ] when* ] slurp-vector
|
||||
] { } make members ;
|
||||
|
||||
: redraw-worlds ( seq -- )
|
||||
[ dup update-hand draw-world ] each ;
|
||||
|
|
Loading…
Reference in New Issue