Increase tick precision in TaskQueue on Windows 64.
Hopefully this will reduce the flakiness of PostDelayedTask.

BUG=none

Review-Url: https://codereview.webrtc.org/2728663008
Cr-Commit-Position: refs/heads/master@{#17001}
diff --git a/webrtc/base/task_queue_unittest.cc b/webrtc/base/task_queue_unittest.cc
index c5faf8f..432a0d5 100644
--- a/webrtc/base/task_queue_unittest.cc
+++ b/webrtc/base/task_queue_unittest.cc
@@ -102,7 +102,7 @@
 TEST(TaskQueueTest, PostDelayed) {
   static const char kQueueName[] = "PostDelayed";
   Event event(false, false);
-  TaskQueue queue(kQueueName);
+  TaskQueue queue(kQueueName, TaskQueue::Priority::HIGH);
 
   uint32_t start = Time();
   queue.PostDelayedTask(Bind(&CheckCurrent, kQueueName, &event, &queue), 100);
diff --git a/webrtc/base/task_queue_win.cc b/webrtc/base/task_queue_win.cc
index 5850b29..bbaf7b9 100644
--- a/webrtc/base/task_queue_win.cc
+++ b/webrtc/base/task_queue_win.cc
@@ -66,6 +66,17 @@
   }
   return kNormalPriority;
 }
+
+#if defined(_WIN64)
+DWORD GetTick() {
+  static const UINT kPeriod = 1;
+  bool high_res = (timeBeginPeriod(kPeriod) == TIMERR_NOERROR);
+  DWORD ret = timeGetTime();
+  if (high_res)
+    timeEndPeriod(kPeriod);
+  return ret;
+}
+#endif
 }  // namespace
 
 class TaskQueue::MultimediaTimer {
@@ -214,7 +225,7 @@
   // GetTickCount() returns a fairly coarse tick count (resolution or about 8ms)
   // so this compensation isn't that accurate, but since we have unused 32 bits
   // on Win64, we might as well use them.
-  wparam = (static_cast<WPARAM>(::GetTickCount()) << 32) | milliseconds;
+  wparam = (static_cast<WPARAM>(GetTick()) << 32) | milliseconds;
 #else
   wparam = milliseconds;
 #endif
@@ -325,7 +336,7 @@
           uint32_t milliseconds = msg.wParam & 0xFFFFFFFF;
 #if defined(_WIN64)
           // Subtract the time it took to queue the timer.
-          const DWORD now = GetTickCount();
+          const DWORD now = GetTick();
           DWORD post_time = now - (msg.wParam >> 32);
           milliseconds =
               post_time > milliseconds ? 0 : milliseconds - post_time;