74 lines
1023 B
ObjectPascal
74 lines
1023 B
ObjectPascal
unit UProfiler;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils;
|
|
|
|
Type
|
|
TProfiler = class
|
|
private
|
|
freq,
|
|
start: Int64;
|
|
|
|
function GetCounter: Int64;
|
|
|
|
public
|
|
constructor Create;
|
|
|
|
procedure BeginMeasure;
|
|
function EndMeasure: Double;
|
|
|
|
function FormatTime(prefix: String; v: Double): String;
|
|
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
LCLIntf
|
|
{$ifdef WINDOWS}
|
|
, Windows
|
|
{$endif};
|
|
|
|
constructor TProfiler.Create;
|
|
begin
|
|
inherited;
|
|
|
|
start:= 0;
|
|
{$ifdef WINDOWS}
|
|
if Windows.QueryPerformanceFrequency(freq) then
|
|
Exit;
|
|
{$endif}
|
|
freq:= 1000;
|
|
end;
|
|
|
|
function TProfiler.GetCounter: Int64;
|
|
begin
|
|
{$ifdef WINDOWS}
|
|
if Windows.QueryPerformanceCounter(Result) then
|
|
Exit;
|
|
{$endif}
|
|
Result:= LCLIntf.GetTickCount64;
|
|
end;
|
|
|
|
procedure TProfiler.BeginMeasure;
|
|
begin
|
|
start:= GetCounter;
|
|
end;
|
|
|
|
function TProfiler.EndMeasure: Double;
|
|
begin
|
|
Result:= (GetCounter - start) / freq;
|
|
end;
|
|
|
|
function TProfiler.FormatTime(prefix: String; v: Double): String;
|
|
begin
|
|
Result:= FormatFloat(prefix+'0.######s',v);
|
|
end;
|
|
|
|
end.
|
|
|