summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author <shinichiro.hamaji@gmail.com>2009-04-09 07:49:44 +0000
committer <shinichiro.hamaji@gmail.com>2009-04-09 07:49:44 +0000
commitddfd1884b6f3c40bfcb71bdcad88026a2ea5f58c (patch)
treeabf2e4ac94d42c9be99a23bdd9a2bcfe2796ef33 /src
parent8cf64cc167db391d6e46b6863a85925ff8021f27 (diff)
downloadglog-ddfd1884b6f3c40bfcb71bdcad88026a2ea5f58c.tar.gz
glog-ddfd1884b6f3c40bfcb71bdcad88026a2ea5f58c.tar.bz2
glog-ddfd1884b6f3c40bfcb71bdcad88026a2ea5f58c.zip
A bug fix for Windows: Use GetSystemTimeAsFileTime instead of GetSystemTime. SYSTEMTIME's mSecond is not a unix time but like tm.tm_sec.
git-svn-id: https://google-glog.googlecode.com/svn/trunk@45 eb4d4688-79bd-11dd-afb4-1d65580434c0
Diffstat (limited to 'src')
-rw-r--r--src/utilities.cc31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/utilities.cc b/src/utilities.cc
index 5a0322c..3efe779 100644
--- a/src/utilities.cc
+++ b/src/utilities.cc
@@ -184,18 +184,35 @@ bool is_default_thread() {
}
}
+#ifdef OS_WINDOWS
+struct timeval {
+ long tv_sec, tv_usec;
+};
+
+// Based on: http://www.google.com/codesearch/p?hl=en#dR3YEbitojA/os_win32.c&q=GetSystemTimeAsFileTime%20license:bsd
+// See COPYING for copyright information.
+static int gettimeofday(struct timeval *tv, void* tz) {
+#define EPOCHFILETIME (116444736000000000ULL)
+ FILETIME ft;
+ LARGE_INTEGER li;
+ uint64 tt;
+
+ GetSystemTimeAsFileTime(&ft);
+ li.LowPart = ft.dwLowDateTime;
+ li.HighPart = ft.dwHighDateTime;
+ tt = (li.QuadPart - EPOCHFILETIME) / 10;
+ tv->tv_sec = tt / 1000000;
+ tv->tv_usec = tt % 1000000;
+
+ return 0;
+}
+#endif
+
int64 CycleClock_Now() {
// TODO(hamaji): temporary impementation - it might be too slow.
-#ifdef OS_WINDOWS
- SYSTEMTIME now;
- GetSystemTime(&now);
- return (static_cast<int64>(now.wSecond) * 1000000 +
- static_cast<int64>(now.wMilliseconds) * 1000);
-#else
struct timeval tv;
gettimeofday(&tv, NULL);
return static_cast<int64>(tv.tv_sec) * 1000000 + tv.tv_usec;
-#endif
}
int64 UsecToCycles(int64 usec) {