Format DebugTraceUtil report to output JSON string
PiperOrigin-RevId: 552455533
This commit is contained in:
parent
499dd5b84e
commit
c16840573b
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user