From 6f9a084ac8a820450632f17384161c6a24da86d3 Mon Sep 17 00:00:00 2001 From: Maximillian Date: Thu, 6 Aug 2015 10:29:33 -0700 Subject: [PATCH 1/2] Add OS.get_system_time_msec --- core/bind/core_bind.cpp | 5 +++++ core/bind/core_bind.h | 1 + core/os/os.cpp | 4 +++- core/os/os.h | 1 + drivers/unix/os_unix.cpp | 7 +++++++ drivers/unix/os_unix.h | 1 + platform/windows/os_windows.cpp | 6 ++++++ platform/windows/os_windows.h | 3 ++- 8 files changed, 26 insertions(+), 2 deletions(-) diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index 6a3023cdb2f..b4bf1ed4bd5 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -494,6 +494,10 @@ uint64_t _OS::get_unix_time() const { return OS::get_singleton()->get_unix_time(); }; +uint64_t _OS::get_system_time_msec() const { + return OS::get_singleton()->get_system_time_msec(); +} + void _OS::delay_usec(uint32_t p_usec) const { OS::get_singleton()->delay_usec(p_usec); @@ -801,6 +805,7 @@ void _OS::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_time","utc"),&_OS::get_time,DEFVAL(false)); ObjectTypeDB::bind_method(_MD("get_time_zone_info"),&_OS::get_time_zone_info); ObjectTypeDB::bind_method(_MD("get_unix_time"),&_OS::get_unix_time); + ObjectTypeDB::bind_method(_MD("get_system_time_msec"), &_OS::get_system_time_msec); ObjectTypeDB::bind_method(_MD("set_icon"),&_OS::set_icon); diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index 6b916a395e5..ed3db292595 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -208,6 +208,7 @@ public: Dictionary get_time(bool utc) const; Dictionary get_time_zone_info() const; uint64_t get_unix_time() const; + uint64_t get_system_time_msec() const; int get_static_memory_usage() const; int get_static_memory_peak_usage() const; diff --git a/core/os/os.cpp b/core/os/os.cpp index f292456079c..efcd492230f 100644 --- a/core/os/os.cpp +++ b/core/os/os.cpp @@ -50,7 +50,9 @@ uint64_t OS::get_unix_time() const { return 0; }; - +uint64_t OS::get_system_time_msec() const { + return 0; +} void OS::debug_break() { // something diff --git a/core/os/os.h b/core/os/os.h index 0230a75ca08..e8ecfa10548 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -254,6 +254,7 @@ public: virtual Time get_time(bool local=false) const=0; virtual TimeZoneInfo get_time_zone_info() const=0; virtual uint64_t get_unix_time() const; + virtual uint64_t get_system_time_msec() const; virtual void delay_usec(uint32_t p_usec) const=0; virtual uint64_t get_ticks_usec() const=0; diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index f6d9e0fb4e8..1afd0be61da 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -223,6 +223,13 @@ uint64_t OS_Unix::get_unix_time() const { return time(NULL); }; +uint64_t OS_Unix::get_system_time_msec() const { + struct timeval tv_now; + gettimeofday(&tv_now, null); + uint64_t msec = tv_now.tv_.sec / 1000; + return msec; +} + OS::Date OS_Unix::get_date(bool utc) const { diff --git a/drivers/unix/os_unix.h b/drivers/unix/os_unix.h index 8bb57eda129..2ee6102164d 100644 --- a/drivers/unix/os_unix.h +++ b/drivers/unix/os_unix.h @@ -93,6 +93,7 @@ public: virtual TimeZoneInfo get_time_zone_info() const; virtual uint64_t get_unix_time() const; + virtual uint64_t get_system_time_msec() const; virtual void delay_usec(uint32_t p_usec) const; virtual uint64_t get_ticks_usec() const; diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index ec9e17c4f01..87d9a43d8c8 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -1899,6 +1899,12 @@ uint64_t OS_Windows::get_unix_time() const { return (*(uint64_t*)&ft - *(uint64_t*)&fep) / 10000000; }; +uint64_t OS_Windows::get_system_time_msec() const { + SYSTEMTIME st; + GetSystemTime(&st); + return st.wMilliseconds; +} + void OS_Windows::delay_usec(uint32_t p_usec) const { if (p_usec < 1000) diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index 31e030d02eb..cce94f5b256 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -263,6 +263,7 @@ public: virtual Time get_time(bool utc) const; virtual TimeZoneInfo get_time_zone_info() const; virtual uint64_t get_unix_time() const; + virtual uint64_t get_system_time_msec() const; virtual bool can_draw() const; virtual Error set_cwd(const String& p_cwd); @@ -272,7 +273,7 @@ public: virtual Error execute(const String& p_path, const List& p_arguments,bool p_blocking,ProcessID *r_child_id=NULL,String* r_pipe=NULL,int *r_exitcode=NULL); virtual Error kill(const ProcessID& p_pid); - + virtual bool has_environment(const String& p_var) const; virtual String get_environment(const String& p_var) const; From 6b25e83ba73ae3321aff00d7b3192d8cd80c410c Mon Sep 17 00:00:00 2001 From: xodene Date: Thu, 6 Aug 2015 11:08:48 -0700 Subject: [PATCH 2/2] tested and fixed unix os_system_time_msec() --- drivers/unix/os_unix.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index 1afd0be61da..314e13cee4a 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -225,8 +225,9 @@ uint64_t OS_Unix::get_unix_time() const { uint64_t OS_Unix::get_system_time_msec() const { struct timeval tv_now; - gettimeofday(&tv_now, null); - uint64_t msec = tv_now.tv_.sec / 1000; + gettimeofday(&tv_now, NULL); + localtime(&tv_now.tv_usec); + uint64_t msec = tv_now.tv_usec/1000; return msec; }