mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +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 |             memory.cpp | ||||||
|             perf_stats.cpp |             perf_stats.cpp | ||||||
|             settings.cpp |             settings.cpp | ||||||
|  |             telemetry_session.cpp | ||||||
|             ) |             ) | ||||||
| 
 | 
 | ||||||
| set(HEADERS | set(HEADERS | ||||||
|  | @ -366,6 +367,7 @@ set(HEADERS | ||||||
|             mmio.h |             mmio.h | ||||||
|             perf_stats.h |             perf_stats.h | ||||||
|             settings.h |             settings.h | ||||||
|  |             telemetry_session.h | ||||||
|             ) |             ) | ||||||
| 
 | 
 | ||||||
| include_directories(../../externals/dynarmic/include) | 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); |         cpu_core = std::make_unique<ARM_DynCom>(USER32MODE); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     telemetry_session = std::make_unique<Core::TelemetrySession>(); | ||||||
|  | 
 | ||||||
|     CoreTiming::Init(); |     CoreTiming::Init(); | ||||||
|     HW::Init(); |     HW::Init(); | ||||||
|     Kernel::Init(system_mode); |     Kernel::Init(system_mode); | ||||||
|  | @ -162,6 +164,7 @@ void System::Shutdown() { | ||||||
|     CoreTiming::Shutdown(); |     CoreTiming::Shutdown(); | ||||||
|     cpu_core = nullptr; |     cpu_core = nullptr; | ||||||
|     app_loader = nullptr; |     app_loader = nullptr; | ||||||
|  |     telemetry_session = nullptr; | ||||||
| 
 | 
 | ||||||
|     LOG_DEBUG(Core, "Shutdown OK"); |     LOG_DEBUG(Core, "Shutdown OK"); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/memory.h" | #include "core/memory.h" | ||||||
| #include "core/perf_stats.h" | #include "core/perf_stats.h" | ||||||
|  | #include "core/telemetry_session.h" | ||||||
| 
 | 
 | ||||||
| class EmuWindow; | class EmuWindow; | ||||||
| class ARM_Interface; | class ARM_Interface; | ||||||
|  | @ -80,6 +81,14 @@ public: | ||||||
|         return cpu_core != nullptr; |         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
 |     /// Prepare the core emulation for a reschedule
 | ||||||
|     void PrepareReschedule(); |     void PrepareReschedule(); | ||||||
| 
 | 
 | ||||||
|  | @ -117,6 +126,9 @@ private: | ||||||
|     /// When true, signals that a reschedule should happen
 |     /// When true, signals that a reschedule should happen
 | ||||||
|     bool reschedule_pending{}; |     bool reschedule_pending{}; | ||||||
| 
 | 
 | ||||||
|  |     /// Telemetry session for this emulation session
 | ||||||
|  |     std::unique_ptr<Core::TelemetrySession> telemetry_session; | ||||||
|  | 
 | ||||||
|     static System s_instance; |     static System s_instance; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -124,4 +136,8 @@ inline ARM_Interface& CPU() { | ||||||
|     return System::GetInstance().CPU(); |     return System::GetInstance().CPU(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | inline TelemetrySession& Telemetry() { | ||||||
|  |     return System::GetInstance().TelemetrySession(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| } // namespace Core
 | } // 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