Commit ca473c86 by olly Committed by Oliver Woodman

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
parent af507efb
...@@ -15,8 +15,9 @@ ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment