summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-12-16 22:55:04 -0600
committerGitHub <noreply@github.com>2019-12-16 22:55:04 -0600
commit06eae17d656fd281e05ca28d4e38696fc05d2dbf (patch)
tree3cd1f386e75cfdefaedb1ba19f8fbdc5533fc5b7 /vespalib
parent72e3bfb3c55653e57991ba3aff1f58f25f20dd8b (diff)
Revert "Revert "Balder/remove steadytimestamp 2""
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/tests/time/time_test.cpp10
-rw-r--r--vespalib/src/vespa/vespalib/testkit/test_comparators.cpp6
-rw-r--r--vespalib/src/vespa/vespalib/testkit/test_comparators.h2
-rw-r--r--vespalib/src/vespa/vespalib/util/time.cpp7
-rw-r--r--vespalib/src/vespa/vespalib/util/time.h6
5 files changed, 29 insertions, 2 deletions
diff --git a/vespalib/src/tests/time/time_test.cpp b/vespalib/src/tests/time/time_test.cpp
index 667511f6a94..40542b6ca62 100644
--- a/vespalib/src/tests/time/time_test.cpp
+++ b/vespalib/src/tests/time/time_test.cpp
@@ -29,6 +29,16 @@ TEST(TimeTest, double_conversion_works_as_expected) {
EXPECT_EQ(10ms, from_s(0.010));
}
+TEST(TimeTest, timeval_conversion_works_as_expected) {
+ timeval tv1;
+ tv1.tv_sec = 7;
+ tv1.tv_usec = 342356;
+ EXPECT_EQ(from_timeval(tv1), 7342356us);
+ tv1.tv_sec = 7;
+ tv1.tv_usec = 1342356;
+ EXPECT_EQ(from_timeval(tv1), 8342356us);
+}
+
TEST(TimeTest, unit_counting_works_as_expected) {
auto d = 3ms + 5us + 7ns;
EXPECT_EQ(count_ns(d), 3005007);
diff --git a/vespalib/src/vespa/vespalib/testkit/test_comparators.cpp b/vespalib/src/vespa/vespalib/testkit/test_comparators.cpp
index d00ad8d954c..b30b3aaa421 100644
--- a/vespalib/src/vespa/vespalib/testkit/test_comparators.cpp
+++ b/vespalib/src/vespa/vespalib/testkit/test_comparators.cpp
@@ -8,7 +8,11 @@ ostream & operator << (ostream & os, system_clock::time_point ts) {
return os << ts.time_since_epoch() << "ns";
}
+ostream & operator << (ostream & os, steady_clock::time_point ts) {
+ return os << ts.time_since_epoch() << "ns";
+}
+
}
namespace vespalib {
-} // namespace vespalib
+} \ No newline at end of file
diff --git a/vespalib/src/vespa/vespalib/testkit/test_comparators.h b/vespalib/src/vespa/vespalib/testkit/test_comparators.h
index 161c125757b..164e486cf4a 100644
--- a/vespalib/src/vespa/vespalib/testkit/test_comparators.h
+++ b/vespalib/src/vespa/vespalib/testkit/test_comparators.h
@@ -14,7 +14,7 @@ ostream & operator << (ostream & os, duration<rep, period> ts) {
}
ostream & operator << (ostream & os, system_clock::time_point ts);
-
+ostream & operator << (ostream & os, steady_clock::time_point ts);
}
diff --git a/vespalib/src/vespa/vespalib/util/time.cpp b/vespalib/src/vespa/vespalib/util/time.cpp
index d38e40a6d6a..fdd13849287 100644
--- a/vespalib/src/vespa/vespalib/util/time.cpp
+++ b/vespalib/src/vespa/vespalib/util/time.cpp
@@ -4,6 +4,13 @@
namespace vespalib {
+system_time
+to_utc(steady_time ts) {
+ system_clock::time_point nowUtc = system_clock::now();
+ steady_time nowSteady = steady_clock::now();
+ return system_time(nowUtc.time_since_epoch() - nowSteady.time_since_epoch() + ts.time_since_epoch());
+}
+
Timer::~Timer() = default;
}
diff --git a/vespalib/src/vespa/vespalib/util/time.h b/vespalib/src/vespa/vespalib/util/time.h
index 2f8ae0ae016..3111239ffab 100644
--- a/vespalib/src/vespa/vespalib/util/time.h
+++ b/vespalib/src/vespa/vespalib/util/time.h
@@ -39,6 +39,8 @@ constexpr double to_s(duration d) {
return std::chrono::duration_cast<std::chrono::duration<double>>(d).count();
}
+system_time to_utc(steady_time ts);
+
constexpr duration from_s(double seconds) {
return std::chrono::duration_cast<duration>(std::chrono::duration<double>(seconds));
}
@@ -55,6 +57,10 @@ constexpr int64_t count_ns(duration d) {
return std::chrono::duration_cast<std::chrono::nanoseconds>(d).count();
}
+constexpr duration from_timeval(const timeval & tv) {
+ return duration(tv.tv_sec*1000000000L + tv.tv_usec*1000L);
+}
+
/**
* Simple utility class used to measure how much time has elapsed
* since it was constructed.