diff options
| author | Fernando S <fsahmkow27@gmail.com> | 2021-12-05 18:56:38 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-05 18:56:38 +0100 | 
| commit | f1f91ad4680a624c5557432448a4212d82ff6368 (patch) | |
| tree | 37af765fa65d7581ff7f1b4aba63e0ee7fac1eda | |
| parent | 60e923046e07657f7bbae4b0342efad6c3641252 (diff) | |
| parent | f919498f8f4e36477d8ea3424f9ecbfae7576340 (diff) | |
Merge pull request #7494 from Morph1984/no-time-to-wait
native_clock: Wait for less time in EstimateRDTSCFrequency
| -rw-r--r-- | src/common/x64/native_clock.cpp | 36 | 
1 files changed, 18 insertions, 18 deletions
| diff --git a/src/common/x64/native_clock.cpp b/src/common/x64/native_clock.cpp index 28f834443..82ee2c8a1 100644 --- a/src/common/x64/native_clock.cpp +++ b/src/common/x64/native_clock.cpp @@ -15,26 +15,26 @@  namespace Common {  u64 EstimateRDTSCFrequency() { -    const auto milli_10 = std::chrono::milliseconds{10}; -    // get current time +    // Discard the first result measuring the rdtsc.      _mm_mfence(); -    const u64 tscStart = __rdtsc(); -    const auto startTime = std::chrono::steady_clock::now(); -    // wait roughly 3 seconds -    while (true) { -        auto milli = std::chrono::duration_cast<std::chrono::milliseconds>( -            std::chrono::steady_clock::now() - startTime); -        if (milli.count() >= 3000) -            break; -        std::this_thread::sleep_for(milli_10); -    } -    const auto endTime = std::chrono::steady_clock::now(); +    __rdtsc(); +    std::this_thread::sleep_for(std::chrono::milliseconds{1}); +    _mm_mfence(); +    __rdtsc(); + +    // Get the current time. +    const auto start_time = std::chrono::steady_clock::now(); +    _mm_mfence(); +    const u64 tsc_start = __rdtsc(); +    // Wait for 200 milliseconds. +    std::this_thread::sleep_for(std::chrono::milliseconds{200}); +    const auto end_time = std::chrono::steady_clock::now();      _mm_mfence(); -    const u64 tscEnd = __rdtsc(); -    // calculate difference -    const u64 timer_diff = -        std::chrono::duration_cast<std::chrono::nanoseconds>(endTime - startTime).count(); -    const u64 tsc_diff = tscEnd - tscStart; +    const u64 tsc_end = __rdtsc(); +    // Calculate differences. +    const u64 timer_diff = static_cast<u64>( +        std::chrono::duration_cast<std::chrono::nanoseconds>(end_time - start_time).count()); +    const u64 tsc_diff = tsc_end - tsc_start;      const u64 tsc_freq = MultiplyAndDivide64(tsc_diff, 1000000000ULL, timer_diff);      return tsc_freq;  } | 
