|
1 "{ Package: 'stx:goodies/petitparser/compiler' }" |
|
2 |
|
3 PPCContext subclass:#PPCProfilingContext |
|
4 instanceVariableNames:'invocations remembers restores lwRemembers lwRestores totalSize' |
|
5 classVariableNames:'' |
|
6 poolDictionaries:'' |
|
7 category:'PetitCompiler-Context' |
|
8 ! |
|
9 |
|
10 PPCProfilingContext comment:'' |
|
11 ! |
|
12 |
|
13 !PPCProfilingContext methodsFor:'gt'! |
|
14 |
|
15 gtReport: composite |
|
16 <gtInspectorPresentationOrder: 40> |
|
17 composite table |
|
18 title: 'Report'; |
|
19 column: 'Info' evaluated: [ :each | each key printString ]; |
|
20 column: 'Value' evaluated: [ :each | each value printString ]; |
|
21 display: [:context | context asReportTable ]. |
|
22 ! ! |
|
23 |
|
24 !PPCProfilingContext methodsFor:'initialization'! |
|
25 |
|
26 initialize |
|
27 super initialize. |
|
28 self reset |
|
29 ! |
|
30 |
|
31 reset |
|
32 invocations := OrderedCollection new. |
|
33 remembers := OrderedCollection new. |
|
34 restores := OrderedCollection new. |
|
35 |
|
36 lwRemembers := OrderedCollection new. |
|
37 lwRestores := OrderedCollection new. |
|
38 |
|
39 totalSize := 0. |
|
40 ! ! |
|
41 |
|
42 !PPCProfilingContext methodsFor:'profiling'! |
|
43 |
|
44 invocations |
|
45 ^ invocations |
|
46 ! |
|
47 |
|
48 lwRemember |
|
49 | selector | |
|
50 selector := thisContext sender selector. |
|
51 lwRemembers add: selector. |
|
52 |
|
53 ^ super lwRemember |
|
54 ! |
|
55 |
|
56 lwRestore: whatever |
|
57 | selector | |
|
58 selector := thisContext sender selector. |
|
59 lwRestores add: selector. |
|
60 |
|
61 ^ super lwRestore: whatever. |
|
62 ! |
|
63 |
|
64 methodFinished: selector |
|
65 "Nothing to do for now" |
|
66 ! |
|
67 |
|
68 methodInvoked: selector |
|
69 invocations add: selector |
|
70 ! |
|
71 |
|
72 remember |
|
73 | sender selector | |
|
74 |
|
75 sender := thisContext sender. |
|
76 (sender receiver isKindOf: PPCompiledParser) ifTrue: [ |
|
77 selector := sender selector. |
|
78 ] ifFalse: [ |
|
79 selector := sender receiver class. |
|
80 ]. |
|
81 remembers add: selector. |
|
82 ^ super remember |
|
83 ! |
|
84 |
|
85 restore: whatever |
|
86 | selector sender | |
|
87 |
|
88 sender := thisContext sender. |
|
89 (sender receiver isKindOf: PPCompiledParser) ifTrue: [ |
|
90 selector := sender selector. |
|
91 ] ifFalse: [ |
|
92 selector := sender receiver class. |
|
93 ]. |
|
94 |
|
95 |
|
96 restores add: selector. |
|
97 |
|
98 ^ super restore: whatever |
|
99 ! |
|
100 |
|
101 stream: aStream |
|
102 totalSize := totalSize + aStream size. |
|
103 ^ super stream: aStream |
|
104 ! ! |
|
105 |
|
106 !PPCProfilingContext methodsFor:'reporting'! |
|
107 |
|
108 asReportTable |
|
109 ^{ |
|
110 #'invocations per character (NOT PRECISE YET)' -> (self invocationCount / (totalSize + 1.0)). |
|
111 #'lwBacktrack per character' -> (self lwRestoreCount / (totalSize + 1.0)). |
|
112 #'backtrack per character' -> (self restoreCount / (totalSize + 1.0)). |
|
113 #'total stream size' -> totalSize . |
|
114 #'invocation count' -> self invocationCount. |
|
115 #'lwRemember count' -> self lwRememberCount. |
|
116 #'lwRestore count' -> self lwRestoreCount. |
|
117 #'remember count' -> self rememberCount. |
|
118 #'restore count' -> self restoreCount. |
|
119 |
|
120 } |
|
121 ! |
|
122 |
|
123 invocationCount |
|
124 ^ invocations size |
|
125 ! |
|
126 |
|
127 lwRememberCount |
|
128 ^ lwRemembers size |
|
129 ! |
|
130 |
|
131 lwRestoreCount |
|
132 ^ lwRestores size |
|
133 ! |
|
134 |
|
135 rememberCount |
|
136 ^ remembers size |
|
137 ! |
|
138 |
|
139 restoreCount |
|
140 ^ restores size |
|
141 ! ! |
|
142 |