mirror of
https://github.com/xzeldon/htop.git
synced 2025-07-12 12:14:36 +03:00
Refactor Darwin platform unit conversion helpers
This commit is contained in:
@ -120,9 +120,9 @@ const MeterClass* const Platform_meterTypes[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
double Platform_timebaseToNS = 1.0;
|
||||
static double Platform_nanosecondsPerMachTick = 1.0;
|
||||
|
||||
long Platform_clockTicksPerSec = -1;
|
||||
static double Platform_schedulerTicksPerNS = -1;
|
||||
|
||||
void Platform_init(void) {
|
||||
// Check if we can determine the timebase used on this system.
|
||||
@ -130,18 +130,33 @@ void Platform_init(void) {
|
||||
#ifdef HAVE_MACH_TIMEBASE_INFO
|
||||
mach_timebase_info_data_t info;
|
||||
mach_timebase_info(&info);
|
||||
Platform_timebaseToNS = (double)info.numer / (double)info.denom;
|
||||
Platform_nanosecondsPerMachTick = (double)info.numer / (double)info.denom;
|
||||
#else
|
||||
Platform_timebaseToNS = 1.0;
|
||||
Platform_nanosecondsPerMachTick = 1.0;
|
||||
#endif
|
||||
|
||||
// Determine the number of clock ticks per second
|
||||
// Determine the number of scheduler clock ticks per second
|
||||
errno = 0;
|
||||
Platform_clockTicksPerSec = sysconf(_SC_CLK_TCK);
|
||||
long scheduler_ticks_per_sec = sysconf(_SC_CLK_TCK);
|
||||
|
||||
if (errno || Platform_clockTicksPerSec < 1) {
|
||||
if (errno || scheduler_ticks_per_sec < 1) {
|
||||
CRT_fatalError("Unable to retrieve clock tick rate");
|
||||
}
|
||||
|
||||
const double nanos_per_sec = 1e9;
|
||||
Platform_schedulerTicksPerNS = nanos_per_sec / scheduler_ticks_per_sec;
|
||||
}
|
||||
|
||||
// Converts ticks in the Mach "timebase" to nanoseconds.
|
||||
// See `mach_timebase_info`, as used to define the `Platform_nanosecondsPerMachTick` constant.
|
||||
uint64_t Platform_machTicksToNanoseconds(uint64_t mach_ticks) {
|
||||
return (uint64_t) ((double) mach_ticks * Platform_nanosecondsPerMachTick);
|
||||
}
|
||||
|
||||
// Converts "scheduler ticks" to nanoseconds.
|
||||
// See `sysconf(_SC_CLK_TCK)`, as used to define the `Platform_schedulerTicksPerNS` constant.
|
||||
double Platform_schedulerTicksToNanoseconds(const double scheduler_ticks) {
|
||||
return scheduler_ticks * Platform_schedulerTicksPerNS;
|
||||
}
|
||||
|
||||
void Platform_done(void) {
|
||||
|
Reference in New Issue
Block a user