/* * Copyright (C) 2014 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 com.google.android.exoplayer; /** * Maintains codec 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 correctly reflected between threads, users of this class * should invoke {@link #ensureUpdated()} prior to reading and after writing. */ public final class CodecCounters { public int codecInitCount; public int codecReleaseCount; public int outputFormatChangedCount; public int outputBuffersChangedCount; public int renderedOutputBufferCount; public int skippedOutputBufferCount; public int droppedOutputBufferCount; /** * Should be invoked from the playback thread after the counters have been updated. Should also * be invoked from any other thread that wishes to read the counters, before reading. These calls * ensure that counter updates are made visible to the reading threads. */ public synchronized void ensureUpdated() { // Do nothing. The use of synchronized ensures a memory barrier should another thread also // call this method. } public String getDebugString() { ensureUpdated(); StringBuilder builder = new StringBuilder(); builder.append("cic(").append(codecInitCount).append(")"); builder.append("crc(").append(codecReleaseCount).append(")"); builder.append("ofc(").append(outputFormatChangedCount).append(")"); builder.append("obc(").append(outputBuffersChangedCount).append(")"); builder.append("ren(").append(renderedOutputBufferCount).append(")"); builder.append("sob(").append(skippedOutputBufferCount).append(")"); builder.append("dob(").append(droppedOutputBufferCount).append(")"); return builder.toString(); } }