Skip to content

Commit 8e3484f

Browse files
committed
Fix percision lost when calculating the frame time. Started after ~4 minutes due to float percision limits, would be visible after ~18-36 hours when it would be off by 4-8ms.
1 parent cfc8e8b commit 8e3484f

4 files changed

Lines changed: 12 additions & 7 deletions

File tree

src/d2dx/RenderContext.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -468,8 +468,8 @@ void RenderContext::Present()
468468
break;
469469
}
470470

471-
double curTime = TimeEndMs(_timeStart);
472-
_frameTimeMs = curTime - _prevTime;
471+
auto curTime = TimeEnd(_timeStart);
472+
_frameTimeMs = TimeToMs(curTime - _prevTime);
473473
_prevTime = curTime;
474474

475475
if (_deviceContext1)

src/d2dx/RenderContext.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ namespace d2dx
211211
int64_t _timeStart;
212212
bool _hasAdjustedWindowPlacement = false;
213213

214-
double _prevTime;
214+
int64_t _prevTime;
215215
double _frameTimeMs;
216216
};
217217
}

src/d2dx/Utils.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,17 @@ int64_t d2dx::TimeStart()
5151
return (int64_t)li.QuadPart;
5252
}
5353

54-
float d2dx::TimeEndMs(int64_t sinceThisTime)
54+
int64_t d2dx::TimeEnd(int64_t sinceThisTime)
5555
{
56-
warmup();
5756
LARGE_INTEGER li;
5857
QueryPerformanceCounter(&li);
58+
return li.QuadPart - sinceThisTime;
59+
}
60+
61+
double d2dx::TimeToMs(int64_t time)
62+
{
5963
assert(_freq);
60-
return (float)(double(li.QuadPart - sinceThisTime) / _freq);
64+
return static_cast<double>(time) / _freq;
6165
}
6266

6367
#define STATUS_SUCCESS (0x00000000)

src/d2dx/Utils.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ namespace d2dx
2929
}
3030

3131
int64_t TimeStart();
32-
float TimeEndMs(int64_t start);
32+
int64_t TimeEnd(int64_t start);
33+
double TimeToMs(int64_t time);
3334

3435

3536
#ifdef NDEBUG

0 commit comments

Comments
 (0)