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.
! 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

View File

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

View File

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