SWORD25: Get rid of Kernel::GetMicroTicks()

svn-id: r53403
This commit is contained in:
Max Horn 2010-10-13 10:41:30 +00:00
parent 655e4a961a
commit 02322c562c
6 changed files with 28 additions and 45 deletions

View file

@ -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 {

View file

@ -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;

View file

@ -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;

View file

@ -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
// ----------------- // -----------------

View file

@ -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
*/ */

View file

@ -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;
} }