performance updates

This commit is contained in:
Mark Gregory
2026-11-06 08:32:48 +00:00
parent 9e610bd6f2
commit 376f027f12
7 changed files with 127 additions and 49 deletions
+25
View File
@@ -2476,3 +2476,28 @@ extension KJamsCloneTests {
queue.stop();XCTAssertTrue(system.a.player.playing,"Stopping automation preserves current playback")
}
}
extension KJamsCloneTests {
@MainActor func testSpectrumScrollMovesCachedPixelsWithoutRebuildingEveryFrame() async throws {
let file = try XCTUnwrap(Bundle(for:Self.self).resourceURL?.appendingPathComponent("Fixtures/Demo.mp3"))
let player = Player(persistsMix:false);defer { player.stop() }
try player.load(.init(id:1,title:"Scroll",audio:file.path,cdg:nil,rating:0,plays:0),startPlaying:false)
for _ in 0..<100 where player.waveformLoading { try await Task.sleep(nanoseconds:20_000_000) }
XCTAssertFalse(player.waveform.isEmpty)
let view = DJNativeSpectrumView(frame:NSRect(x:0,y:0,width:600,height:100))
view.player = player;view.span = 2;view.spectralWaveforms = true
func snapshot() throws -> Data {
let bitmap = try XCTUnwrap(view.bitmapImageRepForCachingDisplay(in:view.bounds))
view.cacheDisplay(in:view.bounds,to:bitmap)
return Data(bytes:try XCTUnwrap(bitmap.bitmapData),count:bitmap.bytesPerRow*bitmap.pixelsHigh)
}
player.seek(1);let first = try snapshot(),builds = view.waveformTileBuildCount
XCTAssertGreaterThan(builds,0)
player.seek(1.01);let second = try snapshot()
XCTAssertEqual(view.waveformTileBuildCount,builds,"Playback frames translate cached waveform pixels rather than rebinning the spectrum")
XCTAssertNotEqual(first,second,"The spectrum must move as source position advances")
view.frame.size.width = 640;_ = try snapshot()
XCTAssertGreaterThan(view.waveformTileBuildCount,builds,"Changing window size must rebuild sharp waveform tiles")
}
}