diff -r 17ba167b8ee1 -r 553a5456963b compiler/PPCProfilingContext.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/compiler/PPCProfilingContext.st Sun Oct 26 01:03:31 2014 +0000 @@ -0,0 +1,142 @@ +"{ Package: 'stx:goodies/petitparser/compiler' }" + +PPCContext subclass:#PPCProfilingContext + instanceVariableNames:'invocations remembers restores lwRemembers lwRestores totalSize' + classVariableNames:'' + poolDictionaries:'' + category:'PetitCompiler-Context' +! + +PPCProfilingContext comment:'' +! + +!PPCProfilingContext methodsFor:'gt'! + +gtReport: composite + + composite table + title: 'Report'; + column: 'Info' evaluated: [ :each | each key printString ]; + column: 'Value' evaluated: [ :each | each value printString ]; + display: [:context | context asReportTable ]. +! ! + +!PPCProfilingContext methodsFor:'initialization'! + +initialize + super initialize. + self reset +! + +reset + invocations := OrderedCollection new. + remembers := OrderedCollection new. + restores := OrderedCollection new. + + lwRemembers := OrderedCollection new. + lwRestores := OrderedCollection new. + + totalSize := 0. +! ! + +!PPCProfilingContext methodsFor:'profiling'! + +invocations + ^ invocations +! + +lwRemember + | selector | + selector := thisContext sender selector. + lwRemembers add: selector. + + ^ super lwRemember +! + +lwRestore: whatever + | selector | + selector := thisContext sender selector. + lwRestores add: selector. + + ^ super lwRestore: whatever. +! + +methodFinished: selector + "Nothing to do for now" +! + +methodInvoked: selector + invocations add: selector +! + +remember + | sender selector | + + sender := thisContext sender. + (sender receiver isKindOf: PPCompiledParser) ifTrue: [ + selector := sender selector. + ] ifFalse: [ + selector := sender receiver class. + ]. + remembers add: selector. + ^ super remember +! + +restore: whatever + | selector sender | + + sender := thisContext sender. + (sender receiver isKindOf: PPCompiledParser) ifTrue: [ + selector := sender selector. + ] ifFalse: [ + selector := sender receiver class. + ]. + + + restores add: selector. + + ^ super restore: whatever +! + +stream: aStream + totalSize := totalSize + aStream size. + ^ super stream: aStream +! ! + +!PPCProfilingContext methodsFor:'reporting'! + +asReportTable + ^{ + #'invocations per character (NOT PRECISE YET)' -> (self invocationCount / (totalSize + 1.0)). + #'lwBacktrack per character' -> (self lwRestoreCount / (totalSize + 1.0)). + #'backtrack per character' -> (self restoreCount / (totalSize + 1.0)). + #'total stream size' -> totalSize . + #'invocation count' -> self invocationCount. + #'lwRemember count' -> self lwRememberCount. + #'lwRestore count' -> self lwRestoreCount. + #'remember count' -> self rememberCount. + #'restore count' -> self restoreCount. + + } +! + +invocationCount + ^ invocations size +! + +lwRememberCount + ^ lwRemembers size +! + +lwRestoreCount + ^ lwRestores size +! + +rememberCount + ^ remembers size +! + +restoreCount + ^ restores size +! ! +