From d1dd22348e940f5d12ebd87a65a496487d829529 Mon Sep 17 00:00:00 2001 From: Martok Date: Sun, 10 Jul 2016 20:56:57 +0200 Subject: [PATCH] * removed Profiler writer backends, keep only binary format --- uutlEmbeddedProfiler.pas | 82 ++++++++++++++++++++++++----------- uutlProfilerBinary.inc | 64 --------------------------- uutlProfilerPlainText.inc | 49 --------------------- uutlProfilerPlainTextMMap.inc | 46 -------------------- 4 files changed, 57 insertions(+), 184 deletions(-) delete mode 100644 uutlProfilerBinary.inc delete mode 100644 uutlProfilerPlainText.inc delete mode 100644 uutlProfilerPlainTextMMap.inc diff --git a/uutlEmbeddedProfiler.pas b/uutlEmbeddedProfiler.pas index 6efef44..f0957a2 100644 --- a/uutlEmbeddedProfiler.pas +++ b/uutlEmbeddedProfiler.pas @@ -25,7 +25,7 @@ implementation {$IFDEF PROFILER_ENABLE} uses - Windows, Classes, unFastFileStream; + Windows, Classes; type TWriterThread = class(TThread) @@ -47,21 +47,16 @@ type end; TProfileDataFile = class + private + fDF: TStream; public - constructor Create(const {%H-}aFileName: string); - procedure WriteEnter(Thread: TThreadID; When: Int64; Func: PtrUInt; Name: string); virtual; abstract; - procedure WriteLeave(Thread: TThreadID; When: Int64); virtual; abstract; + constructor Create(const aFileName: string); + destructor Destroy; override; + procedure WriteEnter(Thread: TThreadID; When: Int64; Func: PtrUInt; Name: string); + procedure WriteLeave(Thread: TThreadID; When: Int64); end; -{$DEFINE __HEAD} - //{$I uutlProfilerPlainText.inc} - {$I uutlProfilerBinary.inc} - //{$I uutlProfilerPlainTextMMap.inc} -{$UnDef __HEAD} - //{$I uutlProfilerPlainText.inc} - {$I uutlProfilerBinary.inc} - //{$I uutlProfilerPlainTextMMap.inc} - + {$I uutlProfilerBinaryFmt.inc} const MAX_EVENT_COUNT = 1000; @@ -175,13 +170,6 @@ begin end; end; -{ TProfileDataFile } - -constructor TProfileDataFile.Create(const aFileName: string); -begin - inherited Create; -end; - { TWriterThread } constructor TWriterThread.Create; @@ -216,8 +204,6 @@ begin end; procedure TWriterThread.SaveCurrentWrite; -var - i: integer; begin if Events[WritePtr].Func = 0 then exit; @@ -229,6 +215,54 @@ begin Events[WritePtr].Func:= 0; end; +{ TProfileDataFile } + +constructor TProfileDataFile.Create(const aFileName: string); +var + H: TPBHeader; +begin + inherited Create; +// fDF:= TFastFileStream.Create(aFileName, fmCreate); + fDF:= TFileStream.Create(aFileName, fmCreate); + H.VersionMagic:= NtoBE(HEADER_VER_MAGIC); + H.PtrSize:= Sizeof(PtrUInt); + H.ProgramName:= ExtractFileName(ParamStr(0)); + fDF.Write(H, sizeof(H)); +end; + +destructor TProfileDataFile.Destroy; +begin + FreeAndNil(fDF); + inherited; +end; + +procedure TProfileDataFile.WriteEnter(Thread: TThreadID; When: Int64; Func: PtrUInt; Name: string); +var + H: TPBEventHeader; + R: TPBEventEnterProc; +begin + H.ThreadID:= Thread; + H.Timestamp:= When; + H.Kind:= PB_KIND_ENTER; + fDF.Write(H, Sizeof(H)); + R.Func:= Func; + R.NameLen:= Length(Name); + fDF.Write(R, Sizeof(R)); + if R.NameLen > 0 then + fDF.Write(Name[1], R.NameLen); +end; + +procedure TProfileDataFile.WriteLeave(Thread: TThreadID; When: Int64); +var + H: TPBEventHeader; +begin + H.ThreadID:= Thread; + H.Timestamp:= When; + H.Kind:= PB_KIND_EXIT; + fDF.Write(H, Sizeof(H)); +end; + + {$ELSE} procedure ProfilerEnterProc(const Addr: Pointer); inline; @@ -249,9 +283,7 @@ initialization WritePtr:= 0; WriterThread:= nil; CalibrateLineNumberCompensation; - //ProfilerDataFile:= TProfilePlainText.Create(ChangeFileExt(ParamStr(0), '.profraw')); - ProfilerDataFile:= TProfileBinary.Create(ChangeFileExt(ParamStr(0), '.profbin')); - //ProfilerDataFile:= TProfilePlainTextMMap.Create(ChangeFileExt(ParamStr(0), '.profraw')); + ProfilerDataFile:= TProfileDataFile.Create(ChangeFileExt(ParamStr(0), '.profbin')); ProfilerEnabled:= true; {$ENDIF} diff --git a/uutlProfilerBinary.inc b/uutlProfilerBinary.inc deleted file mode 100644 index 365facf..0000000 --- a/uutlProfilerBinary.inc +++ /dev/null @@ -1,64 +0,0 @@ -{$ifdef __HEAD} -TProfileBinary = class(TProfileDataFile) -private - fDF: TFastFileStream; -public - constructor Create(const aFileName: string); - destructor Destroy; override; - procedure WriteEnter(Thread: TThreadID; When: Int64; Func: PtrUInt; Name: string); override; - procedure WriteLeave(Thread: TThreadID; When: Int64); override; -end; - -{$I uutlProfilerBinaryFmt.inc} - - -{$ELSE} - -{ TProfileBinary } - -constructor TProfileBinary.Create(const aFileName: string); -var - H: TPBHeader; -begin - inherited; - fDF:= TFastFileStream.Create(aFileName, fmCreate); - H.VersionMagic:= NtoBE(HEADER_VER_MAGIC); - H.PtrSize:= Sizeof(PtrUInt); - H.ProgramName:= ExtractFileName(ParamStr(0)); - fDF.Write(H, sizeof(H)); -end; - -destructor TProfileBinary.Destroy; -begin - FreeAndNil(fDF); - inherited; -end; - -procedure TProfileBinary.WriteEnter(Thread: TThreadID; When: Int64; Func: PtrUInt; Name: string); -var - H: TPBEventHeader; - R: TPBEventEnterProc; -begin - H.ThreadID:= Thread; - H.Timestamp:= When; - H.Kind:= PB_KIND_ENTER; - fDF.Write(H, Sizeof(H)); - R.Func:= Func; - R.NameLen:= Length(Name); - fDF.Write(R, Sizeof(R)); - if R.NameLen > 0 then - fDF.Write(Name[1], R.NameLen); -end; - -procedure TProfileBinary.WriteLeave(Thread: TThreadID; When: Int64); -var - H: TPBEventHeader; -begin - H.ThreadID:= Thread; - H.Timestamp:= When; - H.Kind:= PB_KIND_EXIT; - fDF.Write(H, Sizeof(H)); -end; -{$ENDIF} - - diff --git a/uutlProfilerPlainText.inc b/uutlProfilerPlainText.inc deleted file mode 100644 index a5f74ac..0000000 --- a/uutlProfilerPlainText.inc +++ /dev/null @@ -1,49 +0,0 @@ -{$ifdef __HEAD} -TProfilePlainText = class(TProfileDataFile) -private - fDF: Textfile; - fBuffer: array[0..16*1024-1] of byte; -public - constructor Create(const aFileName: string); - destructor Destroy; override; - procedure WriteEnter(Thread: TThreadID; When: Int64; Func, Src: String; Line: Integer); override; - procedure WriteLeave(Thread: TThreadID; When: Int64); override; -end; - -{$ELSE} - -{ TProfilePlainText } - -constructor TProfilePlainText.Create(const aFileName: string); -begin - inherited; - AssignFile(fDF, aFileName); - SetTextBuf(fDF, {%H-}fBuffer[0], sizeof(fBuffer)); - Rewrite(fDF); -end; - -destructor TProfilePlainText.Destroy; -begin - CloseFile(fDF); - inherited; -end; - -procedure TProfilePlainText.WriteEnter(Thread: TThreadID; When: Int64; Func, Src: String; Line: Integer); -var - l: string; -begin - l:= hexStr(When, 16)+ ';'+hexStr(Thread, 4)+ ';'+Src+ ';'+IntToStr(Line)+';'+Func; - WriteLn(fDF, l); -end; - -procedure TProfilePlainText.WriteLeave(Thread: TThreadID; When: Int64); -var - l: string; -begin - l:= hexStr(When, 16)+ ';'+hexStr(Thread, 4)+ ';'; - WriteLn(fDF, l); -end; - -{$ENDIF} - - diff --git a/uutlProfilerPlainTextMMap.inc b/uutlProfilerPlainTextMMap.inc deleted file mode 100644 index 1b6a4ef..0000000 --- a/uutlProfilerPlainTextMMap.inc +++ /dev/null @@ -1,46 +0,0 @@ -{$ifdef __HEAD} -TProfilePlainTextMMap = class(TProfileDataFile) -private - fDF: TFastFileStream; -public - constructor Create(const aFileName: string); - destructor Destroy; override; - procedure WriteEnter(Thread: TThreadID; When: Int64; Func, Src: String; Line: Integer); override; - procedure WriteLeave(Thread: TThreadID; When: Int64); override; -end; - -{$ELSE} - -{ TProfilePlainTextMMap } - -constructor TProfilePlainTextMMap.Create(const aFileName: string); -begin - inherited; - fDF:= TFastFileStream.Create(aFileName, fmCreate, fmShareExclusive); -end; - -destructor TProfilePlainTextMMap.Destroy; -begin - FreeAndNil(fDF); - inherited; -end; - -procedure TProfilePlainTextMMap.WriteEnter(Thread: TThreadID; When: Int64; Func, Src: String; Line: Integer); -var - l: string; -begin - l:= hexStr(When, 16)+ ';'+hexStr(Thread, 4)+ ';'+Src+ ';'+IntToStr(Line)+';'+Func + #13#10; - fDF.Write(l[1], Length(l)); -end; - -procedure TProfilePlainTextMMap.WriteLeave(Thread: TThreadID; When: Int64); -var - l: string; -begin - l:= hexStr(When, 16)+ ';'+hexStr(Thread, 4)+ ';'#13#10; - fDF.Write(l[1], Length(l)); -end; - -{$ENDIF} - -