From 6b9c43e578c9440a2f0af72f8aee6173760283b7 Mon Sep 17 00:00:00 2001 From: olly Date: Tue, 3 May 2016 04:09:40 -0700 Subject: [PATCH] Avoid expensive equality checks in DefaultTrackOutput. If the media format changes from one Format object to another one that's is equal (but not the same object), readData would end up performing an expensive equality evaluation on every invocation. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=121362300 --- .../exoplayer/extractor/DefaultTrackOutput.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/DefaultTrackOutput.java b/library/src/main/java/com/google/android/exoplayer/extractor/DefaultTrackOutput.java index e91133d356..e7dd3c80f7 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/DefaultTrackOutput.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/DefaultTrackOutput.java @@ -225,8 +225,8 @@ public final class DefaultTrackOutput implements TrackOutput { * @return The result, which can be {@link TrackStream#NOTHING_READ}, * {@link TrackStream#FORMAT_READ} or {@link TrackStream#BUFFER_READ}. */ - public int readData(FormatHolder formatHolder, DecoderInputBuffer buffer, - boolean loadingFinished, long decodeOnlyUntilUs) { + public int readData(FormatHolder formatHolder, DecoderInputBuffer buffer, boolean loadingFinished, + long decodeOnlyUntilUs) { switch (infoQueue.readData(formatHolder, buffer, downstreamFormat, extrasHolder)) { case TrackStream.NOTHING_READ: if (loadingFinished) { @@ -643,14 +643,14 @@ public final class DefaultTrackOutput implements TrackOutput { public synchronized int readData(FormatHolder formatHolder, DecoderInputBuffer buffer, Format downstreamFormat, BufferExtrasHolder extrasHolder) { if (queueSize == 0) { - if (upstreamFormat != null && !upstreamFormat.equals(downstreamFormat)) { + if (upstreamFormat != null && upstreamFormat != downstreamFormat) { formatHolder.format = upstreamFormat; return TrackStream.FORMAT_READ; } return TrackStream.NOTHING_READ; } - if (!formats[relativeReadIndex].equals(downstreamFormat)) { + if (formats[relativeReadIndex] != downstreamFormat) { formatHolder.format = formats[relativeReadIndex]; return TrackStream.FORMAT_READ; } @@ -741,7 +741,10 @@ public final class DefaultTrackOutput implements TrackOutput { // Called by the loading thread. public synchronized void format(Format format) { - upstreamFormat = format; + // We suppress changes between equal formats so we can use referential equality in readData. + if (!format.equals(upstreamFormat)) { + upstreamFormat = format; + } } public synchronized void commitSample(long timeUs, int sampleFlags, long offset, int size,