Migrate debug trace logs to track generic events for Muxer.

Track information is added to the details string where relevant.

PiperOrigin-RevId: 635815866
This commit is contained in:
samrobinson 2024-05-21 08:30:01 -07:00 committed by Copybara-Service
parent 44f2f5056f
commit b6ce35d741
2 changed files with 38 additions and 46 deletions

View File

@ -78,12 +78,7 @@ public final class DebugTraceUtil {
EVENT_RECEIVE_EOS, EVENT_RECEIVE_EOS,
EVENT_SIGNAL_EOS, EVENT_SIGNAL_EOS,
EVENT_SIGNAL_ENDED, EVENT_SIGNAL_ENDED,
EVENT_CAN_WRITE_SAMPLE_AUDIO, EVENT_CAN_WRITE_SAMPLE
EVENT_CAN_WRITE_SAMPLE_VIDEO,
EVENT_WRITE_SAMPLE_AUDIO,
EVENT_WRITE_SAMPLE_VIDEO,
EVENT_TRACK_ENDED_AUDIO,
EVENT_TRACK_ENDED_VIDEO
}) })
@Target(TYPE_USE) @Target(TYPE_USE)
public @interface Event {} public @interface Event {}
@ -106,12 +101,7 @@ public final class DebugTraceUtil {
public static final String EVENT_RECEIVE_EOS = "ReceiveEOS"; public static final String EVENT_RECEIVE_EOS = "ReceiveEOS";
public static final String EVENT_SIGNAL_EOS = "SignalEOS"; public static final String EVENT_SIGNAL_EOS = "SignalEOS";
public static final String EVENT_SIGNAL_ENDED = "SignalEnded"; public static final String EVENT_SIGNAL_ENDED = "SignalEnded";
public static final String EVENT_CAN_WRITE_SAMPLE_AUDIO = "CanWriteSample_Audio"; public static final String EVENT_CAN_WRITE_SAMPLE = "CanWriteSample";
public static final String EVENT_CAN_WRITE_SAMPLE_VIDEO = "CanWriteSample_Video";
public static final String EVENT_WRITE_SAMPLE_AUDIO = "WriteSample_Audio";
public static final String EVENT_WRITE_SAMPLE_VIDEO = "WriteSample_Video";
public static final String EVENT_TRACK_ENDED_AUDIO = "TrackEnded_Audio";
public static final String EVENT_TRACK_ENDED_VIDEO = "TrackEnded_Video";
/** Components logged by {@link #logEvent}. */ /** Components logged by {@link #logEvent}. */
@Documented @Documented
@ -216,12 +206,10 @@ public final class DebugTraceUtil {
.put( .put(
COMPONENT_MUXER, COMPONENT_MUXER,
ImmutableList.of( ImmutableList.of(
EVENT_CAN_WRITE_SAMPLE_VIDEO, EVENT_INPUT_FORMAT,
EVENT_WRITE_SAMPLE_VIDEO, EVENT_CAN_WRITE_SAMPLE,
EVENT_CAN_WRITE_SAMPLE_AUDIO, EVENT_ACCEPTED_INPUT,
EVENT_WRITE_SAMPLE_AUDIO, EVENT_INPUT_ENDED,
EVENT_TRACK_ENDED_AUDIO,
EVENT_TRACK_ENDED_VIDEO,
EVENT_OUTPUT_ENDED)) EVENT_OUTPUT_ENDED))
.buildOrThrow(); .buildOrThrow();

View File

@ -25,13 +25,10 @@ import static androidx.media3.common.util.Util.areEqual;
import static androidx.media3.common.util.Util.contains; import static androidx.media3.common.util.Util.contains;
import static androidx.media3.common.util.Util.usToMs; import static androidx.media3.common.util.Util.usToMs;
import static androidx.media3.effect.DebugTraceUtil.COMPONENT_MUXER; import static androidx.media3.effect.DebugTraceUtil.COMPONENT_MUXER;
import static androidx.media3.effect.DebugTraceUtil.EVENT_CAN_WRITE_SAMPLE_AUDIO; import static androidx.media3.effect.DebugTraceUtil.EVENT_ACCEPTED_INPUT;
import static androidx.media3.effect.DebugTraceUtil.EVENT_CAN_WRITE_SAMPLE_VIDEO; import static androidx.media3.effect.DebugTraceUtil.EVENT_CAN_WRITE_SAMPLE;
import static androidx.media3.effect.DebugTraceUtil.EVENT_INPUT_ENDED;
import static androidx.media3.effect.DebugTraceUtil.EVENT_OUTPUT_ENDED; import static androidx.media3.effect.DebugTraceUtil.EVENT_OUTPUT_ENDED;
import static androidx.media3.effect.DebugTraceUtil.EVENT_TRACK_ENDED_AUDIO;
import static androidx.media3.effect.DebugTraceUtil.EVENT_TRACK_ENDED_VIDEO;
import static androidx.media3.effect.DebugTraceUtil.EVENT_WRITE_SAMPLE_AUDIO;
import static androidx.media3.effect.DebugTraceUtil.EVENT_WRITE_SAMPLE_VIDEO;
import static java.lang.Math.max; import static java.lang.Math.max;
import static java.lang.annotation.ElementType.TYPE_USE; import static java.lang.annotation.ElementType.TYPE_USE;
import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.MILLISECONDS;
@ -484,6 +481,13 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
ensureMuxerInitialized(); ensureMuxerInitialized();
TrackInfo trackInfo = new TrackInfo(format, muxer.addTrack(format)); TrackInfo trackInfo = new TrackInfo(format, muxer.addTrack(format));
trackTypeToInfo.put(trackType, trackInfo); trackTypeToInfo.put(trackType, trackInfo);
DebugTraceUtil.logEvent(
COMPONENT_MUXER,
DebugTraceUtil.EVENT_INPUT_FORMAT,
C.TIME_UNSET,
/* extraFormat= */ "%s:%s",
/* extraArgs...= */ Util.getTrackTypeString(trackType),
format);
if (format.metadata != null) { if (format.metadata != null) {
for (int i = 0; i < format.metadata.length(); i++) { for (int i = 0; i < format.metadata.length(); i++) {
@ -531,23 +535,20 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
checkArgument(contains(trackTypeToInfo, trackType)); checkArgument(contains(trackTypeToInfo, trackType));
TrackInfo trackInfo = trackTypeToInfo.get(trackType); TrackInfo trackInfo = trackTypeToInfo.get(trackType);
boolean canWriteSample = canWriteSample(trackType, presentationTimeUs); boolean canWriteSample = canWriteSample(trackType, presentationTimeUs);
DebugTraceUtil.logEvent(
COMPONENT_MUXER,
EVENT_CAN_WRITE_SAMPLE,
presentationTimeUs,
/* extraFormat= */ "%s:%s",
/* extraArgs...= */ Util.getTrackTypeString(trackType),
canWriteSample);
if (trackType == C.TRACK_TYPE_VIDEO) { if (trackType == C.TRACK_TYPE_VIDEO) {
DebugTraceUtil.logEvent(
COMPONENT_MUXER,
EVENT_CAN_WRITE_SAMPLE_VIDEO,
presentationTimeUs,
/* extraFormat= */ "%s",
/* extraArgs...= */ canWriteSample);
if (firstVideoPresentationTimeUs == C.TIME_UNSET) { if (firstVideoPresentationTimeUs == C.TIME_UNSET) {
firstVideoPresentationTimeUs = presentationTimeUs; firstVideoPresentationTimeUs = presentationTimeUs;
} }
} else if (trackType == C.TRACK_TYPE_AUDIO) { } else if (trackType == C.TRACK_TYPE_AUDIO) {
DebugTraceUtil.logEvent(
COMPONENT_MUXER,
EVENT_CAN_WRITE_SAMPLE_AUDIO,
presentationTimeUs,
/* extraFormat= */ "%s",
/* extraArgs...= */ canWriteSample);
if (dropSamplesBeforeFirstVideoSample if (dropSamplesBeforeFirstVideoSample
&& contains(trackTypeToInfo, C.TRACK_TYPE_VIDEO) && contains(trackTypeToInfo, C.TRACK_TYPE_VIDEO)
&& firstVideoPresentationTimeUs != C.TIME_UNSET && firstVideoPresentationTimeUs != C.TIME_UNSET
@ -573,11 +574,13 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
presentationTimeUs, presentationTimeUs,
TransformerUtil.getMediaCodecFlags(isKeyFrame ? C.BUFFER_FLAG_KEY_FRAME : 0)); TransformerUtil.getMediaCodecFlags(isKeyFrame ? C.BUFFER_FLAG_KEY_FRAME : 0));
muxer.writeSampleData(trackInfo.trackToken, data, bufferInfo); muxer.writeSampleData(trackInfo.trackToken, data, bufferInfo);
if (trackType == C.TRACK_TYPE_VIDEO) {
DebugTraceUtil.logEvent(COMPONENT_MUXER, EVENT_WRITE_SAMPLE_VIDEO, presentationTimeUs); DebugTraceUtil.logEvent(
} else if (trackType == C.TRACK_TYPE_AUDIO) { COMPONENT_MUXER,
DebugTraceUtil.logEvent(COMPONENT_MUXER, EVENT_WRITE_SAMPLE_AUDIO, presentationTimeUs); EVENT_ACCEPTED_INPUT,
} presentationTimeUs,
/* extraFormat= */ "%s",
/* extraArgs...= */ Util.getTrackTypeString(trackType));
previousTrackType = trackType; previousTrackType = trackType;
return true; return true;
} }
@ -597,11 +600,12 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
maxEndedTrackTimeUs = max(maxEndedTrackTimeUs, trackInfo.timeUs); maxEndedTrackTimeUs = max(maxEndedTrackTimeUs, trackInfo.timeUs);
listener.onTrackEnded( listener.onTrackEnded(
trackType, trackInfo.format, trackInfo.getAverageBitrate(), trackInfo.sampleCount); trackType, trackInfo.format, trackInfo.getAverageBitrate(), trackInfo.sampleCount);
if (trackType == C.TRACK_TYPE_VIDEO) { DebugTraceUtil.logEvent(
DebugTraceUtil.logEvent(COMPONENT_MUXER, EVENT_TRACK_ENDED_VIDEO, trackInfo.timeUs); COMPONENT_MUXER,
} else if (trackType == C.TRACK_TYPE_AUDIO) { EVENT_INPUT_ENDED,
DebugTraceUtil.logEvent(COMPONENT_MUXER, EVENT_TRACK_ENDED_AUDIO, trackInfo.timeUs); trackInfo.timeUs,
} /* extraFormat= */ "%s",
/* extraArgs...= */ Util.getTrackTypeString(trackType));
if (muxerMode == MUXER_MODE_MUX_PARTIAL) { if (muxerMode == MUXER_MODE_MUX_PARTIAL) {
if (trackType == C.TRACK_TYPE_VIDEO) { if (trackType == C.TRACK_TYPE_VIDEO) {