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
Björn Lindqvist 2015-10-15 18:34:49 +02:00
parent 1873eda1d2
commit 9af7be2ef9
3 changed files with 19 additions and 23 deletions

View File

@ -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

View File

@ -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

View File

@ -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 ;