| 
									
										
										
										
											2008-05-07 18:42:41 -04:00
										 |  |  | ! Copyright (C) 2003, 2008 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2009-05-06 15:56:50 -04:00
										 |  |  | USING: kernel math memory io io.styles prettyprint | 
					
						
							| 
									
										
										
										
											2009-04-28 23:45:19 -04:00
										 |  |  | namespaces system sequences splitting grouping assocs strings | 
					
						
							|  |  |  | generic.single combinators ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | IN: tools.time | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-09 10:05:52 -04:00
										 |  |  | : benchmark ( quot -- runtime )
 | 
					
						
							| 
									
										
										
										
											2008-12-03 09:46:16 -05:00
										 |  |  |     micros [ call micros ] dip - ; inline
 | 
					
						
							| 
									
										
										
										
											2008-05-07 18:42:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-28 23:45:19 -04:00
										 |  |  | : time. ( time -- )
 | 
					
						
							| 
									
										
										
										
											2009-04-30 21:03:52 -04:00
										 |  |  |     "== Running time ==" print nl 1000000 /f pprint " seconds" print ;
 | 
					
						
							| 
									
										
										
										
											2009-04-28 23:45:19 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : gc-stats. ( stats -- )
 | 
					
						
							| 
									
										
										
										
											2009-04-24 10:44:29 -04:00
										 |  |  |     5 cut*
 | 
					
						
							| 
									
										
										
										
											2009-04-28 23:45:19 -04:00
										 |  |  |     "== Garbage collection ==" print nl
 | 
					
						
							| 
									
										
										
										
											2009-04-30 21:03:52 -04:00
										 |  |  |     "Times are in microseconds." print nl
 | 
					
						
							| 
									
										
										
										
											2008-05-08 00:09:18 -04:00
										 |  |  |     [ | 
					
						
							|  |  |  |         6 group | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             "GC count:" | 
					
						
							| 
									
										
										
										
											2009-04-30 21:03:52 -04:00
										 |  |  |             "Total GC time:" | 
					
						
							|  |  |  |             "Longest GC pause:" | 
					
						
							|  |  |  |             "Average GC pause:" | 
					
						
							| 
									
										
										
										
											2008-05-08 00:09:18 -04:00
										 |  |  |             "Objects copied:" | 
					
						
							|  |  |  |             "Bytes copied:" | 
					
						
							|  |  |  |         } prefix
 | 
					
						
							|  |  |  |         flip
 | 
					
						
							|  |  |  |         { "" "Nursery" "Aging" "Tenured" } prefix
 | 
					
						
							|  |  |  |         simple-table. | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         nl
 | 
					
						
							|  |  |  |         { | 
					
						
							| 
									
										
										
										
											2009-04-30 21:03:52 -04:00
										 |  |  |             "Total GC time:" | 
					
						
							| 
									
										
										
										
											2008-05-08 00:09:18 -04:00
										 |  |  |             "Cards scanned:" | 
					
						
							|  |  |  |             "Decks scanned:" | 
					
						
							| 
									
										
										
										
											2009-04-30 21:03:52 -04:00
										 |  |  |             "Card scan time:" | 
					
						
							| 
									
										
										
										
											2008-05-08 00:09:18 -04:00
										 |  |  |             "Code heap literal scans:" | 
					
						
							|  |  |  |         } swap zip simple-table. | 
					
						
							|  |  |  |     ] bi* ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-28 23:45:19 -04:00
										 |  |  | : dispatch-stats. ( stats -- )
 | 
					
						
							|  |  |  |     "== Megamorphic caches ==" print nl
 | 
					
						
							|  |  |  |     { "Hits" "Misses" } swap zip simple-table. ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : inline-cache-stats. ( stats -- )
 | 
					
						
							|  |  |  |     nl "== Polymorphic inline caches ==" print nl
 | 
					
						
							|  |  |  |     3 cut
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         "Transitions:" print
 | 
					
						
							|  |  |  |         { "Cold to monomorphic" "Mono to polymorphic" "Poly to megamorphic" } swap zip
 | 
					
						
							|  |  |  |         simple-table. nl
 | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         "Type check stubs:" print
 | 
					
						
							|  |  |  |         { "Tag only" "Hi-tag" "Tuple" "Hi-tag and tuple" } swap zip
 | 
					
						
							|  |  |  |         simple-table. | 
					
						
							|  |  |  |     ] bi* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | : time ( quot -- )
 | 
					
						
							| 
									
										
										
										
											2009-04-28 23:45:19 -04:00
										 |  |  |     gc-reset | 
					
						
							|  |  |  |     reset-dispatch-stats | 
					
						
							|  |  |  |     reset-inline-cache-stats | 
					
						
							|  |  |  |     benchmark gc-stats dispatch-stats inline-cache-stats | 
					
						
							|  |  |  |     H{ { table-gap { 20 20 } } } [ | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             [ [ time. ] 3dip ] with-cell | 
					
						
							|  |  |  |             [ ] with-cell | 
					
						
							|  |  |  |         ] with-row | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |             [ [ gc-stats. ] 2dip ] with-cell | 
					
						
							|  |  |  |             [ [ dispatch-stats. ] [ inline-cache-stats. ] bi* ] with-cell | 
					
						
							|  |  |  |         ] with-row | 
					
						
							|  |  |  |     ] tabular-output nl ; inline
 |