mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Merge pull request #4793 from FearlessTobi/port-2526
Port yuzu-emu/yuzu#2526: "core/telemetry_session: Remove usages of the global system accessor"
This commit is contained in:
		
						commit
						e26d9f5ef1
					
				
					 3 changed files with 55 additions and 27 deletions
				
			
		|  | @ -94,7 +94,6 @@ System::ResultStatus System::SingleStep() { | |||
| 
 | ||||
| System::ResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath) { | ||||
|     app_loader = Loader::GetLoader(filepath); | ||||
| 
 | ||||
|     if (!app_loader) { | ||||
|         LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); | ||||
|         return ResultStatus::ErrorGetLoader; | ||||
|  | @ -125,6 +124,7 @@ System::ResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::st | |||
|         return init_result; | ||||
|     } | ||||
| 
 | ||||
|     telemetry_session->AddInitialInfo(*app_loader); | ||||
|     std::shared_ptr<Kernel::Process> process; | ||||
|     const Loader::ResultStatus load_result{app_loader->Load(process)}; | ||||
|     kernel->SetCurrentProcess(process); | ||||
|  |  | |||
|  | @ -91,7 +91,31 @@ bool VerifyLogin(const std::string& username, const std::string& token) { | |||
| #endif | ||||
| } | ||||
| 
 | ||||
| TelemetrySession::TelemetrySession() { | ||||
| TelemetrySession::TelemetrySession() = default; | ||||
| 
 | ||||
| TelemetrySession::~TelemetrySession() { | ||||
|     // Log one-time session end information
 | ||||
|     const s64 shutdown_time{std::chrono::duration_cast<std::chrono::milliseconds>( | ||||
|                                 std::chrono::system_clock::now().time_since_epoch()) | ||||
|                                 .count()}; | ||||
|     AddField(Telemetry::FieldType::Session, "Shutdown_Time", shutdown_time); | ||||
| 
 | ||||
| #ifdef ENABLE_WEB_SERVICE | ||||
|     auto backend = std::make_unique<WebService::TelemetryJson>(Settings::values.web_api_url, | ||||
|                                                                Settings::values.citra_username, | ||||
|                                                                Settings::values.citra_token); | ||||
| #else | ||||
|     auto backend = std::make_unique<Telemetry::NullVisitor>(); | ||||
| #endif | ||||
| 
 | ||||
|     // Complete the session, submitting to the web service backend if necessary
 | ||||
|     field_collection.Accept(*backend); | ||||
|     if (Settings::values.enable_telemetry) { | ||||
|         backend->Complete(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void TelemetrySession::AddInitialInfo(Loader::AppLoader& app_loader) { | ||||
|     // Log one-time top-level information
 | ||||
|     AddField(Telemetry::FieldType::None, "TelemetryId", GetTelemetryId()); | ||||
| 
 | ||||
|  | @ -101,7 +125,7 @@ TelemetrySession::TelemetrySession() { | |||
|                             .count()}; | ||||
|     AddField(Telemetry::FieldType::Session, "Init_Time", init_time); | ||||
|     std::string program_name; | ||||
|     const Loader::ResultStatus res{System::GetInstance().GetAppLoader().ReadTitle(program_name)}; | ||||
|     const Loader::ResultStatus res{app_loader.ReadTitle(program_name)}; | ||||
|     if (res == Loader::ResultStatus::Success) { | ||||
|         AddField(Telemetry::FieldType::Session, "ProgramName", program_name); | ||||
|     } | ||||
|  | @ -178,28 +202,6 @@ TelemetrySession::TelemetrySession() { | |||
|     AddField(Telemetry::FieldType::UserConfig, "System_RegionValue", Settings::values.region_value); | ||||
| } | ||||
| 
 | ||||
| TelemetrySession::~TelemetrySession() { | ||||
|     // Log one-time session end information
 | ||||
|     const s64 shutdown_time{std::chrono::duration_cast<std::chrono::milliseconds>( | ||||
|                                 std::chrono::system_clock::now().time_since_epoch()) | ||||
|                                 .count()}; | ||||
|     AddField(Telemetry::FieldType::Session, "Shutdown_Time", shutdown_time); | ||||
| 
 | ||||
| #ifdef ENABLE_WEB_SERVICE | ||||
|     auto backend = std::make_unique<WebService::TelemetryJson>(Settings::values.web_api_url, | ||||
|                                                                Settings::values.citra_username, | ||||
|                                                                Settings::values.citra_token); | ||||
| #else | ||||
|     auto backend = std::make_unique<Telemetry::NullVisitor>(); | ||||
| #endif | ||||
| 
 | ||||
|     // Complete the session, submitting to web service if necessary
 | ||||
|     field_collection.Accept(*backend); | ||||
|     if (Settings::values.enable_telemetry) | ||||
|         backend->Complete(); | ||||
|     backend = nullptr; | ||||
| } | ||||
| 
 | ||||
| bool TelemetrySession::SubmitTestcase() { | ||||
| #ifdef ENABLE_WEB_SERVICE | ||||
|     auto backend = std::make_unique<WebService::TelemetryJson>(Settings::values.web_api_url, | ||||
|  |  | |||
|  | @ -8,6 +8,10 @@ | |||
| #include <string> | ||||
| #include "common/telemetry.h" | ||||
| 
 | ||||
| namespace Loader { | ||||
| class AppLoader; | ||||
| } | ||||
| 
 | ||||
| namespace Core { | ||||
| 
 | ||||
| /**
 | ||||
|  | @ -15,11 +19,33 @@ namespace Core { | |||
|  * session, logging any one-time fields. Interfaces with the telemetry backend used for submitting | ||||
|  * data to the web service. Submits session data on close. | ||||
|  */ | ||||
| class TelemetrySession : NonCopyable { | ||||
| class TelemetrySession { | ||||
| public: | ||||
|     TelemetrySession(); | ||||
|     explicit TelemetrySession(); | ||||
|     ~TelemetrySession(); | ||||
| 
 | ||||
|     TelemetrySession(const TelemetrySession&) = delete; | ||||
|     TelemetrySession& operator=(const TelemetrySession&) = delete; | ||||
| 
 | ||||
|     TelemetrySession(TelemetrySession&&) = delete; | ||||
|     TelemetrySession& operator=(TelemetrySession&&) = delete; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Adds the initial telemetry info necessary when starting up a title. | ||||
|      * | ||||
|      * This includes information such as: | ||||
|      *   - Telemetry ID | ||||
|      *   - Initialization time | ||||
|      *   - Title ID | ||||
|      *   - Title name | ||||
|      *   - Title file format | ||||
|      *   - Miscellaneous settings values. | ||||
|      * | ||||
|      * @param app_loader The application loader to use to retrieve | ||||
|      *                   title-specific information. | ||||
|      */ | ||||
|     void AddInitialInfo(Loader::AppLoader& app_loader); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Wrapper around the Telemetry::FieldCollection::AddField method. | ||||
|      * @param type Type of the field to add. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue