mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 10:44:49 +01:00 
			
		
		
		
	Merge pull request #1710 from hrydgard/optimize-event-breakpoints
Replace std::map with std::array for graphics event breakpoints
This commit is contained in:
		
						commit
						15c907317c
					
				| @ -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…
	
		Reference in New Issue
	
	Block a user