compiler/PPCProfilingContext.st
changeset 391 553a5456963b
child 392 9b297f0d949c
equal deleted inserted replaced
390:17ba167b8ee1 391:553a5456963b
       
     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