]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: room. now prints mark stack size, and total/contiguous free space
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sun, 25 Oct 2009 18:18:06 +0000 (13:18 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sun, 25 Oct 2009 18:18:06 +0000 (13:18 -0500)
basis/stack-checker/known-words/known-words.factor
basis/tools/memory/memory.factor
vm/code_heap.cpp
vm/data_heap.cpp

index 8cddac5a752e52e8871da9048d071a166811d325..d064776673b51e586b7c78520bd8010d42194cad 100644 (file)
@@ -507,10 +507,10 @@ M: bad-executable summary
 
 \ (save-image-and-exit) { byte-array } { } define-primitive
 
-\ data-room { } { integer integer array } define-primitive
+\ data-room { } { array } define-primitive
 \ data-room make-flushable
 
-\ code-room { } { integer integer integer integer } define-primitive
+\ code-room { } { array } define-primitive
 \ code-room  make-flushable
 
 \ micros { } { integer } define-primitive
index 81785f7ea47875d8a684b13b0893079d278e8ce1..2f1827a8ff868dac959a74bdf9ce7b498f314ce0 100644 (file)
@@ -1,4 +1,4 @@
-! Copyright (C) 2005, 2008 Slava Pestov.
+! Copyright (C) 2005, 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel sequences arrays generic assocs io math
 namespaces parser prettyprint strings io.styles words
@@ -8,48 +8,41 @@ IN: tools.memory
 
 <PRIVATE
 
-: write-size ( n -- )
+: kilobytes ( n -- str )
     number>string
     dup length 4 > [ 3 cut* "," glue ] when
-    " KB" append write-cell ;
-
-: write-total/used/free ( free total str -- )
-    [
-        write-cell
-        dup write-size
-        over - write-size
-        write-size
-    ] with-row ;
-
-: write-total ( n str -- )
-    [
-        write-cell
-        write-size
-        [ ] with-cell
-        [ ] with-cell
-    ] with-row ;
-
-: write-headings ( seq -- )
-    [ [ write-cell ] each ] with-row ;
-
-: (data-room.) ( -- )
-    data-room 2 <groups> [
-        [ first2 ] [ number>string "Generation " prepend ] bi*
-        write-total/used/free
-    ] each-index
-    "Decks" write-total
-    "Cards" write-total ;
-
-: write-labeled-size ( n string -- )
-    [ write-cell write-size ] with-row ;
-
-: (code-room.) ( -- )
-    code-room {
-        [ "Size:" write-labeled-size ]
-        [ "Used:" write-labeled-size ]
-        [ "Total free space:" write-labeled-size ]
-        [ "Largest free block:" write-labeled-size ]
-    } spread ;
+    " KB" append ;
+
+: memory-table. ( sizes seq -- )
+    swap [ kilobytes ] map zip simple-table. ;
+
+: young-room. ( seq -- )
+    { "Total:" "Allocated:" "Free:" } memory-table. ;
+
+: nursery-room. ( seq -- ) "- Nursery space" print young-room. ;
+
+: aging-room. ( seq -- ) "- Aging space" print young-room. ;
+
+: mark-sweep-table. ( sizes -- )
+    { "Total:" "Allocated:" "Contiguous free:" "Total free:" } memory-table. ;
+
+: tenured-room. ( seq -- ) "- Tenured space" print mark-sweep-table. ;
+
+: misc-room. ( seq -- )
+    "- Miscellaneous buffers" print
+    { "Card array:" "Deck array:" "Mark stack:" } memory-table. ;
+
+: data-room. ( -- )
+    "==== DATA HEAP" print nl
+    data-room
+    3 cut [ nursery-room. nl ] dip
+    3 cut [ aging-room. nl ] dip
+    4 cut [ tenured-room. nl ] dip
+    misc-room. ;
+
+: code-room. ( -- )
+    "==== CODE HEAP" print nl
+    code-room mark-sweep-table. ;
 
 : heap-stat-step ( obj counts sizes -- )
     [ [ class ] dip inc-at ]
@@ -57,18 +50,7 @@ IN: tools.memory
 
 PRIVATE>
 
-: room. ( -- )
-    "==== DATA HEAP" print
-    standard-table-style [
-        { "" "Total" "Used" "Free" } write-headings
-        (data-room.)
-    ] tabular-output
-    nl nl
-    "==== CODE HEAP" print
-    standard-table-style [
-        (code-room.)
-    ] tabular-output
-    nl ;
+: room. ( -- ) data-room. nl code-room. ;
 
 : heap-stats ( -- counts sizes )
     [ ] instances H{ } clone H{ } clone
@@ -76,7 +58,7 @@ PRIVATE>
 
 : heap-stats. ( -- )
     heap-stats dup keys natural-sort standard-table-style [
-        { "Class" "Bytes" "Instances" } write-headings
+        [ { "Class" "Bytes" "Instances" } [ write-cell ] each ] with-row
         [
             [
                 dup pprint-cell
index 2ce6d00b7ce7f97b5e5091398b2aba8dc21b66bb..ae53869ef202661f927e89140a05bbe26027b7a9 100755 (executable)
@@ -197,12 +197,18 @@ void factor_vm::primitive_modify_code_heap()
 /* Push the free space and total size of the code heap */
 void factor_vm::primitive_code_room()
 {
+       growable_array a(this);
+
        cell used, total_free, max_free;
        code->allocator->usage(&used,&total_free,&max_free);
-       dpush(tag_fixnum(code->seg->size / 1024));
-       dpush(tag_fixnum(used / 1024));
-       dpush(tag_fixnum(total_free / 1024));
-       dpush(tag_fixnum(max_free / 1024));
+
+       a.add(tag_fixnum(code->seg->size >> 10));
+       a.add(tag_fixnum(used >> 10));
+       a.add(tag_fixnum(total_free >> 10));
+       a.add(tag_fixnum(max_free >> 10));
+
+       a.trim();
+       dpush(a.elements.value());
 }
 
 struct stack_trace_stripper {
index 57f6608e6b93d52126f269d690b7bb0004bf55d4..3dd46fd848ba4729f6583e4ed68a776ae51c3590 100755 (executable)
@@ -204,22 +204,26 @@ void factor_vm::primitive_size()
 /* Push memory usage statistics in data heap */
 void factor_vm::primitive_data_room()
 {
-       dpush(tag_fixnum((data->cards_end - data->cards) >> 10));
-       dpush(tag_fixnum((data->decks_end - data->decks) >> 10));
-
        growable_array a(this);
 
-       a.add(tag_fixnum((nursery.end - nursery.here) >> 10));
        a.add(tag_fixnum((nursery.size) >> 10));
+       a.add(tag_fixnum((nursery.here - nursery.start) >> 10));
+       a.add(tag_fixnum((nursery.end - nursery.here) >> 10));
 
-       a.add(tag_fixnum((data->aging->end - data->aging->here) >> 10));
        a.add(tag_fixnum((data->aging->size) >> 10));
+       a.add(tag_fixnum((data->aging->here - data->aging->start) >> 10));
+       a.add(tag_fixnum((data->aging->end - data->aging->here) >> 10));
 
-       //XXX
        cell used, total_free, max_free;
        data->tenured->usage(&used,&total_free,&max_free);
-       a.add(tag_fixnum(total_free >> 10));
        a.add(tag_fixnum(data->tenured->size >> 10));
+       a.add(tag_fixnum(used >> 10));
+       a.add(tag_fixnum(total_free >> 10));
+       a.add(tag_fixnum(max_free >> 10));
+
+       a.add(tag_fixnum((data->cards_end - data->cards) >> 10));
+       a.add(tag_fixnum((data->decks_end - data->decks) >> 10));
+       a.add(tag_fixnum((data->tenured->mark_stack.capacity()) >> 10));
 
        a.trim();
        dpush(a.elements.value());