clock.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Copyright 2017 The Abseil Authors.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // https://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. //
  15. // -----------------------------------------------------------------------------
  16. // File: clock.h
  17. // -----------------------------------------------------------------------------
  18. //
  19. // This header file contains utility functions for working with the system-wide
  20. // realtime clock. For descriptions of the main time abstractions used within
  21. // this header file, consult the time.h header file.
  22. #ifndef Y_ABSL_TIME_CLOCK_H_
  23. #define Y_ABSL_TIME_CLOCK_H_
  24. #include "y_absl/base/macros.h"
  25. #include "y_absl/time/time.h"
  26. namespace y_absl {
  27. Y_ABSL_NAMESPACE_BEGIN
  28. // Now()
  29. //
  30. // Returns the current time, expressed as an `y_absl::Time` absolute time value.
  31. y_absl::Time Now();
  32. // GetCurrentTimeNanos()
  33. //
  34. // Returns the current time, expressed as a count of nanoseconds since the Unix
  35. // Epoch (https://en.wikipedia.org/wiki/Unix_time). Prefer `y_absl::Now()` instead
  36. // for all but the most performance-sensitive cases (i.e. when you are calling
  37. // this function hundreds of thousands of times per second).
  38. int64_t GetCurrentTimeNanos();
  39. // SleepFor()
  40. //
  41. // Sleeps for the specified duration, expressed as an `y_absl::Duration`.
  42. //
  43. // Notes:
  44. // * Signal interruptions will not reduce the sleep duration.
  45. // * Returns immediately when passed a nonpositive duration.
  46. void SleepFor(y_absl::Duration duration);
  47. Y_ABSL_NAMESPACE_END
  48. } // namespace y_absl
  49. // -----------------------------------------------------------------------------
  50. // Implementation Details
  51. // -----------------------------------------------------------------------------
  52. // In some build configurations we pass --detect-odr-violations to the
  53. // gold linker. This causes it to flag weak symbol overrides as ODR
  54. // violations. Because ODR only applies to C++ and not C,
  55. // --detect-odr-violations ignores symbols not mangled with C++ names.
  56. // By changing our extension points to be extern "C", we dodge this
  57. // check.
  58. extern "C" {
  59. void Y_ABSL_INTERNAL_C_SYMBOL(AbslInternalSleepFor)(y_absl::Duration duration);
  60. } // extern "C"
  61. inline void y_absl::SleepFor(y_absl::Duration duration) {
  62. Y_ABSL_INTERNAL_C_SYMBOL(AbslInternalSleepFor)(duration);
  63. }
  64. #endif // Y_ABSL_TIME_CLOCK_H_