From ec71c1454ecc0522d9e23573b79793e37e31b959 Mon Sep 17 00:00:00 2001 From: William Baker Date: Mon, 1 Oct 2018 16:53:53 -0700 Subject: [PATCH 1/2] Windows: Use a faster comparison when enumeration filter strings don't have wildcards --- .../ActiveEnumeration.cs | 33 ++++++++++++++++--- .../WindowsFileSystemVirtualizer.cs | 4 +-- .../Virtualization/ActiveEnumerationTests.cs | 2 +- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/GVFS/GVFS.Platform.Windows/ActiveEnumeration.cs b/GVFS/GVFS.Platform.Windows/ActiveEnumeration.cs index 6caa10785d..55cb7c0ff5 100644 --- a/GVFS/GVFS.Platform.Windows/ActiveEnumeration.cs +++ b/GVFS/GVFS.Platform.Windows/ActiveEnumeration.cs @@ -6,10 +6,11 @@ namespace GVFS.Platform.Windows { public class ActiveEnumeration { - private static FileNamePatternMatcher doesPatternMatch = null; + private static FileNamePatternMatcher wildcardPatternMatcher = null; // Use our own enumerator to avoid having to dispose anything private ProjectedFileInfoEnumerator fileInfoEnumerator; + private FileNamePatternMatcher patternMatcher; private string filterString = null; @@ -36,12 +37,13 @@ public ProjectedFileInfo Current } /// - /// Sets the pattern matching delegate that will be used for file name comparisons + /// Sets the pattern matching delegate that will be used for file name comparisons when the filter + /// contains wildcards. /// /// FileNamePatternMatcher to be used by ActiveEnumeration - public static void SetPatternMatcher(FileNamePatternMatcher patternMatcher) + public static void SetWildcardPatternMatcher(FileNamePatternMatcher patternMatcher) { - doesPatternMatch = patternMatcher; + wildcardPatternMatcher = patternMatcher; } /// @@ -107,15 +109,31 @@ public string GetFilterString() return this.filterString; } + private static bool NameMatchsNoWildcardFilter(string name, string filter) + { + return string.Equals(name, filter, System.StringComparison.OrdinalIgnoreCase); + } + private void SaveFilter(string filter) { if (string.IsNullOrEmpty(filter)) { this.filterString = string.Empty; + this.patternMatcher = null; } else { this.filterString = filter; + + if (ProjFS.Utils.DoesNameContainWildCards(this.filterString)) + { + this.patternMatcher = wildcardPatternMatcher; + } + else + { + this.patternMatcher = NameMatchsNoWildcardFilter; + } + if (this.IsCurrentValid && this.IsCurrentHidden()) { this.MoveNext(); @@ -125,7 +143,12 @@ private void SaveFilter(string filter) private bool IsCurrentHidden() { - return !doesPatternMatch(this.Current.Name, this.GetFilterString()); + if (this.patternMatcher == null) + { + return false; + } + + return !this.patternMatcher(this.Current.Name, this.GetFilterString()); } private void ResetEnumerator() diff --git a/GVFS/GVFS.Platform.Windows/WindowsFileSystemVirtualizer.cs b/GVFS/GVFS.Platform.Windows/WindowsFileSystemVirtualizer.cs index de1963b994..a5d02a6f33 100644 --- a/GVFS/GVFS.Platform.Windows/WindowsFileSystemVirtualizer.cs +++ b/GVFS/GVFS.Platform.Windows/WindowsFileSystemVirtualizer.cs @@ -272,11 +272,11 @@ private void InitializeEnumerationPatternMatcher() if (projFSPatternMatchingWorks) { - ActiveEnumeration.SetPatternMatcher(Utils.IsFileNameMatch); + ActiveEnumeration.SetWildcardPatternMatcher(Utils.IsFileNameMatch); } else { - ActiveEnumeration.SetPatternMatcher(InternalFileNameMatchesFilter); + ActiveEnumeration.SetWildcardPatternMatcher(InternalFileNameMatchesFilter); } this.Context.Tracer.RelatedEvent( diff --git a/GVFS/GVFS.UnitTests.Windows/Windows/Virtualization/ActiveEnumerationTests.cs b/GVFS/GVFS.UnitTests.Windows/Windows/Virtualization/ActiveEnumerationTests.cs index f74f42815c..28e7de98f1 100644 --- a/GVFS/GVFS.UnitTests.Windows/Windows/Virtualization/ActiveEnumerationTests.cs +++ b/GVFS/GVFS.UnitTests.Windows/Windows/Virtualization/ActiveEnumerationTests.cs @@ -23,7 +23,7 @@ public class ActiveEnumerationTests public ActiveEnumerationTests(PatternMatcherWrapper wrapper) { - ActiveEnumeration.SetPatternMatcher(wrapper.Matcher); + ActiveEnumeration.SetWildcardPatternMatcher(wrapper.Matcher); } public static object[] Runners From 355ead878bac3fade5f213aadf239332ff396224 Mon Sep 17 00:00:00 2001 From: William Baker Date: Tue, 2 Oct 2018 13:00:05 -0700 Subject: [PATCH 2/2] Variable renaming --- .../GVFS.Platform.Windows/ActiveEnumeration.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/GVFS/GVFS.Platform.Windows/ActiveEnumeration.cs b/GVFS/GVFS.Platform.Windows/ActiveEnumeration.cs index 55cb7c0ff5..675c6d1bce 100644 --- a/GVFS/GVFS.Platform.Windows/ActiveEnumeration.cs +++ b/GVFS/GVFS.Platform.Windows/ActiveEnumeration.cs @@ -6,11 +6,11 @@ namespace GVFS.Platform.Windows { public class ActiveEnumeration { - private static FileNamePatternMatcher wildcardPatternMatcher = null; + private static FileNamePatternMatcher doesWildcardPatternMatch = null; // Use our own enumerator to avoid having to dispose anything private ProjectedFileInfoEnumerator fileInfoEnumerator; - private FileNamePatternMatcher patternMatcher; + private FileNamePatternMatcher doesPatternMatch; private string filterString = null; @@ -43,7 +43,7 @@ public ProjectedFileInfo Current /// FileNamePatternMatcher to be used by ActiveEnumeration public static void SetWildcardPatternMatcher(FileNamePatternMatcher patternMatcher) { - wildcardPatternMatcher = patternMatcher; + doesWildcardPatternMatch = patternMatcher; } /// @@ -109,7 +109,7 @@ public string GetFilterString() return this.filterString; } - private static bool NameMatchsNoWildcardFilter(string name, string filter) + private static bool NameMatchesNoWildcardFilter(string name, string filter) { return string.Equals(name, filter, System.StringComparison.OrdinalIgnoreCase); } @@ -119,7 +119,7 @@ private void SaveFilter(string filter) if (string.IsNullOrEmpty(filter)) { this.filterString = string.Empty; - this.patternMatcher = null; + this.doesPatternMatch = null; } else { @@ -127,11 +127,11 @@ private void SaveFilter(string filter) if (ProjFS.Utils.DoesNameContainWildCards(this.filterString)) { - this.patternMatcher = wildcardPatternMatcher; + this.doesPatternMatch = doesWildcardPatternMatch; } else { - this.patternMatcher = NameMatchsNoWildcardFilter; + this.doesPatternMatch = NameMatchesNoWildcardFilter; } if (this.IsCurrentValid && this.IsCurrentHidden()) @@ -143,12 +143,12 @@ private void SaveFilter(string filter) private bool IsCurrentHidden() { - if (this.patternMatcher == null) + if (this.doesPatternMatch == null) { return false; } - return !this.patternMatcher(this.Current.Name, this.GetFilterString()); + return !this.doesPatternMatch(this.Current.Name, this.GetFilterString()); } private void ResetEnumerator()