compiler/PPCProfilingContext.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 17 Aug 2015 12:13:16 +0100
changeset 515 b5316ef15274
parent 502 1e45d3c96ec5
permissions -rw-r--r--
Updated to PetitCompiler-JanKurs.160, PetitCompiler-Tests-JanKurs.112, PetitCompiler-Extras-Tests-JanKurs.25, PetitCompiler-Benchmarks-JanKurs.17 Name: PetitCompiler-JanKurs.160 Author: JanKurs Time: 17-08-2015, 09:52:26.291 AM UUID: 3b4bfc98-8098-4951-af83-a59e2585b121 Name: PetitCompiler-Tests-JanKurs.112 Author: JanKurs Time: 16-08-2015, 05:00:32.936 PM UUID: 85613d47-08f3-406f-9823-9cdab451e805 Name: PetitCompiler-Extras-Tests-JanKurs.25 Author: JanKurs Time: 16-08-2015, 05:00:10.328 PM UUID: 09731810-51a1-4151-8d3a-56b636fbd1f7 Name: PetitCompiler-Benchmarks-JanKurs.17 Author: JanKurs Time: 05-08-2015, 05:29:32.407 PM UUID: e544b5f1-bcf8-470b-93a6-d2363e4dfc8a

"{ 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:'accessing'!

position: value
    self assert: value isInteger.
    super position: value
! !

!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> $'
! !