Browse Source
Merge pull request #10998 from Morph1984/qt-stop-messing-with-me
core_timing: Remove GetCurrentTimerResolution in CoreTiming loop
pull/15/merge
liamwhite
3 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
22 additions and
5 deletions
-
src/core/core_timing.cpp
-
src/core/core_timing.h
-
src/yuzu/main.cpp
-
src/yuzu_cmd/yuzu.cpp
|
|
|
@ -253,9 +253,6 @@ void CoreTiming::ThreadLoop() { |
|
|
|
auto wait_time = *next_time - GetGlobalTimeNs().count(); |
|
|
|
if (wait_time > 0) { |
|
|
|
#ifdef _WIN32
|
|
|
|
const auto timer_resolution_ns = |
|
|
|
Common::Windows::GetCurrentTimerResolution().count(); |
|
|
|
|
|
|
|
while (!paused && !event.IsSet() && wait_time > 0) { |
|
|
|
wait_time = *next_time - GetGlobalTimeNs().count(); |
|
|
|
|
|
|
|
@ -316,4 +313,10 @@ std::chrono::microseconds CoreTiming::GetGlobalTimeUs() const { |
|
|
|
return std::chrono::microseconds{Common::WallClock::CPUTickToUS(cpu_ticks)}; |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
void CoreTiming::SetTimerResolutionNs(std::chrono::nanoseconds ns) { |
|
|
|
timer_resolution_ns = ns.count(); |
|
|
|
} |
|
|
|
#endif
|
|
|
|
|
|
|
|
} // namespace Core::Timing
|
|
|
|
@ -131,6 +131,10 @@ public: |
|
|
|
/// Checks for events manually and returns time in nanoseconds for next event, threadsafe. |
|
|
|
std::optional<s64> Advance(); |
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
void SetTimerResolutionNs(std::chrono::nanoseconds ns); |
|
|
|
#endif |
|
|
|
|
|
|
|
private: |
|
|
|
struct Event; |
|
|
|
|
|
|
|
@ -143,6 +147,10 @@ private: |
|
|
|
|
|
|
|
s64 global_timer = 0; |
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
s64 timer_resolution_ns; |
|
|
|
#endif |
|
|
|
|
|
|
|
// The queue is a min-heap using std::make_heap/push_heap/pop_heap. |
|
|
|
// We don't use std::priority_queue because we need to be able to serialize, unserialize and |
|
|
|
// erase arbitrary events (RemoveEvent()) regardless of the queue order. These aren't |
|
|
|
|
|
|
|
@ -101,6 +101,7 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual |
|
|
|
#include "common/settings.h"
|
|
|
|
#include "common/telemetry.h"
|
|
|
|
#include "core/core.h"
|
|
|
|
#include "core/core_timing.h"
|
|
|
|
#include "core/crypto/key_manager.h"
|
|
|
|
#include "core/file_sys/card_image.h"
|
|
|
|
#include "core/file_sys/common_funcs.h"
|
|
|
|
@ -389,6 +390,7 @@ GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan |
|
|
|
std::chrono::duration_cast<std::chrono::duration<f64, std::milli>>( |
|
|
|
Common::Windows::SetCurrentTimerResolutionToMaximum()) |
|
|
|
.count()); |
|
|
|
system->CoreTiming().SetTimerResolutionNs(Common::Windows::GetCurrentTimerResolution()); |
|
|
|
#endif
|
|
|
|
UpdateWindowTitle(); |
|
|
|
|
|
|
|
|
|
|
|
@ -21,6 +21,7 @@ |
|
|
|
#include "common/string_util.h"
|
|
|
|
#include "common/telemetry.h"
|
|
|
|
#include "core/core.h"
|
|
|
|
#include "core/core_timing.h"
|
|
|
|
#include "core/cpu_manager.h"
|
|
|
|
#include "core/crypto/key_manager.h"
|
|
|
|
#include "core/file_sys/registered_cache.h"
|
|
|
|
@ -316,8 +317,6 @@ int main(int argc, char** argv) { |
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
LocalFree(argv_w); |
|
|
|
|
|
|
|
Common::Windows::SetCurrentTimerResolutionToMaximum(); |
|
|
|
#endif
|
|
|
|
|
|
|
|
MicroProfileOnThreadCreate("EmuThread"); |
|
|
|
@ -351,6 +350,11 @@ int main(int argc, char** argv) { |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
Common::Windows::SetCurrentTimerResolutionToMaximum(); |
|
|
|
system.CoreTiming().SetTimerResolutionNs(Common::Windows::GetCurrentTimerResolution()); |
|
|
|
#endif
|
|
|
|
|
|
|
|
system.SetContentProvider(std::make_unique<FileSys::ContentProviderUnion>()); |
|
|
|
system.SetFilesystem(std::make_shared<FileSys::RealVfsFilesystem>()); |
|
|
|
system.GetFileSystemController().CreateFactories(*system.GetFilesystem()); |
|
|
|
|