From 90febaf717341bf592ba1b062b531d0e189d50e9 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 2 Mar 2019 15:08:11 -0500 Subject: [PATCH 1/5] video_core/renderer_opengl: Replace direct usage of global system object accessors We already pass a reference to the system object to the constructor of the renderer, so we can just use that instead of using the global accessor functions. --- .../renderer_opengl/renderer_opengl.cpp | 27 +++++++++++-------- .../renderer_opengl/renderer_opengl.h | 1 + 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index e60b2eb447..8b510b6ae7 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp @@ -244,6 +244,21 @@ void RendererOpenGL::InitOpenGLObjects() { LoadColorToActiveGLTexture(0, 0, 0, 0, screen_info.texture); } +void RendererOpenGL::AddTelemetryFields() { + const char* const gl_version{reinterpret_cast(glGetString(GL_VERSION))}; + const char* const gpu_vendor{reinterpret_cast(glGetString(GL_VENDOR))}; + const char* const gpu_model{reinterpret_cast(glGetString(GL_RENDERER))}; + + LOG_INFO(Render_OpenGL, "GL_VERSION: {}", gl_version); + LOG_INFO(Render_OpenGL, "GL_VENDOR: {}", gpu_vendor); + LOG_INFO(Render_OpenGL, "GL_RENDERER: {}", gpu_model); + + auto& telemetry_session = system.TelemetrySession(); + telemetry_session.AddField(Telemetry::FieldType::UserSystem, "GPU_Vendor", gpu_vendor); + telemetry_session.AddField(Telemetry::FieldType::UserSystem, "GPU_Model", gpu_model); + telemetry_session.AddField(Telemetry::FieldType::UserSystem, "GPU_OpenGL_Version", gl_version); +} + void RendererOpenGL::CreateRasterizer() { if (rasterizer) { return; @@ -466,17 +481,7 @@ bool RendererOpenGL::Init() { glDebugMessageCallback(DebugHandler, nullptr); } - const char* gl_version{reinterpret_cast(glGetString(GL_VERSION))}; - const char* gpu_vendor{reinterpret_cast(glGetString(GL_VENDOR))}; - const char* gpu_model{reinterpret_cast(glGetString(GL_RENDERER))}; - - LOG_INFO(Render_OpenGL, "GL_VERSION: {}", gl_version); - LOG_INFO(Render_OpenGL, "GL_VENDOR: {}", gpu_vendor); - LOG_INFO(Render_OpenGL, "GL_RENDERER: {}", gpu_model); - - Core::Telemetry().AddField(Telemetry::FieldType::UserSystem, "GPU_Vendor", gpu_vendor); - Core::Telemetry().AddField(Telemetry::FieldType::UserSystem, "GPU_Model", gpu_model); - Core::Telemetry().AddField(Telemetry::FieldType::UserSystem, "GPU_OpenGL_Version", gl_version); + AddTelemetryFields(); if (!GLAD_GL_VERSION_4_3) { return false; diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h index c168fa89e5..6cbf9d2cba 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.h +++ b/src/video_core/renderer_opengl/renderer_opengl.h @@ -60,6 +60,7 @@ public: private: void InitOpenGLObjects(); + void AddTelemetryFields(); void CreateRasterizer(); void ConfigureFramebufferTexture(TextureInfo& texture, From b5f0dc95db9af2ce58c3c0348598763f470458ab Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 2 Mar 2019 15:17:40 -0500 Subject: [PATCH 2/5] core/core: Replace direct usage of the global system telemetry accessor from Shutdown() The telemetry instance is actually a member of the class itself, so we can access it directly instead of going through the global accessor. --- src/core/core.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core/core.cpp b/src/core/core.cpp index ab7181a05e..3f4e9c3a87 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -182,13 +182,13 @@ struct System::Impl { void Shutdown() { // Log last frame performance stats - auto perf_results = GetAndResetPerfStats(); - Telemetry().AddField(Telemetry::FieldType::Performance, "Shutdown_EmulationSpeed", - perf_results.emulation_speed * 100.0); - Telemetry().AddField(Telemetry::FieldType::Performance, "Shutdown_Framerate", - perf_results.game_fps); - Telemetry().AddField(Telemetry::FieldType::Performance, "Shutdown_Frametime", - perf_results.frametime * 1000.0); + const auto perf_results = GetAndResetPerfStats(); + telemetry_session->AddField(Telemetry::FieldType::Performance, "Shutdown_EmulationSpeed", + perf_results.emulation_speed * 100.0); + telemetry_session->AddField(Telemetry::FieldType::Performance, "Shutdown_Framerate", + perf_results.game_fps); + telemetry_session->AddField(Telemetry::FieldType::Performance, "Shutdown_Frametime", + perf_results.frametime * 1000.0); is_powered_on = false; From 697a4669e1a3dd6150cd7f8b4f6dc794d7af7d92 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 2 Mar 2019 15:18:59 -0500 Subject: [PATCH 3/5] yuzu-cmd/yuzu: Replace direct usage of the global system telemetry accessor in main() We already have the system instance around, so we can use that instead of the accessor. --- src/yuzu_cmd/yuzu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp index c34b5467f5..c6c66a7870 100644 --- a/src/yuzu_cmd/yuzu.cpp +++ b/src/yuzu_cmd/yuzu.cpp @@ -216,7 +216,7 @@ int main(int argc, char** argv) { } } - Core::Telemetry().AddField(Telemetry::FieldType::App, "Frontend", "SDL"); + system.TelemetrySession().AddField(Telemetry::FieldType::App, "Frontend", "SDL"); system.Renderer().Rasterizer().LoadDiskResources(); From 319365fdf05f49393a35240c023e10a8d86c7aa7 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 2 Mar 2019 15:20:49 -0500 Subject: [PATCH 4/5] yuzu: Remove usage of the global telemetry accessor In these cases the system object is nearby, and in the other, the long-form of accessing the telemetry instance is already used, so we can get rid of the use of the global accessor. --- src/yuzu/compatdb.cpp | 4 ++-- src/yuzu/main.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/yuzu/compatdb.cpp b/src/yuzu/compatdb.cpp index c09a065206..c8b0a5ec08 100644 --- a/src/yuzu/compatdb.cpp +++ b/src/yuzu/compatdb.cpp @@ -53,8 +53,8 @@ void CompatDB::Submit() { case CompatDBPage::Final: back(); LOG_DEBUG(Frontend, "Compatibility Rating: {}", compatibility->checkedId()); - Core::Telemetry().AddField(Telemetry::FieldType::UserFeedback, "Compatibility", - compatibility->checkedId()); + Core::System::GetInstance().TelemetrySession().AddField( + Telemetry::FieldType::UserFeedback, "Compatibility", compatibility->checkedId()); button(NextButton)->setEnabled(false); button(NextButton)->setText(tr("Submitting")); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 1d460c189a..62aafd1d75 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -846,7 +846,7 @@ bool GMainWindow::LoadROM(const QString& filename) { } game_path = filename; - Core::Telemetry().AddField(Telemetry::FieldType::App, "Frontend", "Qt"); + system.TelemetrySession().AddField(Telemetry::FieldType::App, "Frontend", "Qt"); return true; } From b11492845938b5bea8f5927753e00328aaec56fc Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 2 Mar 2019 15:22:14 -0500 Subject: [PATCH 5/5] core/core: Remove the global telemetry accessor function With all usages converted off of it, this function can be removed. --- src/core/core.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/core/core.h b/src/core/core.h index d720013f73..ba76a41d80 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -293,10 +293,6 @@ inline ARM_Interface& CurrentArmInterface() { return System::GetInstance().CurrentArmInterface(); } -inline TelemetrySession& Telemetry() { - return System::GetInstance().TelemetrySession(); -} - inline Kernel::Process* CurrentProcess() { return System::GetInstance().CurrentProcess(); }