Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __SP_IO_TIMER_H__
00009 #define __SP_IO_TIMER_H__
00010
00011
00012 #include "Base/spStandard.hpp"
00013 #include "Base/spInputOutputString.hpp"
00014
00015
00016 namespace sp
00017 {
00018
00019 class SoftPixelDevice;
00020
00021 namespace io
00022 {
00023
00024
00026 enum ETimeTypes
00027 {
00028 TIME_SECOND = 0,
00029 TIME_MINUTE,
00030 TIME_HOUR,
00031 TIME_DAY,
00032 TIME_MONTH,
00033 TIME_YEAR
00034 };
00035
00036 #ifdef SP_PLATFORM_WINDOWS
00037 struct SFrequenceQuery;
00038 #endif
00039
00040
00054 #define PERFORMANCE_QUERY_START(t) \
00055 io::Timer t(true); \
00056 t.resetClockCounter();
00057
00058 #define PERFORMANCE_QUERY_RESULT(t) \
00059 t.getElapsedMicroseconds()
00060
00061 #define PERFORMANCE_QUERY_PRINT(msg, t) \
00062 io::Log::message(msg + io::stringc(PERFORMANCE_QUERY_RESULT(t)));
00063
00064
00069 class SP_EXPORT Timer
00070 {
00071
00072 public:
00073
00074 Timer(u64 Duration = 0);
00075 Timer(bool UseFrequenceQuery);
00076 virtual ~Timer();
00077
00078
00079
00081 void start(u64 Duration);
00083 void stop();
00085 void pause(bool isPaused = true);
00087 void reset();
00088
00090 bool finish();
00091
00097 u64 getElapsedMicroseconds();
00098
00103 void resetClockCounter();
00104
00116 f64 getCurrentFPS();
00117
00119 inline bool paused() const
00120 {
00121 return TimeOut_ != 0;
00122 }
00123
00124
00125
00131 static u64 microsecs();
00132
00134 static u64 millisecs();
00135
00137 static u64 secs();
00138
00140 static u32 getTime(const ETimeTypes Type);
00141
00143 static io::stringc getTime();
00144
00151 static f64 getFPS();
00152
00158 static u32 getElapsedFrames(u64 Duration = 1000);
00159
00164 static void setGlobalSpeedEnable(bool Enable);
00166 static bool getGlobalSpeedEnable();
00167
00173 static void setGlobalSpeedMultiplier(f32 Factor);
00175 static f32 getGlobalSpeedMultiplier();
00176
00183 static f32 getGlobalSpeed();
00184
00190 static u64 convertDuration(u64 Duration);
00191
00193 static void sleep(u32 Milliseconds);
00194
00196 static inline void yield()
00197 {
00198 sleep(1);
00199 }
00200
00201 protected:
00202
00203
00204
00205 u64 StartTime_, EndTime_, TimeOut_, Duration_;
00206
00207 private:
00208
00209 friend class sp::SoftPixelDevice;
00210
00211
00212
00213 void createFrequenceQuery();
00214
00215 static void updateGlobalFPSCounter();
00216
00217
00218
00219 #ifdef SP_PLATFORM_WINDOWS
00220 SFrequenceQuery* FreqQuery_;
00221 #endif
00222
00223 static f64 GlobalFPS_;
00224
00225 static bool GlobalSpeedEnabled_;
00226 static f32 GlobalSpeedMultiplier_;
00227 static f32 GlobalSpeed_;
00228
00229 };
00230
00231
00232 }
00233
00234 }
00235
00236
00237 #endif
00238
00239
00240
00241