Merge pull request #23111 from peppy/fix-debug-perf-drd

Fix abysmal debug performance due to try-catch logic in `DrawableRulesetDependencies`
This commit is contained in:
Bartłomiej Dach 2023-04-03 21:56:13 +02:00 committed by GitHub
commit aa94e61559
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -206,17 +206,26 @@ namespace osu.Game.Rulesets.UI
this.parent = parent; this.parent = parent;
} }
// When the debugger is attached, exceptions are expensive.
// Manually work around this by caching failed lookups and falling back straight to parent.
private readonly HashSet<(string, string)> failedLookups = new HashSet<(string, string)>();
public override IShader Load(string vertex, string fragment) public override IShader Load(string vertex, string fragment)
{ {
try if (!failedLookups.Contains((vertex, fragment)))
{ {
return base.Load(vertex, fragment); try
} {
catch return base.Load(vertex, fragment);
{ }
// Shader lookup is very non-standard. Rather than returning null on missing shaders, exceptions are thrown. catch
return parent.Load(vertex, fragment); {
// Shader lookup is very non-standard. Rather than returning null on missing shaders, exceptions are thrown.
failedLookups.Add((vertex, fragment));
}
} }
return parent.Load(vertex, fragment);
} }
} }
} }