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
This commit is contained in:
ibaker 2021-12-13 09:45:15 +00:00 committed by Ian Baker
parent e01ef47db9
commit 7fca1a0876
2 changed files with 51 additions and 40 deletions

View File

@ -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);
}
}

View File

@ -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);
}
}