Track Android call capture and playback clocks

This commit is contained in:
evgeny committed 2026-10-14 19:36:11 +02:00
1 parent 023f3a335e
commit e975d24a73
3 files changed
+129 -1

No files matched your search

@@ -0,0 +1,47 @@
package com.utun.chat.data
import org.junit.Assert.*
import org.junit.Test
class CallAudioTimingTest {
@Test fun captureFallbackUsesSamplesInsteadOfReadCompletionJitter() {
val c = CallCaptureClock()
assertEquals(980_000L, c.firstSampleUs(0, 960, 1_000_000, null, null))
assertEquals(1_000_000L, c.firstSampleUs(960, 960, 1_035_000, null, null))
assertFalse(c.measured)
assertEquals(1_030_000L, c.firstSampleUs(1920, 960, 1_050_000, 2400, 1_040_000))
assertTrue(c.measured)
assertEquals(1_050_000L, c.firstSampleUs(2880, 960, 1_080_000, null, null))
c.reset()
assertFalse(c.measured)
assertEquals(1_980_000L, c.firstSampleUs(0, 960, 2_000_000, null, null))
}
@Test fun invalidCaptureTimestampDoesNotReplaceAnchor() {
val c = CallCaptureClock()
assertEquals(980_000L, c.firstSampleUs(0, 960, 1_000_000, -1, 1_000_000))
assertEquals(1_000_000L, c.firstSampleUs(960, 960, 1_020_000, 960, 2_000_000))
assertFalse(c.measured)
}
@Test fun headMeasuresPlayedSamplesAndUnwrapsUnsignedCounter() {
val h = CallPlaybackHead()
assertEquals(0L, h.update(0, 960))
assertEquals(240L, h.update(240, 960))
assertEquals(240L, h.update(240, 1920))
assertEquals(0x70000000L, h.update(0x70000000, 0x70000000L))
assertEquals(0xe0000000L, h.update(0xe0000000.toInt(), 0xe0000000L))
assertEquals(0x100000080L, h.update(128, 0x100000080L))
assertFalse(h.failed)
}
@Test fun resetAndImpossibleHeadFailClosedUntilNewDevice() {
val h = CallPlaybackHead()
assertEquals(480L, h.update(480, 960))
assertNull(h.update(0, 960))
assertTrue(h.failed)
assertNull(h.update(960, 960))
assertNull(CallPlaybackHead().update(1000, 960))
assertEquals(0L, CallPlaybackHead().update(0, 0))
}
}