SWORD25: Get rid of Kernel::GetMicroTicks()
svn-id: r53403
This commit is contained in:
parent
655e4a961a
commit
02322c562c
6 changed files with 28 additions and 45 deletions
|
@ -83,7 +83,7 @@ GraphicEngine::GraphicEngine(Kernel *pKernel) :
|
||||||
m_Height(0),
|
m_Height(0),
|
||||||
m_BitDepth(0),
|
m_BitDepth(0),
|
||||||
m_Windowed(0),
|
m_Windowed(0),
|
||||||
m_LastTimeStamp((uint64) - 1), // max. BS_INT64 um beim ersten Aufruf von _UpdateLastFrameDuration() einen Reset zu erzwingen
|
m_LastTimeStamp((uint) -1), // max. BS_INT64 um beim ersten Aufruf von _UpdateLastFrameDuration() einen Reset zu erzwingen
|
||||||
m_LastFrameDuration(0),
|
m_LastFrameDuration(0),
|
||||||
m_TimerActive(true),
|
m_TimerActive(true),
|
||||||
m_FrameTimeSampleSlot(0),
|
m_FrameTimeSampleSlot(0),
|
||||||
|
@ -378,23 +378,25 @@ void GraphicEngine::DrawDebugLine(const Vertex &Start, const Vertex &End, uint C
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicEngine::UpdateLastFrameDuration() {
|
void GraphicEngine::UpdateLastFrameDuration() {
|
||||||
// Aktuelle Zeit holen
|
// Record current time
|
||||||
uint64_t CurrentTime = Kernel::GetInstance()->GetMicroTicks();
|
const uint currentTime = Kernel::GetInstance()->GetMilliTicks();
|
||||||
|
|
||||||
// Verstrichene Zeit seit letztem Frame berechnen und zu große Zeitsprünge ( > 250 msek.) unterbinden
|
// Compute the elapsed time since the last frame and prevent too big ( > 250 msecs) time jumps.
|
||||||
// (kann vorkommen bei geladenen Spielständen, während des Debuggings oder Hardwareungenauigkeiten)
|
// These can occur when loading save states, during debugging or due to hardware inaccuracies.
|
||||||
m_FrameTimeSamples[m_FrameTimeSampleSlot] = static_cast<uint>(CurrentTime - m_LastTimeStamp);
|
m_FrameTimeSamples[m_FrameTimeSampleSlot] = static_cast<uint>(currentTime - m_LastTimeStamp);
|
||||||
if (m_FrameTimeSamples[m_FrameTimeSampleSlot] > 250000) m_FrameTimeSamples[m_FrameTimeSampleSlot] = 250000;
|
if (m_FrameTimeSamples[m_FrameTimeSampleSlot] > 250000)
|
||||||
|
m_FrameTimeSamples[m_FrameTimeSampleSlot] = 250000;
|
||||||
m_FrameTimeSampleSlot = (m_FrameTimeSampleSlot + 1) % FRAMETIME_SAMPLE_COUNT;
|
m_FrameTimeSampleSlot = (m_FrameTimeSampleSlot + 1) % FRAMETIME_SAMPLE_COUNT;
|
||||||
|
|
||||||
// Die Framezeit wird über mehrere Frames gemittelt um Ausreisser zu eliminieren
|
// Compute the average frame duration over multiple frames to eliminate outliers.
|
||||||
Common::Array<uint>::const_iterator it = m_FrameTimeSamples.begin();
|
Common::Array<uint>::const_iterator it = m_FrameTimeSamples.begin();
|
||||||
uint Sum = *it;
|
uint sum = *it;
|
||||||
for (it++; it != m_FrameTimeSamples.end(); it++) Sum += *it;
|
for (it++; it != m_FrameTimeSamples.end(); it++)
|
||||||
m_LastFrameDuration = Sum / FRAMETIME_SAMPLE_COUNT;
|
sum += *it;
|
||||||
|
m_LastFrameDuration = sum * 1000 / FRAMETIME_SAMPLE_COUNT;
|
||||||
|
|
||||||
// _LastTimeStamp auf die Zeit des aktuellen Frames setzen
|
// Update m_LastTimeStamp with the current frame's timestamp
|
||||||
m_LastTimeStamp = CurrentTime;
|
m_LastTimeStamp = currentTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
|
@ -189,17 +189,19 @@ public:
|
||||||
/**
|
/**
|
||||||
* Specifies the time (in microseconds) since the last frame has passed
|
* Specifies the time (in microseconds) since the last frame has passed
|
||||||
*/
|
*/
|
||||||
int GetLastFrameDurationMicro() {
|
int GetLastFrameDurationMicro() const {
|
||||||
if (m_TimerActive) return m_LastFrameDuration;
|
if (!m_TimerActive)
|
||||||
else return 0;
|
return 0;
|
||||||
|
return m_LastFrameDuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies the time (in microseconds) the previous frame took
|
* Specifies the time (in microseconds) the previous frame took
|
||||||
*/
|
*/
|
||||||
float GetLastFrameDuration() {
|
float GetLastFrameDuration() const {
|
||||||
if (m_TimerActive) return static_cast<float>(m_LastFrameDuration) / 1000000.0f;
|
if (!m_TimerActive)
|
||||||
else return 0;
|
return 0;
|
||||||
|
return static_cast<float>(m_LastFrameDuration) / 1000000.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StopMainTimer() {
|
void StopMainTimer() {
|
||||||
|
@ -208,7 +210,7 @@ public:
|
||||||
void ResumeMainTimer() {
|
void ResumeMainTimer() {
|
||||||
m_TimerActive = true;
|
m_TimerActive = true;
|
||||||
}
|
}
|
||||||
float GetSecondaryFrameDuration() {
|
float GetSecondaryFrameDuration() const {
|
||||||
return static_cast<float>(m_LastFrameDuration) / 1000000.0f;
|
return static_cast<float>(m_LastFrameDuration) / 1000000.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,14 +219,14 @@ public:
|
||||||
/**
|
/**
|
||||||
* Returns the width of the output buffer in pixels
|
* Returns the width of the output buffer in pixels
|
||||||
*/
|
*/
|
||||||
int GetDisplayWidth() {
|
int GetDisplayWidth() const {
|
||||||
return m_Width;
|
return m_Width;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the height of the output buffer in pixels
|
* Returns the height of the output buffer in pixels
|
||||||
*/
|
*/
|
||||||
int GetDisplayHeight() {
|
int GetDisplayHeight() const {
|
||||||
return m_Height;
|
return m_Height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -365,7 +367,7 @@ private:
|
||||||
|
|
||||||
// LastFrameDuration Variables
|
// LastFrameDuration Variables
|
||||||
// ---------------------------
|
// ---------------------------
|
||||||
uint64 m_LastTimeStamp;
|
uint m_LastTimeStamp;
|
||||||
uint m_LastFrameDuration;
|
uint m_LastFrameDuration;
|
||||||
bool m_TimerActive;
|
bool m_TimerActive;
|
||||||
Common::Array<uint> m_FrameTimeSamples;
|
Common::Array<uint> m_FrameTimeSamples;
|
||||||
|
|
|
@ -39,13 +39,6 @@
|
||||||
|
|
||||||
#include "common/scummsys.h"
|
#include "common/scummsys.h"
|
||||||
|
|
||||||
typedef uint8 uint8_t;
|
|
||||||
typedef uint16 uint16_t;
|
|
||||||
typedef uint32 uint32_t;
|
|
||||||
typedef int8 int8_t;
|
|
||||||
typedef int16 int16_t;
|
|
||||||
typedef int32 int32_t;
|
|
||||||
|
|
||||||
typedef unsigned long long uint64_t;
|
typedef unsigned long long uint64_t;
|
||||||
typedef signed long long int64_t;
|
typedef signed long long int64_t;
|
||||||
typedef unsigned long long uint64;
|
typedef unsigned long long uint64;
|
||||||
|
|
|
@ -362,14 +362,6 @@ uint Kernel::GetMilliTicks() {
|
||||||
return g_system->getMillis();
|
return g_system->getMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the elapsed time since the system start in microseconds.
|
|
||||||
* This method should be used only if GetMilliTick() for the desired application is inaccurate.
|
|
||||||
*/
|
|
||||||
uint64 Kernel::GetMicroTicks() {
|
|
||||||
return g_system->getMillis() * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Other methods
|
// Other methods
|
||||||
// -----------------
|
// -----------------
|
||||||
|
|
||||||
|
|
|
@ -159,12 +159,6 @@ public:
|
||||||
*/
|
*/
|
||||||
uint GetMilliTicks();
|
uint GetMilliTicks();
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the elapsed time since the system start in microseconds.
|
|
||||||
* This method should be used only if GetMilliTick() for the desired application is inaccurate.
|
|
||||||
*/
|
|
||||||
uint64 GetMicroTicks();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies whether the kernel was successfully initialised
|
* Specifies whether the kernel was successfully initialised
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -132,7 +132,7 @@ static int GetTimer(lua_State *L) {
|
||||||
Kernel *pKernel = Kernel::GetInstance();
|
Kernel *pKernel = Kernel::GetInstance();
|
||||||
BS_ASSERT(pKernel);
|
BS_ASSERT(pKernel);
|
||||||
|
|
||||||
lua_pushnumber(L, static_cast<lua_Number>(pKernel->GetMicroTicks()) / 1000000.0);
|
lua_pushnumber(L, static_cast<lua_Number>(pKernel->GetMilliTicks()) / 1000.0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue