From 7208b64a942f2e7ede9c6c986d5a6f49d6151d86 Mon Sep 17 00:00:00 2001 From: Dentomologist Date: Mon, 25 Jan 2021 11:36:21 -0800 Subject: [PATCH] DolphinAnalytics: Extract ReportBuilder functions --- Source/Core/Core/DolphinAnalytics.cpp | 173 +++++++++++++++----------- 1 file changed, 99 insertions(+), 74 deletions(-) diff --git a/Source/Core/Core/DolphinAnalytics.cpp b/Source/Core/Core/DolphinAnalytics.cpp index 8cd45520c1..f72e498980 100644 --- a/Source/Core/Core/DolphinAnalytics.cpp +++ b/Source/Core/Core/DolphinAnalytics.cpp @@ -40,10 +40,6 @@ #include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoConfig.h" -namespace -{ -} // namespace - #if defined(ANDROID) static std::function s_get_val_func; void DolphinAnalytics::AndroidSetGetValFunc(std::function func) @@ -52,6 +48,100 @@ void DolphinAnalytics::AndroidSetGetValFunc(std::functionAddData("version-desc", Common::GetScmDescStr()); + builder->AddData("version-hash", Common::GetScmRevGitStr()); + builder->AddData("version-branch", Common::GetScmBranchStr()); + builder->AddData("version-dist", Common::GetScmDistributorStr()); +} + +void AddAutoUpdateInformationToReportBuilder(Common::AnalyticsReportBuilder* builder) +{ + builder->AddData("update-track", Config::Get(Config::MAIN_AUTOUPDATE_UPDATE_TRACK)); +} + +void AddCPUInformationToReportBuilder(Common::AnalyticsReportBuilder* builder) +{ + builder->AddData("cpu-summary", cpu_info.Summarize()); +} + +#if defined(_WIN32) +void AddWindowsInformationToReportBuilder(Common::AnalyticsReportBuilder* builder) +{ + const auto winver = WindowsRegistry::GetOSVersion(); + builder->AddData("win-ver-major", static_cast(winver.dwMajorVersion)); + builder->AddData("win-ver-minor", static_cast(winver.dwMinorVersion)); + builder->AddData("win-ver-build", static_cast(winver.dwBuildNumber)); +} +#elif defined(ANDROID) +void AddAndroidInformationToReportBuilder(Common::AnalyticsReportBuilder* builder) +{ + builder->AddData("android-manufacturer", s_get_val_func("DEVICE_MANUFACTURER")); + builder->AddData("android-model", s_get_val_func("DEVICE_MODEL")); + builder->AddData("android-version", s_get_val_func("DEVICE_OS")); +} +#elif defined(__APPLE__) +void AddMacOSInformationToReportBuilder(Common::AnalyticsReportBuilder* builder) +{ + // id processInfo = [NSProcessInfo processInfo] + id processInfo = reinterpret_cast(objc_msgSend)( + objc_getClass("NSProcessInfo"), sel_getUid("processInfo")); + if (processInfo) + { + struct OSVersion // NSOperatingSystemVersion + { + s64 major_version; // NSInteger majorVersion + s64 minor_version; // NSInteger minorVersion + s64 patch_version; // NSInteger patchVersion + }; + // On x86_64, we need to explicitly call objc_msgSend_stret for a struct. +#ifdef _M_ARM_64 +#define msgSend objc_msgSend +#else +#define msgSend objc_msgSend_stret +#endif + // NSOperatingSystemVersion version = [processInfo operatingSystemVersion] + OSVersion version = reinterpret_cast(msgSend)( + processInfo, sel_getUid("operatingSystemVersion")); +#undef msgSend + builder->AddData("osx-ver-major", version.major_version); + builder->AddData("osx-ver-minor", version.minor_version); + builder->AddData("osx-ver-bugfix", version.patch_version); + } +} +#endif + +void AddPlatformInformationToReportBuilder(Common::AnalyticsReportBuilder* builder) +{ +#if defined(_WIN32) + builder->AddData("os-type", "windows"); + AddWindowsInformationToReportBuilder(builder); +#elif defined(ANDROID) + builder->AddData("os-type", "android"); + AddAndroidInformationToReportBuilder(builder); +#elif defined(__APPLE__) + builder->AddData("os-type", "osx"); + AddMacOSInformationToReportBuilder(builder); +#elif defined(__linux__) + builder->AddData("os-type", "linux"); +#elif defined(__FreeBSD__) + builder->AddData("os-type", "freebsd"); +#elif defined(__OpenBSD__) + builder->AddData("os-type", "openbsd"); +#elif defined(__NetBSD__) + builder->AddData("os-type", "netbsd"); +#elif defined(__HAIKU__) + builder->AddData("os-type", "haiku"); +#else + builder->AddData("os-type", "unknown"); +#endif +} +} // namespace + + // Under arm64, we need to call objc_msgSend to receive a struct. DolphinAnalytics::DolphinAnalytics() { ReloadConfig(); @@ -255,77 +345,12 @@ bool DolphinAnalytics::ShouldStartPerformanceSampling() void DolphinAnalytics::MakeBaseBuilder() { - Common::AnalyticsReportBuilder builder; + m_base_builder = Common::AnalyticsReportBuilder(); - // Version information. - builder.AddData("version-desc", Common::GetScmDescStr()); - builder.AddData("version-hash", Common::GetScmRevGitStr()); - builder.AddData("version-branch", Common::GetScmBranchStr()); - builder.AddData("version-dist", Common::GetScmDistributorStr()); - - // Auto-Update information. - builder.AddData("update-track", Config::Get(Config::MAIN_AUTOUPDATE_UPDATE_TRACK)); - - // CPU information. - builder.AddData("cpu-summary", cpu_info.Summarize()); - -// OS information. -#if defined(_WIN32) - builder.AddData("os-type", "windows"); - - const auto winver = WindowsRegistry::GetOSVersion(); - builder.AddData("win-ver-major", static_cast(winver.dwMajorVersion)); - builder.AddData("win-ver-minor", static_cast(winver.dwMinorVersion)); - builder.AddData("win-ver-build", static_cast(winver.dwBuildNumber)); -#elif defined(ANDROID) - builder.AddData("os-type", "android"); - builder.AddData("android-manufacturer", s_get_val_func("DEVICE_MANUFACTURER")); - builder.AddData("android-model", s_get_val_func("DEVICE_MODEL")); - builder.AddData("android-version", s_get_val_func("DEVICE_OS")); -#elif defined(__APPLE__) - builder.AddData("os-type", "osx"); - - // id processInfo = [NSProcessInfo processInfo] - id processInfo = reinterpret_cast(objc_msgSend)( - objc_getClass("NSProcessInfo"), sel_getUid("processInfo")); - if (processInfo) - { - struct OSVersion // NSOperatingSystemVersion - { - s64 major_version; // NSInteger majorVersion - s64 minor_version; // NSInteger minorVersion - s64 patch_version; // NSInteger patchVersion - }; - // Under arm64, we need to call objc_msgSend to receive a struct. - // On x86_64, we need to explicitly call objc_msgSend_stret for a struct. -#ifdef _M_ARM_64 -#define msgSend objc_msgSend -#else -#define msgSend objc_msgSend_stret -#endif - // NSOperatingSystemVersion version = [processInfo operatingSystemVersion] - OSVersion version = reinterpret_cast(msgSend)( - processInfo, sel_getUid("operatingSystemVersion")); -#undef msgSend - builder.AddData("osx-ver-major", version.major_version); - builder.AddData("osx-ver-minor", version.minor_version); - builder.AddData("osx-ver-bugfix", version.patch_version); - } -#elif defined(__linux__) - builder.AddData("os-type", "linux"); -#elif defined(__FreeBSD__) - builder.AddData("os-type", "freebsd"); -#elif defined(__OpenBSD__) - builder.AddData("os-type", "openbsd"); -#elif defined(__NetBSD__) - builder.AddData("os-type", "netbsd"); -#elif defined(__HAIKU__) - builder.AddData("os-type", "haiku"); -#else - builder.AddData("os-type", "unknown"); -#endif - - m_base_builder = builder; + AddVersionInformationToReportBuilder(&m_base_builder); + AddAutoUpdateInformationToReportBuilder(&m_base_builder); + AddCPUInformationToReportBuilder(&m_base_builder); + AddPlatformInformationToReportBuilder(&m_base_builder); } static const char* GetShaderCompilationMode(const VideoConfig& video_config)