VM profiler (#14833)

* Crude VM profiler

* Added --profileVM flag, refactoring

* fixed FileLine hash

* Use TLineInfo instead of own FileLine, updated formatting

* Refactoring, moved PStackFrame to vmdefs for cleaner data structure

* Moved vmprofiler to separate file

* Simplified TLineInfo hash, use toFileLineCol for output

* Hash

* Moved profile data into Config, dump only once at end of run

* Changed profile output header to show '#instr' instead of 'count'

* Do not accumulate instrcount for non-top frames

Co-authored-by: Ico Doornekamp <git@zevv.nl>
This commit is contained in:
Ico Doornekamp 2020-07-09 19:18:35 +02:00 • committed by GitHub
commit d7ccd82eac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 86 additions and 15 deletions

View file

@ -261,6 +261,21 @@ type
config*: ConfigRef
graph*: ModuleGraph
oldErrorCount*: int
profiler*: Profiler
PStackFrame* = ref TStackFrame
TStackFrame* = object
prc*: PSym # current prc; proc that is evaluated
slots*: seq[TFullReg] # parameters passed to the proc + locals;
# parameters come first
next*: PStackFrame # for stacking
comesFrom*: int
safePoints*: seq[int] # used for exception handling
# XXX 'break' should perform cleanup actions
# What does the C backend do for it?
Profiler* = object
tEnter*: float
tos*: PStackFrame
TPosition* = distinct int