From 87197e0524be513aafad17f162e6fac21cd3c468 Mon Sep 17 00:00:00 2001 From: Morilli <35152647+Morilli@users.noreply.github.com> Date: Sun, 10 Mar 2024 18:57:08 +0100 Subject: [PATCH] Optimize IsMarker checks in TAStudio --- .../movie/tasproj/TasMovieMarker.cs | 10 +++++++++- .../tools/TAStudio/TAStudio.ListView.cs | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/BizHawk.Client.Common/movie/tasproj/TasMovieMarker.cs b/src/BizHawk.Client.Common/movie/tasproj/TasMovieMarker.cs index 5243ed6f53..1fe16aa3db 100644 --- a/src/BizHawk.Client.Common/movie/tasproj/TasMovieMarker.cs +++ b/src/BizHawk.Client.Common/movie/tasproj/TasMovieMarker.cs @@ -322,7 +322,15 @@ namespace BizHawk.Client.Common public bool IsMarker(int frame) { - return this.Any(m => m == frame); + // TODO: could use a BinarySearch here, but CollectionExtensions.BinarySearch currently throws + // an exception on failure, which is probably so expensive it nullifies any performance benefits + foreach (var marker in this) + { + if (marker.Frame > frame) return false; + if (marker.Frame == frame) return true; + } + + return false; } public TasMovieMarker Get(int frame) diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs index fd3f9dbdea..f0465545d4 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs @@ -193,7 +193,7 @@ namespace BizHawk.Client.EmuHawk offsetX = -3; offsetY = 1; - if (CurrentTasMovie.Markers.IsMarker(index) && Settings.DenoteMarkersWithIcons) + if (Settings.DenoteMarkersWithIcons && CurrentTasMovie.Markers.IsMarker(index)) { bitmap = icon_marker; } @@ -235,7 +235,7 @@ namespace BizHawk.Client.EmuHawk if (columnName == FrameColumnName) { - if (Emulator.Frame != index && CurrentTasMovie.Markers.IsMarker(index) && Settings.DenoteMarkersWithBGColor) + if (Emulator.Frame != index && Settings.DenoteMarkersWithBGColor && CurrentTasMovie.Markers.IsMarker(index)) { color = Palette.Marker_FrameCol; }