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;
import static androidx.media3.common.util.Assertions.checkNotNull;
import static java.lang.annotation.ElementType.TYPE_USE;
import androidx.annotation.GuardedBy;
@ -47,53 +48,76 @@ public final class DebugTraceUtil {
@Retention(RetentionPolicy.SOURCE)
@StringDef({
EVENT_VIDEO_INPUT_FORMAT,
EVENT_DECODER_SIGNAL_EOS,
EVENT_MUXER_INPUT_AUDIO,
EVENT_MUXER_INPUT_VIDEO,
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_DECODER_RECEIVE_EOS,
EVENT_ENCODER_ENCODED_FRAME,
EVENT_ENCODER_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_DECODER_RECEIVE_EOS,
EVENT_VFP_RECEIVE_DECODER_EOS,
EVENT_VFP_RENDERED_TO_INPUT,
EVENT_VFP_RENDERED_TO_OUTPUT,
EVENT_VFP_SIGNAL_EOS,
EVENT_EXTERNAL_INPUT_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
@Target(TYPE_USE)
public @interface DebugTraceEvent {}
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_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_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_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 =
"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 =
"BitmapTextureManager-SignalEOS";
public static final String EVENT_TEX_ID_TEXTURE_MANAGER_SIGNAL_EOS =
"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;
@ -143,25 +167,19 @@ public final class DebugTraceUtil {
* and the detailed log on the first and last {@link #MAX_FIRST_LAST_LOGS} times.
*/
public static synchronized String generateTraceSummary() {
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<String, EventLogger> entry : events.entrySet()) {
EventLogger logger = entry.getValue();
stringBuilder.append(
Util.formatInvariant("%s[%d]: [", entry.getKey(), logger.getTotalCount()));
String separator = "";
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 stringBuilder = new StringBuilder().append('{');
for (int i = 0; i < EVENT_TYPES.size(); i++) {
String eventType = EVENT_TYPES.get(i);
if (!events.containsKey(eventType)) {
stringBuilder.append(Util.formatInvariant("\"%s\": \"No events logged\",", eventType));
continue;
}
stringBuilder.append("]; ");
stringBuilder
.append(Util.formatInvariant("\"%s\":{", eventType))
.append(checkNotNull(events.get(eventType)))
.append("},");
}
stringBuilder.append('}');
return stringBuilder.toString();
}
@ -203,6 +221,18 @@ public final class DebugTraceUtil {
this.eventTimeMs = eventTimeMs;
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 {
@ -228,12 +258,28 @@ public final class DebugTraceUtil {
totalCount++;
}
public int getTotalCount() {
return totalCount;
}
public ImmutableList<EventLog> getLogs() {
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();
}
}
}