forked from dolphin-emu/dolphin
		
	
		
			
	
	
		
			60 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2014 Dolphin Emulator Project
							 | 
						||
| 
								 | 
							
								// Licensed under GPLv2+
							 | 
						||
| 
								 | 
							
								// Refer to the license.txt file included.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <list>
							 | 
						||
| 
								 | 
							
								#include <string>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "CommonTypes.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Profiler
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
									Profiler(const std::string& name);
							 | 
						||
| 
								 | 
							
									~Profiler();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static std::string ToString();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void Start();
							 | 
						||
| 
								 | 
							
									void Stop();
							 | 
						||
| 
								 | 
							
									std::string Read();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
									static std::list<Profiler*> s_all_profilers;
							 | 
						||
| 
								 | 
							
									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 Profiler prof_gen(name); ProfilerExecuter prof_e(&prof_gen);
							 |