mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	core: Keep track of telemetry for the current emulation session.
This commit is contained in:
		
							parent
							
								
									a4760e939f
								
							
						
					
					
						commit
						f3e14cae1e
					
				
					 5 changed files with 83 additions and 0 deletions
				
			
		|  | @ -174,6 +174,7 @@ set(SRCS | |||
|             memory.cpp | ||||
|             perf_stats.cpp | ||||
|             settings.cpp | ||||
|             telemetry_session.cpp | ||||
|             ) | ||||
| 
 | ||||
| set(HEADERS | ||||
|  | @ -366,6 +367,7 @@ set(HEADERS | |||
|             mmio.h | ||||
|             perf_stats.h | ||||
|             settings.h | ||||
|             telemetry_session.h | ||||
|             ) | ||||
| 
 | ||||
| include_directories(../../externals/dynarmic/include) | ||||
|  |  | |||
|  | @ -132,6 +132,8 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { | |||
|         cpu_core = std::make_unique<ARM_DynCom>(USER32MODE); | ||||
|     } | ||||
| 
 | ||||
|     telemetry_session = std::make_unique<Core::TelemetrySession>(); | ||||
| 
 | ||||
|     CoreTiming::Init(); | ||||
|     HW::Init(); | ||||
|     Kernel::Init(system_mode); | ||||
|  | @ -162,6 +164,7 @@ void System::Shutdown() { | |||
|     CoreTiming::Shutdown(); | ||||
|     cpu_core = nullptr; | ||||
|     app_loader = nullptr; | ||||
|     telemetry_session = nullptr; | ||||
| 
 | ||||
|     LOG_DEBUG(Core, "Shutdown OK"); | ||||
| } | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ | |||
| #include "common/common_types.h" | ||||
| #include "core/memory.h" | ||||
| #include "core/perf_stats.h" | ||||
| #include "core/telemetry_session.h" | ||||
| 
 | ||||
| class EmuWindow; | ||||
| class ARM_Interface; | ||||
|  | @ -80,6 +81,14 @@ public: | |||
|         return cpu_core != nullptr; | ||||
|     } | ||||
| 
 | ||||
|     /**
 | ||||
|      * Returns a reference to the telemetry session for this emulation session. | ||||
|      * @returns Reference to the telemetry session. | ||||
|      */ | ||||
|     Core::TelemetrySession& TelemetrySession() const { | ||||
|         return *telemetry_session; | ||||
|     } | ||||
| 
 | ||||
|     /// Prepare the core emulation for a reschedule
 | ||||
|     void PrepareReschedule(); | ||||
| 
 | ||||
|  | @ -117,6 +126,9 @@ private: | |||
|     /// When true, signals that a reschedule should happen
 | ||||
|     bool reschedule_pending{}; | ||||
| 
 | ||||
|     /// Telemetry session for this emulation session
 | ||||
|     std::unique_ptr<Core::TelemetrySession> telemetry_session; | ||||
| 
 | ||||
|     static System s_instance; | ||||
| }; | ||||
| 
 | ||||
|  | @ -124,4 +136,8 @@ inline ARM_Interface& CPU() { | |||
|     return System::GetInstance().CPU(); | ||||
| } | ||||
| 
 | ||||
| inline TelemetrySession& Telemetry() { | ||||
|     return System::GetInstance().TelemetrySession(); | ||||
| } | ||||
| 
 | ||||
| } // namespace Core
 | ||||
|  |  | |||
							
								
								
									
										24
									
								
								src/core/telemetry_session.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/core/telemetry_session.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| // Copyright 2017 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "common/scm_rev.h" | ||||
| #include "core/telemetry_session.h" | ||||
| 
 | ||||
| namespace Core { | ||||
| 
 | ||||
| TelemetrySession::TelemetrySession() { | ||||
|     // TODO(bunnei): Replace with a backend that logs to our web service
 | ||||
|     backend = std::make_unique<Telemetry::NullVisitor>(); | ||||
| } | ||||
| 
 | ||||
| TelemetrySession::~TelemetrySession() { | ||||
|     // Complete the session, submitting to web service if necessary
 | ||||
|     // This is just a placeholder to wrap up the session once the core completes and this is
 | ||||
|     // destroyed. This will be moved elsewhere once we are actually doing real I/O with the service.
 | ||||
|     field_collection.Accept(*backend); | ||||
|     backend->Complete(); | ||||
|     backend = nullptr; | ||||
| } | ||||
| 
 | ||||
| } // namespace Core
 | ||||
							
								
								
									
										38
									
								
								src/core/telemetry_session.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/core/telemetry_session.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| // Copyright 2017 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <memory> | ||||
| #include "common/telemetry.h" | ||||
| 
 | ||||
| namespace Core { | ||||
| 
 | ||||
| /**
 | ||||
|  * Instruments telemetry for this emulation session. Creates a new set of telemetry fields on each | ||||
|  * 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 { | ||||
| public: | ||||
|     TelemetrySession(); | ||||
|     ~TelemetrySession(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Wrapper around the Telemetry::FieldCollection::AddField method. | ||||
|      * @param type Type of the field to add. | ||||
|      * @param name Name of the field to add. | ||||
|      * @param value Value for the field to add. | ||||
|      */ | ||||
|     template <typename T> | ||||
|     void AddField(Telemetry::FieldType type, const char* name, T value) { | ||||
|         field_collection.AddField(type, name, std::move(value)); | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     Telemetry::FieldCollection field_collection; ///< Field collection, tracks all added fields
 | ||||
|     std::unique_ptr<Telemetry::VisitorInterface> backend; ///< Backend interface that logs fields
 | ||||
| }; | ||||
| 
 | ||||
| } // namespace Core
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue