1 ! Copyright (C) 2007, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors words sequences math prettyprint kernel arrays
4 io io.styles namespaces assocs kernel.private strings
5 combinators sorting math.parser vocabs definitions
6 tools.counting-profiler.private tools.crossref continuations generic
7 compiler.units compiler.crossref sets classes fry ;
8 FROM: sets => members ;
9 IN: tools.counting-profiler
12 [ t profiling call ] [ f profiling ] [ ] cleanup ; inline
14 : filter-counts ( alist -- alist' )
15 [ second 0 > ] filter ;
17 : map-counters ( obj quot -- alist )
18 { } map>assoc filter-counts ; inline
20 : counters ( words -- alist )
21 [ dup counter>> ] map-counters ;
23 : cumulative-counters ( obj quot -- alist )
24 '[ dup @ [ counter>> ] map-sum ] map-counters ; inline
26 : vocab-counters ( -- alist )
27 vocabs [ words [ predicate? not ] filter ] cumulative-counters ;
29 : generic-counters ( -- alist )
30 all-words [ subwords ] cumulative-counters ;
32 : methods-on ( class -- methods )
33 dup implementors [ lookup-method ] with map ;
35 : class-counters ( -- alist )
36 classes [ methods-on ] cumulative-counters ;
38 : method-counters ( -- alist )
39 all-words [ subwords ] map concat counters ;
41 : profiler-usage ( word -- words )
42 [ smart-usage [ word? ] filter ]
43 [ generic-call-sites-of keys ]
44 [ effect-dependencies-of keys ]
47 : usage-counters ( word -- alist )
48 profiler-usage counters ;
50 : counters. ( assoc -- )
51 sort-values simple-table. ;
54 "Call counts for all words:" print
55 all-words counters counters. ;
57 : vocab-profile. ( vocab -- )
58 "Call counts for words in the " write
59 dup dup lookup-vocab write-object
61 words counters counters. ;
63 : usage-profile. ( word -- )
64 "Call counts for words which call " write
67 usage-counters counters. ;
69 : vocabs-profile. ( -- )
70 "Call counts for all vocabularies:" print
71 vocab-counters counters. ;
73 : generic-profile. ( -- )
74 "Call counts for methods on generic words:" print
75 generic-counters counters. ;
77 : class-profile. ( -- )
78 "Call counts for methods on classes:" print
79 class-counters counters. ;
81 : method-profile. ( -- )
82 "Call counts for all methods:" print
83 method-counters counters. ;