mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00: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
					
				
					 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: |     case Role_IsEnabled: | ||||||
|     { |     { | ||||||
|         auto context = context_weak.lock(); |         auto context = context_weak.lock(); | ||||||
|         return context && context->breakpoints[event].enabled; |         return context && context->breakpoints[(int)event].enabled; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     default: |     default: | ||||||
|  | @ -110,7 +110,7 @@ bool BreakPointModel::setData(const QModelIndex& index, const QVariant& value, i | ||||||
|         if (!context) |         if (!context) | ||||||
|             return false; |             return false; | ||||||
| 
 | 
 | ||||||
|         context->breakpoints[event].enabled = value == Qt::Checked; |         context->breakpoints[(int)event].enabled = value == Qt::Checked; | ||||||
|         QModelIndex changed_index = createIndex(index.row(), 0); |         QModelIndex changed_index = createIndex(index.row(), 0); | ||||||
|         emit dataChanged(changed_index, changed_index); |         emit dataChanged(changed_index, changed_index); | ||||||
|         return true; |         return true; | ||||||
|  |  | ||||||
|  | @ -40,10 +40,7 @@ using nihstro::DVLPHeader; | ||||||
| 
 | 
 | ||||||
| namespace Pica { | namespace Pica { | ||||||
| 
 | 
 | ||||||
| void DebugContext::OnEvent(Event event, void* data) { | void DebugContext::DoOnEvent(Event event, void* data) { | ||||||
|     if (!breakpoints[event].enabled) |  | ||||||
|         return; |  | ||||||
| 
 |  | ||||||
|     { |     { | ||||||
|         std::unique_lock<std::mutex> lock(breakpoint_mutex); |         std::unique_lock<std::mutex> lock(breakpoint_mutex); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -114,7 +114,15 @@ public: | ||||||
|      * @param event Event which has happened |      * @param event Event which has happened | ||||||
|      * @param data Optional data pointer (pass nullptr if unused). Needs to remain valid until Resume() is called. |      * @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. |      * Resume from the current breakpoint. | ||||||
|  | @ -126,12 +134,14 @@ public: | ||||||
|      * Delete all set breakpoints and resume emulation. |      * Delete all set breakpoints and resume emulation. | ||||||
|      */ |      */ | ||||||
|     void ClearBreakpoints() { |     void ClearBreakpoints() { | ||||||
|         breakpoints.clear(); |         for (auto &bp : breakpoints) { | ||||||
|  |             bp.enabled = false; | ||||||
|  |         } | ||||||
|         Resume(); |         Resume(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // TODO: Evaluate if access to these members should be hidden behind a public interface.
 |     // 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; |     Event active_breakpoint; | ||||||
|     bool at_breakpoint = false; |     bool at_breakpoint = false; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue