mirror of
				https://github.com/dolphin-emu/dolphin.git
				synced 2025-10-24 17:09:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2014 Dolphin Emulator Project
 | |
| // Licensed under GPLv2+
 | |
| // Refer to the license.txt file included.
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <list>
 | |
| #include <mutex>
 | |
| #include <string>
 | |
| 
 | |
| #include "CommonTypes.h"
 | |
| 
 | |
| namespace Common
 | |
| {
 | |
| class Profiler
 | |
| {
 | |
| public:
 | |
|   Profiler(const std::string& name);
 | |
|   ~Profiler();
 | |
| 
 | |
|   static std::string ToString();
 | |
| 
 | |
|   void Start();
 | |
|   void Stop();
 | |
|   std::string Read();
 | |
| 
 | |
|   bool operator<(const Profiler& b) const;
 | |
| 
 | |
| private:
 | |
|   static std::list<Profiler*> s_all_profilers;
 | |
|   static std::mutex s_mutex;
 | |
|   static u32 s_max_length;
 | |
|   static u64 s_frame_time;
 | |
|   static u64 s_usecs_frame;
 | |
| 
 | |
|   static std::string s_lazy_result;
 | |
|   static int s_lazy_delay;
 | |
| 
 | |
|   std::string m_name;
 | |
|   u64 m_usecs;
 | |
|   u64 m_usecs_min;
 | |
|   u64 m_usecs_max;
 | |
|   u64 m_usecs_quad;
 | |
|   u64 m_calls;
 | |
|   u64 m_time;
 | |
|   int m_depth;
 | |
| };
 | |
| 
 | |
| class ProfilerExecuter
 | |
| {
 | |
| public:
 | |
|   ProfilerExecuter(Profiler* _p) : m_p(_p) { m_p->Start(); }
 | |
|   ~ProfilerExecuter() { m_p->Stop(); }
 | |
| 
 | |
| private:
 | |
|   Profiler* m_p;
 | |
| };
 | |
| };
 | |
| 
 | |
| // Warning: This profiler isn't thread safe. Only profile functions which doesn't run simultaneously
 | |
| #define PROFILE(name)                                                                              \
 | |
|   static Common::Profiler prof_gen(name);                                                          \
 | |
|   Common::ProfilerExecuter prof_e(&prof_gen);
 |