1*58b9f456SAndroid Build Coastguard Worker // Copyright 2015 Google Inc. All rights reserved. 2*58b9f456SAndroid Build Coastguard Worker // 3*58b9f456SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*58b9f456SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*58b9f456SAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*58b9f456SAndroid Build Coastguard Worker // 7*58b9f456SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*58b9f456SAndroid Build Coastguard Worker // 9*58b9f456SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*58b9f456SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*58b9f456SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*58b9f456SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*58b9f456SAndroid Build Coastguard Worker // limitations under the License. 14*58b9f456SAndroid Build Coastguard Worker 15*58b9f456SAndroid Build Coastguard Worker #include "sleep.h" 16*58b9f456SAndroid Build Coastguard Worker 17*58b9f456SAndroid Build Coastguard Worker #include <cerrno> 18*58b9f456SAndroid Build Coastguard Worker #include <cstdlib> 19*58b9f456SAndroid Build Coastguard Worker #include <ctime> 20*58b9f456SAndroid Build Coastguard Worker 21*58b9f456SAndroid Build Coastguard Worker #include "internal_macros.h" 22*58b9f456SAndroid Build Coastguard Worker 23*58b9f456SAndroid Build Coastguard Worker #ifdef BENCHMARK_OS_WINDOWS 24*58b9f456SAndroid Build Coastguard Worker #include <windows.h> 25*58b9f456SAndroid Build Coastguard Worker #endif 26*58b9f456SAndroid Build Coastguard Worker 27*58b9f456SAndroid Build Coastguard Worker namespace benchmark { 28*58b9f456SAndroid Build Coastguard Worker #ifdef BENCHMARK_OS_WINDOWS 29*58b9f456SAndroid Build Coastguard Worker // Window's Sleep takes milliseconds argument. SleepForMilliseconds(int milliseconds)30*58b9f456SAndroid Build Coastguard Workervoid SleepForMilliseconds(int milliseconds) { Sleep(milliseconds); } SleepForSeconds(double seconds)31*58b9f456SAndroid Build Coastguard Workervoid SleepForSeconds(double seconds) { 32*58b9f456SAndroid Build Coastguard Worker SleepForMilliseconds(static_cast<int>(kNumMillisPerSecond * seconds)); 33*58b9f456SAndroid Build Coastguard Worker } 34*58b9f456SAndroid Build Coastguard Worker #else // BENCHMARK_OS_WINDOWS 35*58b9f456SAndroid Build Coastguard Worker void SleepForMicroseconds(int microseconds) { 36*58b9f456SAndroid Build Coastguard Worker struct timespec sleep_time; 37*58b9f456SAndroid Build Coastguard Worker sleep_time.tv_sec = microseconds / kNumMicrosPerSecond; 38*58b9f456SAndroid Build Coastguard Worker sleep_time.tv_nsec = (microseconds % kNumMicrosPerSecond) * kNumNanosPerMicro; 39*58b9f456SAndroid Build Coastguard Worker while (nanosleep(&sleep_time, &sleep_time) != 0 && errno == EINTR) 40*58b9f456SAndroid Build Coastguard Worker ; // Ignore signals and wait for the full interval to elapse. 41*58b9f456SAndroid Build Coastguard Worker } 42*58b9f456SAndroid Build Coastguard Worker 43*58b9f456SAndroid Build Coastguard Worker void SleepForMilliseconds(int milliseconds) { 44*58b9f456SAndroid Build Coastguard Worker SleepForMicroseconds(milliseconds * kNumMicrosPerMilli); 45*58b9f456SAndroid Build Coastguard Worker } 46*58b9f456SAndroid Build Coastguard Worker 47*58b9f456SAndroid Build Coastguard Worker void SleepForSeconds(double seconds) { 48*58b9f456SAndroid Build Coastguard Worker SleepForMicroseconds(static_cast<int>(seconds * kNumMicrosPerSecond)); 49*58b9f456SAndroid Build Coastguard Worker } 50*58b9f456SAndroid Build Coastguard Worker #endif // BENCHMARK_OS_WINDOWS 51*58b9f456SAndroid Build Coastguard Worker } // end namespace benchmark 52