Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/resources/contents/code/extensions/sleep.cc
- This file was added.
// 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 |