mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Replace std::map with std::array for graphics event breakpoints, and allow the compiler to inline. Saves 1%+ in vertex heavy situations.
This commit is contained in:
		
							parent
							
								
									0964a3ff53
								
							
						
					
					
						commit
						01a1555b5d
					
				
					 3 changed files with 16 additions and 9 deletions
				
			
		|  | @ -75,7 +75,7 @@ QVariant BreakPointModel::data(const QModelIndex& index, int role) const | |||
|     case Role_IsEnabled: | ||||
|     { | ||||
|         auto context = context_weak.lock(); | ||||
|         return context && context->breakpoints[event].enabled; | ||||
|         return context && context->breakpoints[(int)event].enabled; | ||||
|     } | ||||
| 
 | ||||
|     default: | ||||
|  | @ -110,7 +110,7 @@ bool BreakPointModel::setData(const QModelIndex& index, const QVariant& value, i | |||
|         if (!context) | ||||
|             return false; | ||||
| 
 | ||||
|         context->breakpoints[event].enabled = value == Qt::Checked; | ||||
|         context->breakpoints[(int)event].enabled = value == Qt::Checked; | ||||
|         QModelIndex changed_index = createIndex(index.row(), 0); | ||||
|         emit dataChanged(changed_index, changed_index); | ||||
|         return true; | ||||
|  |  | |||
|  | @ -40,10 +40,7 @@ using nihstro::DVLPHeader; | |||
| 
 | ||||
| namespace Pica { | ||||
| 
 | ||||
| void DebugContext::OnEvent(Event event, void* data) { | ||||
|     if (!breakpoints[event].enabled) | ||||
|         return; | ||||
| 
 | ||||
| void DebugContext::DoOnEvent(Event event, void* data) { | ||||
|     { | ||||
|         std::unique_lock<std::mutex> lock(breakpoint_mutex); | ||||
| 
 | ||||
|  |  | |||
|  | @ -114,7 +114,15 @@ public: | |||
|      * @param event Event which has happened | ||||
|      * @param data Optional data pointer (pass nullptr if unused). Needs to remain valid until Resume() is called. | ||||
|      */ | ||||
|     void OnEvent(Event event, void* data); | ||||
|     void OnEvent(Event event, void* data) { | ||||
|         // This check is left in the header to allow the compiler to inline it.
 | ||||
|         if (!breakpoints[(int)event].enabled) | ||||
|             return; | ||||
|         // For the rest of event handling, call a separate function.
 | ||||
|         DoOnEvent(event, data); | ||||
|     } | ||||
| 
 | ||||
|     void DoOnEvent(Event event, void *data); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Resume from the current breakpoint. | ||||
|  | @ -126,12 +134,14 @@ public: | |||
|      * Delete all set breakpoints and resume emulation. | ||||
|      */ | ||||
|     void ClearBreakpoints() { | ||||
|         breakpoints.clear(); | ||||
|         for (auto &bp : breakpoints) { | ||||
|             bp.enabled = false; | ||||
|         } | ||||
|         Resume(); | ||||
|     } | ||||
| 
 | ||||
|     // TODO: Evaluate if access to these members should be hidden behind a public interface.
 | ||||
|     std::map<Event, BreakPoint> breakpoints; | ||||
|     std::array<BreakPoint, (int)Event::NumEvents> breakpoints; | ||||
|     Event active_breakpoint; | ||||
|     bool at_breakpoint = false; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue