compiler/PPCProfilingContext.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 12 May 2015 01:24:03 +0100
changeset 459 4751c407bb40
parent 452 9f4558b3be66
child 464 f6d77fee9811
permissions -rw-r--r--
Merged with PetitCompiler-JanKurs.20150510144201, PetitCompiler-Tests-JanKurs.20150510144201, PetitCompiler-Extras-Tests-JanKurs.20150510144201, PetitCompiler-Benchmarks-JanKurs.20150510144201 Name: PetitCompiler-JanKurs.20150510144201 Author: JanKurs Time: 10-05-2015, 04:42:29.192 PM UUID: 58a4786b-1182-4904-8b44-a13d3918f244 Name: PetitCompiler-Tests-JanKurs.20150510144201 Author: JanKurs Time: 10-05-2015, 04:32:12.870 PM UUID: 2a8fd41a-331b-4dcf-a7a3-752a50ce86e7 Name: PetitCompiler-Extras-Tests-JanKurs.20150510144201 Author: JanKurs Time: 10-05-2015, 04:59:25.308 PM UUID: ef43bd1a-be60-4e88-b749-8b635622c969 Name: PetitCompiler-Benchmarks-JanKurs.20150510144201 Author: JanKurs Time: 10-05-2015, 05:04:54.561 PM UUID: d8e764fd-016b-46e2-9fc1-17c38c18f0e5

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

"{ NameSpace: Smalltalk }"

PPCContext subclass:#PPCProfilingContext
	instanceVariableNames:'invocations remembers restores lwRemembers lwRestores totalSize'
	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.
    
    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
! !

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

!PPCProfilingContext class methodsFor:'documentation'!

version_HG

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