Simplify DefaultDataSourceChain to use addTransferListener

Also locally cache length in BaseDataSource and use zero cost
castNonNull to make sure there's no performance regression.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=207715734
This commit is contained in:
olly 2018-08-07 08:02:29 -07:00 committed by Oliver Woodman
parent af507efb2a
commit ca473c86c7

View file

@ -15,8 +15,9 @@
*/ */
package com.google.android.exoplayer2.upstream; package com.google.android.exoplayer2.upstream;
import static com.google.android.exoplayer2.util.Util.castNonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import com.google.android.exoplayer2.util.Assertions;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
@ -31,6 +32,7 @@ public abstract class BaseDataSource implements DataSource {
private final boolean isNetwork; private final boolean isNetwork;
private final ArrayList<TransferListener> listeners; private final ArrayList<TransferListener> listeners;
private int listenerCount;
private @Nullable DataSpec dataSpec; private @Nullable DataSpec dataSpec;
/** /**
@ -46,6 +48,7 @@ public abstract class BaseDataSource implements DataSource {
@Override @Override
public final void addTransferListener(TransferListener transferListener) { public final void addTransferListener(TransferListener transferListener) {
listeners.add(transferListener); listeners.add(transferListener);
listenerCount++;
} }
/** /**
@ -54,7 +57,7 @@ public abstract class BaseDataSource implements DataSource {
* @param dataSpec {@link DataSpec} describing the data for initializing transfer. * @param dataSpec {@link DataSpec} describing the data for initializing transfer.
*/ */
protected final void transferInitializing(DataSpec dataSpec) { protected final void transferInitializing(DataSpec dataSpec) {
for (int i = 0; i < listeners.size(); i++) { for (int i = 0; i < listenerCount; i++) {
listeners.get(i).onTransferInitializing(/* source= */ this, dataSpec, isNetwork); listeners.get(i).onTransferInitializing(/* source= */ this, dataSpec, isNetwork);
} }
} }
@ -66,7 +69,7 @@ public abstract class BaseDataSource implements DataSource {
*/ */
protected final void transferStarted(DataSpec dataSpec) { protected final void transferStarted(DataSpec dataSpec) {
this.dataSpec = dataSpec; this.dataSpec = dataSpec;
for (int i = 0; i < listeners.size(); i++) { for (int i = 0; i < listenerCount; i++) {
listeners.get(i).onTransferStart(/* source= */ this, dataSpec, isNetwork); listeners.get(i).onTransferStart(/* source= */ this, dataSpec, isNetwork);
} }
} }
@ -78,8 +81,8 @@ public abstract class BaseDataSource implements DataSource {
* (or if the first call, since the transfer was started). * (or if the first call, since the transfer was started).
*/ */
protected final void bytesTransferred(int bytesTransferred) { protected final void bytesTransferred(int bytesTransferred) {
DataSpec dataSpec = Assertions.checkNotNull(this.dataSpec); DataSpec dataSpec = castNonNull(this.dataSpec);
for (int i = 0; i < listeners.size(); i++) { for (int i = 0; i < listenerCount; i++) {
listeners listeners
.get(i) .get(i)
.onBytesTransferred(/* source= */ this, dataSpec, isNetwork, bytesTransferred); .onBytesTransferred(/* source= */ this, dataSpec, isNetwork, bytesTransferred);
@ -88,8 +91,8 @@ public abstract class BaseDataSource implements DataSource {
/** Notifies listeners that a transfer ended. */ /** Notifies listeners that a transfer ended. */
protected final void transferEnded() { protected final void transferEnded() {
DataSpec dataSpec = Assertions.checkNotNull(this.dataSpec); DataSpec dataSpec = castNonNull(this.dataSpec);
for (int i = 0; i < listeners.size(); i++) { for (int i = 0; i < listenerCount; i++) {
listeners.get(i).onTransferEnd(/* source= */ this, dataSpec, isNetwork); listeners.get(i).onTransferEnd(/* source= */ this, dataSpec, isNetwork);
} }
this.dataSpec = null; this.dataSpec = null;