nsresult TimeStamp::Startup() { if (gInitialized) return NS_OK; mach_timebase_info_data_t timebaseInfo; // Apple's QA1398 suggests that the output from mach_timebase_info // will not change while a program is running, so it should be safe // to cache the result. kern_return_t kr = mach_timebase_info(&timebaseInfo); if (kr != KERN_SUCCESS) NS_RUNTIMEABORT("mach_timebase_info failed"); sNsPerTick = double(timebaseInfo.numer) / timebaseInfo.denom; sResolution = ClockResolutionNs(); // find the number of significant digits in sResolution, for the // sake of ToSecondsSigDigits() for (sResolutionSigDigs = 1; !(sResolutionSigDigs == sResolution || 10*sResolutionSigDigs > sResolution); sResolutionSigDigs *= 10); gInitialized = true; return NS_OK; }
nsresult TimeStamp::Startup() { if (gInitialized) return NS_OK; struct timespec dummy; if (0 != clock_gettime(CLOCK_MONOTONIC, &dummy)) NS_RUNTIMEABORT("CLOCK_MONOTONIC is absent!"); sResolution = ClockResolutionNs(); // find the number of significant digits in sResolution, for the // sake of ToSecondsSigDigits() for (sResolutionSigDigs = 1; !(sResolutionSigDigs == sResolution || 10*sResolutionSigDigs > sResolution); sResolutionSigDigs *= 10); gInitialized = true; sFirstTimeStamp = TimeStamp::Now(); sProcessCreation = TimeStamp(); return NS_OK; }