Format DebugTraceUtil report to output JSON string

PiperOrigin-RevId: 552455533
This commit is contained in:
claincly 2023-07-31 13:54:01 +01:00 committed by Rohit Singh
parent 499dd5b84e
commit c16840573b

View File

@ -16,6 +16,7 @@
package androidx.media3.effect; package androidx.media3.effect;
import static androidx.media3.common.util.Assertions.checkNotNull;
import static java.lang.annotation.ElementType.TYPE_USE; import static java.lang.annotation.ElementType.TYPE_USE;
import androidx.annotation.GuardedBy; import androidx.annotation.GuardedBy;
@ -47,53 +48,76 @@ public final class DebugTraceUtil {
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@StringDef({ @StringDef({
EVENT_VIDEO_INPUT_FORMAT, EVENT_VIDEO_INPUT_FORMAT,
EVENT_DECODER_SIGNAL_EOS, EVENT_MUXER_INPUT_AUDIO,
EVENT_MUXER_INPUT_VIDEO,
EVENT_DECODER_DECODED_FRAME, EVENT_DECODER_DECODED_FRAME,
EVENT_VFP_RENDERED_TO_INPUT,
EVENT_VFP_FRAME_DEQUEUED,
EVENT_VFP_RENDERED_TO_OUTPUT,
EVENT_MUXER_CAN_WRITE_SAMPLE_VIDEO, EVENT_MUXER_CAN_WRITE_SAMPLE_VIDEO,
EVENT_MUXER_CAN_WRITE_SAMPLE_AUDIO, EVENT_MUXER_CAN_WRITE_SAMPLE_AUDIO,
EVENT_DECODER_RECEIVE_EOS,
EVENT_ENCODER_ENCODED_FRAME, EVENT_ENCODER_ENCODED_FRAME,
EVENT_ENCODER_RECEIVE_EOS, EVENT_DECODER_RECEIVE_EOS,
EVENT_EXTERNAL_INPUT_MANAGER_SIGNAL_EOS,
EVENT_MUXER_INPUT_VIDEO,
EVENT_MUXER_INPUT_AUDIO,
EVENT_MUXER_TRACK_ENDED_VIDEO,
EVENT_MUXER_TRACK_ENDED_AUDIO,
EVENT_VFP_FRAME_DEQUEUED,
EVENT_VFP_RECEIVE_DECODER_EOS, EVENT_VFP_RECEIVE_DECODER_EOS,
EVENT_VFP_RENDERED_TO_INPUT, EVENT_EXTERNAL_INPUT_MANAGER_SIGNAL_EOS,
EVENT_VFP_RENDERED_TO_OUTPUT,
EVENT_VFP_SIGNAL_EOS,
EVENT_BITMAP_TEXTURE_MANAGER_SIGNAL_EOS, EVENT_BITMAP_TEXTURE_MANAGER_SIGNAL_EOS,
EVENT_TEX_ID_TEXTURE_MANAGER_SIGNAL_EOS EVENT_TEX_ID_TEXTURE_MANAGER_SIGNAL_EOS,
EVENT_VFP_SIGNAL_EOS,
EVENT_ENCODER_RECEIVE_EOS,
EVENT_DECODER_SIGNAL_EOS,
EVENT_MUXER_TRACK_ENDED_AUDIO,
EVENT_MUXER_TRACK_ENDED_VIDEO
}) })
@Documented @Documented
@Target(TYPE_USE) @Target(TYPE_USE)
public @interface DebugTraceEvent {} public @interface DebugTraceEvent {}
public static final String EVENT_VIDEO_INPUT_FORMAT = "VideoInputFormat"; public static final String EVENT_VIDEO_INPUT_FORMAT = "VideoInputFormat";
public static final String EVENT_DECODER_SIGNAL_EOS = "Decoder-SignalEOS";
public static final String EVENT_DECODER_DECODED_FRAME = "Decoder-DecodedFrame"; public static final String EVENT_DECODER_DECODED_FRAME = "Decoder-DecodedFrame";
public static final String EVENT_VFP_RENDERED_TO_INPUT = "VFP-RenderedToInput";
public static final String EVENT_VFP_FRAME_DEQUEUED = "VFP-FrameDequeued";
public static final String EVENT_VFP_RENDERED_TO_OUTPUT = "VFP-RenderedToOutput";
public static final String EVENT_MUXER_CAN_WRITE_SAMPLE_VIDEO = "Muxer-CanWriteSample_Video"; public static final String EVENT_MUXER_CAN_WRITE_SAMPLE_VIDEO = "Muxer-CanWriteSample_Video";
public static final String EVENT_MUXER_CAN_WRITE_SAMPLE_AUDIO = "Muxer-CanWriteSample_Audio"; public static final String EVENT_MUXER_CAN_WRITE_SAMPLE_AUDIO = "Muxer-CanWriteSample_Audio";
public static final String EVENT_DECODER_RECEIVE_EOS = "Decoder-ReceiveEOS";
public static final String EVENT_ENCODER_ENCODED_FRAME = "Encoder-EncodedFrame"; public static final String EVENT_ENCODER_ENCODED_FRAME = "Encoder-EncodedFrame";
public static final String EVENT_ENCODER_RECEIVE_EOS = "Encoder-ReceiveEOS"; public static final String EVENT_MUXER_INPUT_AUDIO = "Muxer-Input_Audio";
public static final String EVENT_MUXER_INPUT_VIDEO = "Muxer-Input_Video";
public static final String EVENT_DECODER_RECEIVE_EOS = "Decoder-ReceiveEOS";
public static final String EVENT_VFP_RECEIVE_DECODER_EOS = "VFP-ReceiveDecoderEOS";
public static final String EVENT_EXTERNAL_INPUT_MANAGER_SIGNAL_EOS = public static final String EVENT_EXTERNAL_INPUT_MANAGER_SIGNAL_EOS =
"ExternalInputManager-SignalEOS"; "ExternalInputManager-SignalEOS";
public static final String EVENT_MUXER_INPUT_VIDEO = "Muxer-Input_Video";
public static final String EVENT_MUXER_INPUT_AUDIO = "Muxer-Input_Audio";
public static final String EVENT_MUXER_TRACK_ENDED_VIDEO = "Muxer-TrackEnded_Video";
public static final String EVENT_MUXER_TRACK_ENDED_AUDIO = "Muxer-TrackEnded_Audio";
public static final String EVENT_VFP_FRAME_DEQUEUED = "VFP-FrameDequeued";
public static final String EVENT_VFP_RECEIVE_DECODER_EOS = "VFP-ReceiveDecoderEOS";
public static final String EVENT_VFP_RENDERED_TO_INPUT = "VFP-RenderedToInput";
public static final String EVENT_VFP_RENDERED_TO_OUTPUT = "VFP-RenderedToOutput";
public static final String EVENT_VFP_SIGNAL_EOS = "VFP-SignalEOS";
public static final String EVENT_BITMAP_TEXTURE_MANAGER_SIGNAL_EOS = public static final String EVENT_BITMAP_TEXTURE_MANAGER_SIGNAL_EOS =
"BitmapTextureManager-SignalEOS"; "BitmapTextureManager-SignalEOS";
public static final String EVENT_TEX_ID_TEXTURE_MANAGER_SIGNAL_EOS = public static final String EVENT_TEX_ID_TEXTURE_MANAGER_SIGNAL_EOS =
"TexIdTextureManager-SignalEOS"; "TexIdTextureManager-SignalEOS";
public static final String EVENT_VFP_SIGNAL_EOS = "VFP-SignalEOS";
public static final String EVENT_ENCODER_RECEIVE_EOS = "Encoder-ReceiveEOS";
public static final String EVENT_DECODER_SIGNAL_EOS = "Decoder-SignalEOS";
public static final String EVENT_MUXER_TRACK_ENDED_AUDIO = "Muxer-TrackEnded_Audio";
public static final String EVENT_MUXER_TRACK_ENDED_VIDEO = "Muxer-TrackEnded_Video";
private static final ImmutableList<String> EVENT_TYPES =
ImmutableList.of(
EVENT_VIDEO_INPUT_FORMAT,
EVENT_DECODER_DECODED_FRAME,
EVENT_VFP_RENDERED_TO_INPUT,
EVENT_VFP_FRAME_DEQUEUED,
EVENT_VFP_RENDERED_TO_OUTPUT,
EVENT_MUXER_CAN_WRITE_SAMPLE_VIDEO,
EVENT_MUXER_CAN_WRITE_SAMPLE_AUDIO,
EVENT_ENCODER_ENCODED_FRAME,
EVENT_MUXER_INPUT_AUDIO,
EVENT_MUXER_INPUT_VIDEO,
EVENT_DECODER_RECEIVE_EOS,
EVENT_VFP_RECEIVE_DECODER_EOS,
EVENT_EXTERNAL_INPUT_MANAGER_SIGNAL_EOS,
EVENT_BITMAP_TEXTURE_MANAGER_SIGNAL_EOS,
EVENT_TEX_ID_TEXTURE_MANAGER_SIGNAL_EOS,
EVENT_VFP_SIGNAL_EOS,
EVENT_ENCODER_RECEIVE_EOS,
EVENT_DECODER_SIGNAL_EOS,
EVENT_MUXER_TRACK_ENDED_AUDIO,
EVENT_MUXER_TRACK_ENDED_VIDEO);
private static final int MAX_FIRST_LAST_LOGS = 10; private static final int MAX_FIRST_LAST_LOGS = 10;
@ -143,25 +167,19 @@ public final class DebugTraceUtil {
* and the detailed log on the first and last {@link #MAX_FIRST_LAST_LOGS} times. * and the detailed log on the first and last {@link #MAX_FIRST_LAST_LOGS} times.
*/ */
public static synchronized String generateTraceSummary() { public static synchronized String generateTraceSummary() {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder().append('{');
for (Map.Entry<String, EventLogger> entry : events.entrySet()) { for (int i = 0; i < EVENT_TYPES.size(); i++) {
EventLogger logger = entry.getValue(); String eventType = EVENT_TYPES.get(i);
stringBuilder.append( if (!events.containsKey(eventType)) {
Util.formatInvariant("%s[%d]: [", entry.getKey(), logger.getTotalCount())); stringBuilder.append(Util.formatInvariant("\"%s\": \"No events logged\",", eventType));
String separator = ""; continue;
ImmutableList<EventLog> eventLogs = logger.getLogs();
for (int i = 0; i < eventLogs.size(); i++) {
EventLog eventLog = eventLogs.get(i);
String logTime =
Util.formatInvariant(
"%s@%d",
presentationTimeToString(eventLog.presentationTimeUs), eventLog.eventTimeMs);
String extra = eventLog.extra != null ? Util.formatInvariant("(%s)", eventLog.extra) : "";
stringBuilder.append(separator).append(logTime).append(extra);
separator = ",";
} }
stringBuilder.append("]; "); stringBuilder
.append(Util.formatInvariant("\"%s\":{", eventType))
.append(checkNotNull(events.get(eventType)))
.append("},");
} }
stringBuilder.append('}');
return stringBuilder.toString(); return stringBuilder.toString();
} }
@ -203,6 +221,18 @@ public final class DebugTraceUtil {
this.eventTimeMs = eventTimeMs; this.eventTimeMs = eventTimeMs;
this.extra = extra; this.extra = extra;
} }
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(
Util.formatInvariant(
"\"%s@%d", presentationTimeToString(presentationTimeUs), eventTimeMs));
if (extra != null) {
stringBuilder.append(Util.formatInvariant("(%s)", extra));
}
return stringBuilder.append('"').toString();
}
} }
private static final class EventLogger { private static final class EventLogger {
@ -228,12 +258,28 @@ public final class DebugTraceUtil {
totalCount++; totalCount++;
} }
public int getTotalCount() {
return totalCount;
}
public ImmutableList<EventLog> getLogs() { public ImmutableList<EventLog> getLogs() {
return new ImmutableList.Builder<EventLog>().addAll(firstLogs).addAll(lastLogs).build(); return new ImmutableList.Builder<EventLog>().addAll(firstLogs).addAll(lastLogs).build();
} }
@Override
public String toString() {
StringBuilder stringBuilder =
new StringBuilder().append("\"Count\": ").append(totalCount).append(", \"first\":[");
for (int i = 0; i < firstLogs.size(); i++) {
stringBuilder.append(firstLogs.get(i)).append(",");
}
stringBuilder.append("],");
if (lastLogs.isEmpty()) {
return stringBuilder.toString();
}
ImmutableList<EventLog> lastLogsList = ImmutableList.copyOf(lastLogs);
stringBuilder.append("\"last\":[");
for (int i = 0; i < lastLogsList.size(); i++) {
stringBuilder.append(lastLogsList.get(i)).append(",");
}
stringBuilder.append(']');
return stringBuilder.toString();
}
} }
} }