Navigation Menu

Skip to content

Commit

Permalink
Clean up getTime helpers
Browse files Browse the repository at this point in the history
This increases size of the getTime return values to 64 bits.
It also removes the TimeGetter classes since the getTime functions
are now very precise.
  • Loading branch information
ShadowNinja committed Apr 28, 2017
1 parent 7f4cdbc commit b662a45
Show file tree
Hide file tree
Showing 22 changed files with 116 additions and 216 deletions.
6 changes: 3 additions & 3 deletions src/client.cpp
Expand Up @@ -1618,7 +1618,7 @@ float Client::mediaReceiveProgress()
typedef struct TextureUpdateArgs {
IrrlichtDevice *device;
gui::IGUIEnvironment *guienv;
u32 last_time_ms;
u64 last_time_ms;
u16 last_percent;
const wchar_t* text_base;
ITextureSource *tsrc;
Expand All @@ -1634,7 +1634,7 @@ void texture_update_progress(void *args, u32 progress, u32 max_progress)
u32 time_ms = targs->last_time_ms;
if (cur_percent != targs->last_percent) {
targs->last_percent = cur_percent;
time_ms = getTimeMs();
time_ms = porting::getTimeMs();
// only draw when the user will notice something:
do_draw = (time_ms - targs->last_time_ms > 100);
}
Expand Down Expand Up @@ -1692,7 +1692,7 @@ void Client::afterContentReceived(IrrlichtDevice *device)
TextureUpdateArgs tu_args;
tu_args.device = device;
tu_args.guienv = guienv;
tu_args.last_time_ms = getTimeMs();
tu_args.last_time_ms = porting::getTimeMs();
tu_args.last_percent = 0;
tu_args.text_base = wgettext("Initializing nodes");
tu_args.tsrc = m_tsrc;
Expand Down
19 changes: 0 additions & 19 deletions src/client/clientlauncher.cpp
Expand Up @@ -51,22 +51,6 @@ bool noMenuActive()
MainGameCallback *g_gamecallback = NULL;


// Instance of the time getter
static TimeGetter *g_timegetter = NULL;

u32 getTimeMs()
{
if (g_timegetter == NULL)
return 0;
return g_timegetter->getTime(PRECISION_MILLI);
}

u32 getTime(TimePrecision prec) {
if (g_timegetter == NULL)
return 0;
return g_timegetter->getTime(prec);
}

ClientLauncher::~ClientLauncher()
{
if (receiver)
Expand Down Expand Up @@ -96,9 +80,6 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
return false;
}

// Create time getter
g_timegetter = new IrrlichtTimeGetter(device);

// Speed tests (done after irrlicht is loaded to get timer)
if (cmd_args.getFlag("speedtests")) {
dstream << "Running speed tests" << std::endl;
Expand Down
36 changes: 0 additions & 36 deletions src/client/clientlauncher.h
Expand Up @@ -24,42 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/inputhandler.h"
#include "gameparams.h"

// A small helper class
class TimeGetter
{
public:
virtual u32 getTime(TimePrecision prec) = 0;
};

// A precise irrlicht one
class IrrlichtTimeGetter: public TimeGetter
{
public:
IrrlichtTimeGetter(IrrlichtDevice *device):
m_device(device)
{}
u32 getTime(TimePrecision prec)
{
if (prec == PRECISION_MILLI) {
if (m_device == NULL)
return 0;
return m_device->getTimer()->getRealTime();
} else {
return porting::getTime(prec);
}
}
private:
IrrlichtDevice *m_device;
};
// Not so precise one which works without irrlicht
class SimpleTimeGetter: public TimeGetter
{
public:
u32 getTime(TimePrecision prec)
{
return porting::getTime(prec);
}
};

class ClientLauncher
{
Expand Down
3 changes: 2 additions & 1 deletion src/client/joystick_controller.cpp
Expand Up @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "keys.h"
#include "settings.h"
#include "gettime.h"
#include "porting.h"
#include "../util/string.h"

bool JoystickButtonCmb::isTriggered(const irr::SEvent::SJoystickEvent &ev) const
Expand Down Expand Up @@ -199,7 +200,7 @@ bool JoystickController::handleEvent(const irr::SEvent::SJoystickEvent &ev)
if (ev.Joystick != m_joystick_id)
return false;

m_internal_time = getTimeMs() / 1000.f;
m_internal_time = porting::getTimeMs() / 1000.f;

std::bitset<KeyType::INTERNAL_ENUM_COUNT> keys_pressed;

Expand Down
2 changes: 1 addition & 1 deletion src/clientiface.cpp
Expand Up @@ -592,7 +592,7 @@ void RemoteClient::notifyEvent(ClientStateEvent event)

u32 RemoteClient::uptime()
{
return getTime(PRECISION_SECONDS) - m_connection_time;
return porting::getTime(PRECISION_SECONDS) - m_connection_time;
}

ClientInterface::ClientInterface(con::Connection* con)
Expand Down
3 changes: 2 additions & 1 deletion src/clientiface.h
Expand Up @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "threading/mutex.h"
#include "network/networkpacket.h"
#include "util/cpp11_container.h"
#include "porting.h"

#include <list>
#include <vector>
Expand Down Expand Up @@ -265,7 +266,7 @@ class RemoteClient
m_version_patch(0),
m_full_version("unknown"),
m_deployed_compression(0),
m_connection_time(getTime(PRECISION_SECONDS))
m_connection_time(porting::getTime(PRECISION_SECONDS))
{
}
~RemoteClient()
Expand Down
2 changes: 1 addition & 1 deletion src/database-sqlite3.cpp
Expand Up @@ -71,7 +71,7 @@ int Database_SQLite3::busyHandler(void *data, int count)
{
s64 &first_time = reinterpret_cast<s64 *>(data)[0];
s64 &prev_time = reinterpret_cast<s64 *>(data)[1];
s64 cur_time = getTimeMs();
s64 cur_time = porting::getTimeMs();

if (count == 0) {
first_time = cur_time;
Expand Down
21 changes: 3 additions & 18 deletions src/gettime.h
Expand Up @@ -21,33 +21,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define GETTIME_HEADER

#include "irrlichttypes.h"
#include <time.h>
#include <string>

/*
Get a millisecond counter value.
Precision depends on implementation.
Overflows at any value above 10000000.

Implementation of this is done in:
Normal build: main.cpp
Server build: servermain.cpp
*/
enum TimePrecision
{
PRECISION_SECONDS = 0,
PRECISION_SECONDS,
PRECISION_MILLI,
PRECISION_MICRO,
PRECISION_NANO
};

extern u32 getTimeMs();
extern u32 getTime(TimePrecision prec);

/*
Timestamp stuff
*/

#include <string>
#include <time.h>

inline std::string getTimestamp()
{
Expand Down
8 changes: 3 additions & 5 deletions src/guiChatConsole.cpp
Expand Up @@ -55,7 +55,7 @@ GUIChatConsole::GUIChatConsole(
m_client(client),
m_menumgr(menumgr),
m_screensize(v2u32(0,0)),
m_animate_time_old(0),
m_animate_time_old(porting::getTimeMs()),
m_open(false),
m_close_on_enter(false),
m_height(0),
Expand All @@ -71,8 +71,6 @@ GUIChatConsole::GUIChatConsole(
m_font(NULL),
m_fontsize(0, 0)
{
m_animate_time_old = getTimeMs();

// load background settings
s32 console_alpha = g_settings->getS32("console_alpha");
m_background_color.setAlpha(clamp_u8(console_alpha));
Expand Down Expand Up @@ -124,7 +122,7 @@ void GUIChatConsole::openConsole(f32 scale)
m_desired_height_fraction = scale;
m_desired_height = scale * m_screensize.Y;
reformatConsole();
m_animate_time_old = getTimeMs();
m_animate_time_old = porting::getTimeMs();
IGUIElement::setVisible(true);
Environment->setFocus(this);
m_menumgr->createdMenu(this);
Expand Down Expand Up @@ -212,7 +210,7 @@ void GUIChatConsole::draw()
}

// Animation
u32 now = getTimeMs();
u64 now = porting::getTimeMs();
animate(now - m_animate_time_old);
m_animate_time_old = now;

Expand Down
2 changes: 1 addition & 1 deletion src/guiChatConsole.h
Expand Up @@ -98,7 +98,7 @@ class GUIChatConsole : public gui::IGUIElement
v2u32 m_screensize;

// used to compute how much time passed since last animate()
u32 m_animate_time_old;
u64 m_animate_time_old;

// should the console be opened or closed?
bool m_open;
Expand Down
8 changes: 4 additions & 4 deletions src/guiFormSpecMenu.cpp
Expand Up @@ -2664,9 +2664,9 @@ void GUIFormSpecMenu::drawMenu()
m_old_tooltip = L"";
} else {
if (id == m_old_tooltip_id) {
delta = porting::getDeltaMs(m_hovered_time, getTimeMs());
delta = porting::getDeltaMs(m_hovered_time, porting::getTimeMs());
} else {
m_hovered_time = getTimeMs();
m_hovered_time = porting::getTimeMs();
m_old_tooltip_id = id;
}
}
Expand Down Expand Up @@ -3244,10 +3244,10 @@ bool GUIFormSpecMenu::DoubleClickDetection(const SEvent event)
m_doubleclickdetect[0].time = m_doubleclickdetect[1].time;

m_doubleclickdetect[1].pos = m_pointer;
m_doubleclickdetect[1].time = getTimeMs();
m_doubleclickdetect[1].time = porting::getTimeMs();
}
else if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) {
u32 delta = porting::getDeltaMs(m_doubleclickdetect[0].time, getTimeMs());
u32 delta = porting::getDeltaMs(m_doubleclickdetect[0].time, porting::getTimeMs());
if (delta > 400) {
return false;
}
Expand Down
4 changes: 2 additions & 2 deletions src/guiFormSpecMenu.h
Expand Up @@ -421,7 +421,7 @@ class GUIFormSpecMenu : public GUIModalMenu
gui::IGUIStaticText *m_tooltip_element;

u32 m_tooltip_show_delay;
s32 m_hovered_time;
s64 m_hovered_time;
s32 m_old_tooltip_id;
std::wstring m_old_tooltip;

Expand Down Expand Up @@ -527,7 +527,7 @@ class GUIFormSpecMenu : public GUIModalMenu
struct clickpos
{
v2s32 pos;
s32 time;
s64 time;
};
clickpos m_doubleclickdetect[2];

Expand Down
2 changes: 1 addition & 1 deletion src/guiTable.cpp
Expand Up @@ -828,7 +828,7 @@ bool GUITable::OnEvent(const SEvent &event)
}
else if (event.KeyInput.PressedDown && event.KeyInput.Char) {
// change selection based on text as it is typed
s32 now = getTimeMs();
u64 now = porting::getTimeMs();
if (now - m_keynav_time >= 500)
m_keynav_buffer = L"";
m_keynav_time = now;
Expand Down
2 changes: 1 addition & 1 deletion src/guiTable.h
Expand Up @@ -196,7 +196,7 @@ class GUITable : public gui::IGUIElement
bool m_sel_doubleclick;

// Keyboard navigation stuff
s32 m_keynav_time;
u64 m_keynav_time;
core::stringw m_keynav_buffer;

// Drawing and geometry information
Expand Down
6 changes: 3 additions & 3 deletions src/hud.cpp
Expand Up @@ -619,7 +619,7 @@ void Hud::resizeHotbar() {
}

struct MeshTimeInfo {
s32 time;
s64 time;
scene::IMesh *mesh;
};

Expand Down Expand Up @@ -653,9 +653,9 @@ void drawItemStack(video::IVideoDriver *driver,
MeshTimeInfo &ti = rotation_time_infos[rotation_kind];
if (mesh != ti.mesh) {
ti.mesh = mesh;
ti.time = getTimeMs();
ti.time = porting::getTimeMs();
} else {
delta = porting::getDeltaMs(ti.time, getTimeMs()) % 100000;
delta = porting::getDeltaMs(ti.time, porting::getTimeMs()) % 100000;
}
}
core::rect<s32> oldViewPort = driver->getViewPort();
Expand Down
18 changes: 0 additions & 18 deletions src/main.cpp
Expand Up @@ -107,24 +107,6 @@ static bool migrate_map_database(const GameParams &game_params, const Settings &

/**********************************************************************/

/*
gettime.h implementation
*/

#ifdef SERVER

u32 getTimeMs()
{
/* Use imprecise system calls directly (from porting.h) */
return porting::getTime(PRECISION_MILLI);
}

u32 getTime(TimePrecision prec)
{
return porting::getTime(prec);
}

#endif

FileLogOutput file_log_output;

Expand Down
2 changes: 1 addition & 1 deletion src/map.cpp
Expand Up @@ -981,7 +981,7 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks,

time_until_purge *= 1000; // seconds -> milliseconds

u32 curr_time = getTime(PRECISION_MILLI);
u32 curr_time = porting::getTime(PRECISION_MILLI);
u32 prev_unprocessed = m_unprocessed_count;
m_unprocessed_count = m_transforming_liquid.size();

Expand Down
13 changes: 13 additions & 0 deletions src/porting.cpp
Expand Up @@ -942,5 +942,18 @@ void attachOrCreateConsole(void)
#endif
}

// Load performance counter frequency only once at startup
#ifdef _WIN32

inline double get_perf_freq()
{
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
return freq.QuadPart;
}

double perf_freq = get_perf_freq();

#endif

} //namespace porting

0 comments on commit b662a45

Please sign in to comment.