1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 13:37:45 +00:00

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.
This commit is contained in:
Andrew Kaster 2023-01-01 22:30:31 -07:00 committed by Linus Groh
parent 82a01bf32f
commit 4afa6e264c
3 changed files with 12 additions and 26 deletions

View file

@ -7,8 +7,6 @@
#include <AK/Assertions.h> #include <AK/Assertions.h>
#include <AK/Time.h> #include <AK/Time.h>
#include <LibCore/ElapsedTimer.h> #include <LibCore/ElapsedTimer.h>
#include <sys/time.h>
#include <time.h>
namespace Core { namespace Core {
@ -22,34 +20,25 @@ ElapsedTimer ElapsedTimer::start_new()
void ElapsedTimer::start() void ElapsedTimer::start()
{ {
m_valid = true; m_valid = true;
timespec now_spec; m_origin_time = m_precise ? Time::now_monotonic() : Time::now_monotonic_coarse();
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;
} }
void ElapsedTimer::reset() void ElapsedTimer::reset()
{ {
m_valid = false; m_valid = false;
m_origin_time = { 0, 0 }; m_origin_time = {};
} }
int ElapsedTimer::elapsed() const i64 ElapsedTimer::elapsed() const
{ {
VERIFY(is_valid()); return elapsed_time().to_milliseconds();
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;
} }
Time ElapsedTimer::elapsed_time() const 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;
} }
} }

View file

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

View file

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