AmiBlitz³

Normale Version: Blitz Profiler v1.0
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Ohje, ich hab endlich wieder ein Projekt fertig! Cool 

Und zwar hatte ich mal letztes Jahr in einem Forum einen PROFILER für Blitzbasic2 angedeutet. Der war im Prinzip damals schon fertig, ich mußte nur noch die Zeitmessung dazubauen. Da half mir dann noname/haujobb aus.

Wieauchimmer, ich habe es jetzt (mit den gegenwärtigen Spezifikationen) fertig.

Über die Distribution muß ich noch nachdenken, ist ja kein OpenSource aber kosten soll es natürlich auch nix.
Vielleicht ein Precompile-Include oder so.

Was tut es?

Es stellt einfache Methoden zur Verfügung, benutzte Prozeduren zu zählen und die darin verbrachte Zeit zu messen.
(man muß natürlich die für das Profiling selbst benutzte Zeit im Auge behalten).

Dafür fügt man in jede zu überwachende Prozedur einen "Entry" und am Ende einen "Exit" Aufruf ein.

Am Ende kann man (bisher) ein paar Statistiken ausgeben:

[attachment=23]

Schaut mal unten auf das Beispiel, das ist kurz und verständlich.

Da ist natürlich eine GUI geplant, und statistische Auswertungen und und und.

Ist vielleicht ganz sinnvoll?


Code:
;
;test of stat/debug/ profiler possibilities
;
;by frank b., germany
;
;the symbols have obscure names to not interfere
;  with others, as this is supposed to be "invisible",
;  like an include or something
;
;todo: add timer stuff to really measure somethin
;      add memdump/save instead of array()
;      add gui
;history
;      done timing support
;      seems like we are shipping this version!
;      08.DEC.2019

INCDIR  "BlitzINC:src/"
XINCLUDE"profiler_v06.bb"

;#############################################################

;CONTENS


;#bb__profilerON  =1    ;0=OFF

;#bb__PRO_maxfuncs=100

;Macro bbPRO_EntryFunc  ; {uniqueidname, display name of func}
;Macro bbPRO_ExitFunc

;Macro ProfilerStatsCLI

;including timer
;Macro bbPRO_EntryFuncT ; {uniqueidname, display name of func}
;Macro bbPRO_ExitFuncT
;

;#############################################################

.setup


#bb__profilerON = 1
.
.Test_Case


._testfunc
Statement testfunc1 {}

!bbPRO_EntryFuncT{tfunc1,"STAT: testfunc1"}

;---this is the original funcs routine--------------
NOP
Delay_5
;---------------------------------------------------

!bbPRO_ExitFuncT
End Statement

Statement testfunc2 {}

!bbPRO_EntryFuncT{tfunc2,"STAT: testfunc2"}

;---this is the original funcs routine--------------
NOP
Delay_5
;---------------------------------------------------

!bbPRO_ExitFuncT
End Statement


.main
CNIF #bb__profilerON
  bb_pro_starttimer{}
CEND

For a=1 To 5         ;runs our testfunction 5 times
  testfunc1{}
Next a

testfunc2{}          ;runs only one time

CNIF #bb__profilerON

!ProfilerStatsCLI    ;put out statistics

; For a=1To 10

;  NPrint "Time out:", bb_pro_gettime{}
;  Delay_5

; Next

CEND

NPrint "click mouse"

MouseWait
Hi.

Wie würde das praktisch ablaufen?

Ich baue eine Version mit profiling zum debugging bzw. Überprüfung der Laufzeiten von verschiedenen Funktionen.
Und eine normale Version, weil die profiling Info soll ja der Anwender nicht unbedingt sehen.
Oder ließe sich das zur Laufzeit ein- bzw. ausschalten?


Grüße
Das Profiling wird mit dem ON Flag zugeschaltet, sofern du Code auch entsprechend vorbereitet hast.
Wenn das Flag auf 0 steht, dann ist es auch nicht reinkompiliert, von belanglosen Stümpfen mal abgesehen.

Es eignet sich auch nur zum Optimieren, es ist allgemein nicht dazu gedacht, ins Release reinkompiliert zu werden; der Timer z.B. würde ja irgendwann überlaufen oder die Zähler.

Bis jetzt kann man auch noch nicht verschachteln, d.h. man muss bis jetzt immer das Paar
entryfunc
exitfunc
hintereinander benutzen.
Für "normalen" Code, also nicht speziell Prozeduren, füge ich dann noch eigene Kommandos hinzu.