performance updates
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user