Преглед изворни кода

LibCore+LibWeb: Use AK::Time instead of timeval in Core::ElapsedTimer

This removes the direct dependency on sys/time.h from ElapsedTimer, and
makes the code a lot cleaner by using the helpers from AK::Time for
time math and getting the current timestamp.
Andrew Kaster пре 2 година
родитељ
комит
4afa6e264c

+ 7 - 18
Userland/Libraries/LibCore/ElapsedTimer.cpp

@@ -7,8 +7,6 @@
 #include <AK/Assertions.h>
 #include <AK/Time.h>
 #include <LibCore/ElapsedTimer.h>
-#include <sys/time.h>
-#include <time.h>
 
 namespace Core {
 
@@ -22,34 +20,25 @@ ElapsedTimer ElapsedTimer::start_new()
 void ElapsedTimer::start()
 {
     m_valid = true;
-    timespec now_spec;
-    clock_gettime(m_precise ? CLOCK_MONOTONIC : CLOCK_MONOTONIC_COARSE, &now_spec);
-    m_origin_time.tv_sec = now_spec.tv_sec;
-    m_origin_time.tv_usec = now_spec.tv_nsec / 1000;
+    m_origin_time = m_precise ? Time::now_monotonic() : Time::now_monotonic_coarse();
 }
 
 void ElapsedTimer::reset()
 {
     m_valid = false;
-    m_origin_time = { 0, 0 };
+    m_origin_time = {};
 }
 
-int ElapsedTimer::elapsed() const
+i64 ElapsedTimer::elapsed() const
 {
-    VERIFY(is_valid());
-    struct timeval now;
-    timespec now_spec;
-    clock_gettime(m_precise ? CLOCK_MONOTONIC : CLOCK_MONOTONIC_COARSE, &now_spec);
-    now.tv_sec = now_spec.tv_sec;
-    now.tv_usec = now_spec.tv_nsec / 1000;
-    struct timeval diff;
-    timeval_sub(now, m_origin_time, diff);
-    return diff.tv_sec * 1000 + diff.tv_usec / 1000;
+    return elapsed_time().to_milliseconds();
 }
 
 Time ElapsedTimer::elapsed_time() const
 {
-    return Time::from_milliseconds(elapsed());
+    VERIFY(is_valid());
+    auto now = m_precise ? Time::now_monotonic() : Time::now_monotonic_coarse();
+    return now - m_origin_time;
 }
 
 }

+ 4 - 6
Userland/Libraries/LibCore/ElapsedTimer.h

@@ -7,7 +7,6 @@
 #pragma once
 
 #include <AK/Time.h>
-#include <sys/time.h>
 
 namespace Core {
 
@@ -23,17 +22,16 @@ public:
     bool is_valid() const { return m_valid; }
     void start();
     void reset();
-    int elapsed() const;
+
+    i64 elapsed() const; // milliseconds
     Time elapsed_time() const;
 
-    const struct timeval& origin_time() const { return m_origin_time; }
+    Time const& origin_time() const { return m_origin_time; }
 
 private:
+    Time m_origin_time {};
     bool m_precise { false };
     bool m_valid { false };
-    struct timeval m_origin_time {
-        0, 0
-    };
 };
 
 }

+ 1 - 2
Userland/Libraries/LibWeb/HighResolutionTime/Performance.cpp

@@ -39,8 +39,7 @@ JS::GCPtr<NavigationTiming::PerformanceTiming> Performance::timing()
 
 double Performance::time_origin() const
 {
-    auto origin = m_timer.origin_time();
-    return (origin.tv_sec * 1000.0) + (origin.tv_usec / 1000.0);
+    return static_cast<double>(m_timer.origin_time().to_milliseconds());
 }
 
 }