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:
parent
c38a459582
commit
d7ccd82eac
8 changed files with 86 additions and 15 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue