compiler/PPCProfilingContext.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Jul 2015 08:37:37 +0100
changeset 510 869853decf31
parent 502 1e45d3c96ec5
child 515 b5316ef15274
permissions -rw-r--r--
Tests refactoring - use generated test cases to make sure all posibilities are tested. Do not generate resource for all combinations, use PPCSetUpBeforeTearDownAfterResource instead that delegates parser compilation to the testcase itself (it calls it's #setUpBefore method).

"{ Package: 'stx:goodies/petitparser/compiler' }"

"{ NameSpace: Smalltalk }"

PPCContext subclass:#PPCProfilingContext
	instanceVariableNames:'invocations remembers restores lwRemembers lwRestores totalSize
		tokenReads'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Context'
!


!PPCProfilingContext methodsFor:'gt'!

gtReport: composite
    <gtInspectorPresentationOrder: 40>
    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.
    
    tokenReads := 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.
    selector := (sender receiver isKindOf: PPCompiledParser) ifTrue: [ 
 								sender selector.
    ] ifFalse: [ 
 								sender receiver class.	
    ].
    remembers add: selector.
    ^ super remember
!

restore: whatever
    | selector sender |
    
    sender := thisContext sender.
    selector := (sender receiver isKindOf: PPCompiledParser) ifTrue: [ 
 								sender selector.
    ] ifFalse: [ 
 								sender receiver class.	
    ].
    
    
    restores add: selector.
    
    ^ super restore: whatever
!

stream: aStream
    totalSize := totalSize + aStream size.
    ^ super stream: aStream
!

tokenRead: tokenName
    tokenReads add: tokenName
!

tokenReadCount
    ^ tokenReads size
!

tokenReads
    ^ tokenReads 
! !

!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.
        #'token read count' -> self tokenReadCount.
    
    }
!

invocationCount
    ^ invocations size
!

lwRememberCount
    ^ lwRemembers size
!

lwRestoreCount
    ^ lwRestores size
!

rememberCount
    ^ remembers size
!

restoreCount
    ^ restores size
! !

!PPCProfilingContext class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
! !