X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2Fxprofiler.pas;h=28ea126d78276cbff10431a3b033ab624b125e5e;hb=ded89321df07e3f5832331127637375840c25e6f;hp=6fb00357b467071a192a46556511fd86b0021780;hpb=c4f5c9d83f401ccc223dad213eec2a6b6f8a6b23;p=d2df-sdl.git diff --git a/src/shared/xprofiler.pas b/src/shared/xprofiler.pas index 6fb0035..28ea126 100644 --- a/src/shared/xprofiler.pas +++ b/src/shared/xprofiler.pas @@ -1,4 +1,4 @@ -(* Copyright (C) DooM 2D:Forever Developers +(* Copyright (C) Doom 2D: Forever Developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,21 +20,10 @@ unit xprofiler; interface -uses - SysUtils, - {$IF DEFINED(LINUX)} - {$DEFINE STOPWATCH_IS_HERE} - unixtype, linux - {$ELSEIF DEFINED(WINDOWS)} - {$DEFINE STOPWATCH_IS_HERE} - Windows - {$ELSE} - {$IFDEF STOPWATCH_IS_HERE} - {$UNDEF STOPWATCH_IS_HERE} - {$ENDIF} - {$WARNING You suck!} - {$ENDIF} - ; + uses + SysUtils; + + {$DEFINE STOPWATCH_IS_HERE} {$IF DEFINED(STOPWATCH_IS_HERE)} type @@ -143,63 +132,34 @@ type end; -function curTimeMicro (): UInt64; inline; -function curTimeMilli (): UInt64; inline; +function getTimeMicro (): UInt64; inline; +function getTimeMilli (): UInt64; inline; implementation -{$IF DEFINED(LINUX)} -type THPTimeType = TTimeSpec; -{$ELSE} -type THPTimeType = Int64; -{$ENDIF} - -var - mFrequency: Int64 = 0; - mHasHPTimer: Boolean = false; + uses + SDL2; + type + THPTimeType = Int64; // ////////////////////////////////////////////////////////////////////////// // procedure initTimerIntr (); -var - r: THPTimeType; begin - if (mFrequency = 0) then - begin -{$IF DEFINED(LINUX)} - if (clock_getres(CLOCK_MONOTONIC, @r) <> 0) then raise Exception.Create('profiler error: cannot get timer resolution'); - mHasHPTimer := (r.tv_nsec <> 0); - if not mHasHPTimer then raise Exception.Create('profiler error: hires timer is not available'); - mFrequency := 1; // just a flag - if (r.tv_nsec <> 0) then mFrequency := 1000000000000000000 div r.tv_nsec; -{$ELSE} - mHasHPTimer := QueryPerformanceFrequency(r); - if not mHasHPTimer then raise Exception.Create('profiler error: hires timer is not available'); - mFrequency := r; -{$ENDIF} - end; + (* init sdl timers? *) end; -function curTimeMicro (): UInt64; inline; -var - r: THPTimeType; +function getTimeMicro (): UInt64; inline; begin - //if (mFrequency = 0) then initTimerIntr(); - {$IF DEFINED(LINUX)} - clock_gettime(CLOCK_MONOTONIC, @r); - result := UInt64(r.tv_sec)*1000000+UInt64(r.tv_nsec) div 1000; // microseconds - {$ELSE} - QueryPerformanceCounter(r); - result := UInt64(r)*1000000 div mFrequency; - {$ENDIF} + Result := SDL_GetPerformanceCounter() * 1000000 div SDL_GetPerformanceFrequency() end; -function curTimeMilli (): UInt64; inline; +function getTimeMilli (): UInt64; inline; begin - result := curTimeMicro div 1000; + result := getTimeMicro div 1000; end; @@ -221,7 +181,7 @@ procedure TStopWatch.updateElapsed (); var e: UInt64; begin - e := curTimeMicro(); + e := getTimeMicro(); if (mStartPosition > e) then mStartPosition := e; Inc(mElapsed, e-mStartPosition); mStartPosition := e; @@ -253,7 +213,7 @@ end; procedure TStopWatch.start (reset: Boolean=true); begin if mRunning and not reset then exit; // nothing to do - mStartPosition := curTimeMicro(); + mStartPosition := getTimeMicro(); mRunning := true; if (reset) then mElapsed := 0; end; @@ -465,8 +425,8 @@ begin begin if (xpsecs[idx].name = aName) then begin - if (idx = xpscur) then raise Exception.Create('profiler error(0): dobule resume: "'+aName+'"'); - if (xpsecs[idx].prevAct <> -1) then raise Exception.Create('profiler error(1): dobule resume: "'+aName+'"'); + if (idx = xpscur) then raise Exception.Create('profiler error(0): double resume: "'+aName+'"'); + if (xpsecs[idx].prevAct <> -1) then raise Exception.Create('profiler error(1): double resume: "'+aName+'"'); xpsecs[idx].prevAct := xpscur; xpscur := idx; xpsecs[idx].timer.resume();