summaryrefslogtreecommitdiffstats
path: root/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/decoder/DecoderCounters.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/decoder/DecoderCounters.java')
-rw-r--r--mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/decoder/DecoderCounters.java105
1 files changed, 105 insertions, 0 deletions
diff --git a/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/decoder/DecoderCounters.java b/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/decoder/DecoderCounters.java
new file mode 100644
index 0000000000..f8bdb9b29a
--- /dev/null
+++ b/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/decoder/DecoderCounters.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mozilla.thirdparty.com.google.android.exoplayer2.decoder;
+
+/**
+ * Maintains decoder event counts, for debugging purposes only.
+ * <p>
+ * Counters should be written from the playback thread only. Counters may be read from any thread.
+ * To ensure that the counter values are made visible across threads, users of this class should
+ * invoke {@link #ensureUpdated()} prior to reading and after writing.
+ */
+public final class DecoderCounters {
+
+ /**
+ * The number of times a decoder has been initialized.
+ */
+ public int decoderInitCount;
+ /**
+ * The number of times a decoder has been released.
+ */
+ public int decoderReleaseCount;
+ /**
+ * The number of queued input buffers.
+ */
+ public int inputBufferCount;
+ /**
+ * The number of skipped input buffers.
+ * <p>
+ * A skipped input buffer is an input buffer that was deliberately not sent to the decoder.
+ */
+ public int skippedInputBufferCount;
+ /**
+ * The number of rendered output buffers.
+ */
+ public int renderedOutputBufferCount;
+ /**
+ * The number of skipped output buffers.
+ * <p>
+ * A skipped output buffer is an output buffer that was deliberately not rendered.
+ */
+ public int skippedOutputBufferCount;
+ /**
+ * The number of dropped buffers.
+ * <p>
+ * A dropped buffer is an buffer that was supposed to be decoded/rendered, but was instead
+ * dropped because it could not be rendered in time.
+ */
+ public int droppedBufferCount;
+ /**
+ * The maximum number of dropped buffers without an interleaving rendered output buffer.
+ * <p>
+ * Skipped output buffers are ignored for the purposes of calculating this value.
+ */
+ public int maxConsecutiveDroppedBufferCount;
+ /**
+ * The number of times all buffers to a keyframe were dropped.
+ * <p>
+ * Each time buffers to a keyframe are dropped, this counter is increased by one, and the dropped
+ * buffer counters are increased by one (for the current output buffer) plus the number of buffers
+ * dropped from the source to advance to the keyframe.
+ */
+ public int droppedToKeyframeCount;
+
+ /**
+ * Should be called to ensure counter values are made visible across threads. The playback thread
+ * should call this method after updating the counter values. Any other thread should call this
+ * method before reading the counters.
+ */
+ public synchronized void ensureUpdated() {
+ // Do nothing. The use of synchronized ensures a memory barrier should another thread also
+ // call this method.
+ }
+
+ /**
+ * Merges the counts from {@code other} into this instance.
+ *
+ * @param other The {@link DecoderCounters} to merge into this instance.
+ */
+ public void merge(DecoderCounters other) {
+ decoderInitCount += other.decoderInitCount;
+ decoderReleaseCount += other.decoderReleaseCount;
+ inputBufferCount += other.inputBufferCount;
+ skippedInputBufferCount += other.skippedInputBufferCount;
+ renderedOutputBufferCount += other.renderedOutputBufferCount;
+ skippedOutputBufferCount += other.skippedOutputBufferCount;
+ droppedBufferCount += other.droppedBufferCount;
+ maxConsecutiveDroppedBufferCount = Math.max(maxConsecutiveDroppedBufferCount,
+ other.maxConsecutiveDroppedBufferCount);
+ droppedToKeyframeCount += other.droppedToKeyframeCount;
+ }
+
+}