88 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Factor
		
	
	
| ! Copyright (C) 2005, 2008 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
 | |
| system sorting splitting grouping math.parser classes memory
 | |
| combinators fry ;
 | |
| IN: tools.memory
 | |
| 
 | |
| <PRIVATE
 | |
| 
 | |
| : write-size ( n -- )
 | |
|     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 ;
 | |
| 
 | |
| : heap-stat-step ( obj counts sizes -- )
 | |
|     [ [ class ] dip inc-at ]
 | |
|     [ [ [ size ] [ class ] bi ] dip at+ ] bi-curry* bi ;
 | |
| 
 | |
| 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 ;
 | |
| 
 | |
| : heap-stats ( -- counts sizes )
 | |
|     [ ] instances H{ } clone H{ } clone
 | |
|     [ '[ _ _ heap-stat-step ] each ] 2keep ;
 | |
| 
 | |
| : heap-stats. ( -- )
 | |
|     heap-stats dup keys natural-sort standard-table-style [
 | |
|         { "Class" "Bytes" "Instances" } write-headings
 | |
|         [
 | |
|             [
 | |
|                 dup pprint-cell
 | |
|                 dup pick at pprint-cell
 | |
|                 pick at pprint-cell
 | |
|             ] with-row
 | |
|         ] each 2drop
 | |
|     ] tabular-output nl ;
 |