From 7fca1a0876c3f43f3e36f383f46c7575b13bc0df Mon Sep 17 00:00:00 2001 From: ibaker Date: Mon, 13 Dec 2021 09:45:15 +0000 Subject: [PATCH] Make DecoderCountersUtil error message clearer By including the full counters in the failure message we have a clearer insight into the cause of the failure. PiperOrigin-RevId: 415982732 --- .../exoplayer2/decoder/DecoderCounters.java | 32 ++++++++++ .../testutil/DecoderCountersUtil.java | 59 ++++++------------- 2 files changed, 51 insertions(+), 40 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/decoder/DecoderCounters.java b/library/core/src/main/java/com/google/android/exoplayer2/decoder/DecoderCounters.java index 48cddf2d50..0af4ff029f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/decoder/DecoderCounters.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/decoder/DecoderCounters.java @@ -17,6 +17,8 @@ package com.google.android.exoplayer2.decoder; import static java.lang.Math.max; +import com.google.android.exoplayer2.util.Util; + /** * Maintains decoder event counts, for debugging purposes only. * @@ -154,4 +156,34 @@ public final class DecoderCounters { totalVideoFrameProcessingOffsetUs += totalProcessingOffsetUs; videoFrameProcessingOffsetCount += count; } + + @Override + public String toString() { + return Util.formatInvariant( + "DecoderCounters {\n " + + "decoderInits=%s,\n " + + "decoderReleases=%s\n " + + "queuedInputBuffers=%s\n " + + "skippedInputBuffers=%s\n " + + "renderedOutputBuffers=%s\n " + + "skippedOutputBuffers=%s\n " + + "droppedBuffers=%s\n " + + "droppedInputBuffers=%s\n " + + "maxConsecutiveDroppedBuffers=%s\n " + + "droppedToKeyframeEvents=%s\n " + + "totalVideoFrameProcessingOffsetUs=%s\n " + + "videoFrameProcessingOffsetCount=%s\n}", + decoderInitCount, + decoderReleaseCount, + queuedInputBufferCount, + skippedInputBufferCount, + renderedOutputBufferCount, + skippedOutputBufferCount, + droppedBufferCount, + droppedInputBufferCount, + maxConsecutiveDroppedBufferCount, + droppedToKeyframeCount, + totalVideoFrameProcessingOffsetUs, + videoFrameProcessingOffsetCount); + } } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/DecoderCountersUtil.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/DecoderCountersUtil.java index 2e6934a8c8..99e583aa3d 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/DecoderCountersUtil.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/DecoderCountersUtil.java @@ -43,7 +43,7 @@ public final class DecoderCountersUtil { counters.ensureUpdated(); int actual = counters.skippedOutputBufferCount; assertWithMessage( - "Codec(" + name + ") skipped " + actual + " buffers. Expected " + expected + ".") + "Codec(%s) skipped an unexpected number of buffers. Counters:\n%s", name, counters) .that(actual) .isEqualTo(expected); } @@ -66,32 +66,19 @@ public final class DecoderCountersUtil { public static void assertTotalBufferCount( String name, DecoderCounters counters, int minCount, int maxCount) { int actual = getTotalBufferCount(counters); - assertWithMessage( - "Codec(" - + name - + ") output " - + actual - + " buffers. Expected in range [" - + minCount - + ", " - + maxCount - + "].") - .that(minCount <= actual && actual <= maxCount) - .isTrue(); + assertWithMessage("Codec(%s) output too few buffers. Counters:\n%s", name, counters) + .that(actual) + .isAtLeast(minCount); + assertWithMessage("Codec(%s) output too many buffers. Counters:\n%s", name, counters) + .that(actual) + .isAtMost(maxCount); } public static void assertDroppedBufferLimit(String name, DecoderCounters counters, int limit) { counters.ensureUpdated(); int actual = counters.droppedBufferCount; assertWithMessage( - "Codec(" - + name - + ") was late decoding: " - + actual - + " buffers. " - + "Limit: " - + limit - + ".") + "Codec(%s) was late decoding too many buffers. Counters:\n%s: ", name, counters) .that(actual) .isAtMost(limit); } @@ -101,14 +88,8 @@ public final class DecoderCountersUtil { counters.ensureUpdated(); int actual = counters.maxConsecutiveDroppedBufferCount; assertWithMessage( - "Codec(" - + name - + ") was late decoding: " - + actual - + " buffers consecutively. " - + "Limit: " - + limit - + ".") + "Codec(%s) was late decoding too many buffers consecutively. Counters:\n%s", + name, counters) .that(actual) .isAtMost(limit); } @@ -117,16 +98,14 @@ public final class DecoderCountersUtil { String name, DecoderCounters counters, int minCount, int maxCount) { int actual = counters.videoFrameProcessingOffsetCount; assertWithMessage( - "Codec(" - + name - + ") videoFrameProcessingOffsetSampleCount " - + actual - + ". Expected in range [" - + minCount - + ", " - + maxCount - + "].") - .that(minCount <= actual && actual <= maxCount) - .isTrue(); + "Codec(%s) videoFrameProcessingOffsetSampleCount too low. Counters:\n%s", + name, counters) + .that(actual) + .isAtLeast(minCount); + assertWithMessage( + "Codec(%s) videoFrameProcessingOffsetSampleCount too high. Counters:\n%s", + name, counters) + .that(actual) + .isAtMost(maxCount); } }