Index: third_party/google_benchmark/src/sleep.cc |
diff --git a/third_party/google_benchmark/src/sleep.cc b/third_party/google_benchmark/src/sleep.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..54aa04a422472d1ce09a59c1d63c43b469e43cff |
--- /dev/null |
+++ b/third_party/google_benchmark/src/sleep.cc |
@@ -0,0 +1,51 @@ |
+// Copyright 2015 Google Inc. All rights reserved. |
+// |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// you may not use this file except in compliance with the License. |
+// You may obtain a copy of the License at |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// Unless required by applicable law or agreed to in writing, software |
+// distributed under the License is distributed on an "AS IS" BASIS, |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// See the License for the specific language governing permissions and |
+// limitations under the License. |
+ |
+#include "sleep.h" |
+ |
+#include <cerrno> |
+#include <cstdlib> |
+#include <ctime> |
+ |
+#include "internal_macros.h" |
+ |
+#ifdef BENCHMARK_OS_WINDOWS |
+#include <Windows.h> |
+#endif |
+ |
+namespace benchmark { |
+#ifdef BENCHMARK_OS_WINDOWS |
+// Window's Sleep takes milliseconds argument. |
+void SleepForMilliseconds(int milliseconds) { Sleep(milliseconds); } |
+void SleepForSeconds(double seconds) { |
+ SleepForMilliseconds(static_cast<int>(kNumMillisPerSecond * seconds)); |
+} |
+#else // BENCHMARK_OS_WINDOWS |
+void SleepForMicroseconds(int microseconds) { |
+ struct timespec sleep_time; |
+ sleep_time.tv_sec = microseconds / kNumMicrosPerSecond; |
+ sleep_time.tv_nsec = (microseconds % kNumMicrosPerSecond) * kNumNanosPerMicro; |
+ while (nanosleep(&sleep_time, &sleep_time) != 0 && errno == EINTR) |
+ ; // Ignore signals and wait for the full interval to elapse. |
+} |
+ |
+void SleepForMilliseconds(int milliseconds) { |
+ SleepForMicroseconds(milliseconds * kNumMicrosPerMilli); |
+} |
+ |
+void SleepForSeconds(double seconds) { |
+ SleepForMicroseconds(static_cast<int>(seconds * kNumMicrosPerSecond)); |
+} |
+#endif // BENCHMARK_OS_WINDOWS |
+} // end namespace benchmark |