Profile and optimize retained rendering
This commit is contained in:
@@ -60,6 +60,33 @@ public class MovieSurfaceRegistryTests
|
||||
Assert.False(registry.IsKnownMovieResource(0x2af5));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ResourceLookup_SelectsNewestPublishedPlaybackWithoutAllocating()
|
||||
{
|
||||
var registry = new MovieSurfaceRegistry();
|
||||
MovieSurfaceBinding older = registry.Begin(7, 0x2b42, out _);
|
||||
MovieSurfaceBinding unrelated = registry.Begin(8, 0x2bad, out _);
|
||||
MovieSurfaceBinding newer = registry.Begin(9, 0x2b42, out _);
|
||||
Assert.True(registry.PublishFrame(older.PlaybackId, Frame(1), "OLDER.AGF", 1));
|
||||
Assert.True(registry.PublishFrame(unrelated.PlaybackId, Frame(2), "OTHER.AGF", 2));
|
||||
Assert.True(registry.PublishFrame(newer.PlaybackId, Frame(3), "NEWER.AGF", 3));
|
||||
Assert.True(registry.TryResolveResource(0x2b42, out MovieSurfaceFrame? warm));
|
||||
Assert.Equal("NEWER.AGF", warm!.Name);
|
||||
Assert.False(registry.TryResolveResource(0x2af5, out _));
|
||||
|
||||
long before = GC.GetAllocatedBytesForCurrentThread();
|
||||
bool resultsCorrect = true;
|
||||
for (int i = 0; i < 10_000; i++)
|
||||
{
|
||||
resultsCorrect &= registry.TryResolveResource(0x2b42, out _);
|
||||
resultsCorrect &= !registry.TryResolveResource(0x2af5, out _);
|
||||
}
|
||||
long allocated = GC.GetAllocatedBytesForCurrentThread() - before;
|
||||
|
||||
Assert.True(resultsCorrect);
|
||||
Assert.Equal(0, allocated);
|
||||
}
|
||||
|
||||
private static RgbaImage Frame(byte value)
|
||||
=> new(1, 1, new[] { value, value, value, (byte)255 });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user