From 71036a69737681972b49ee9431f17b043dace529 Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 13 Dec 2019 16:04:26 +0000 Subject: [PATCH] Ignore throttled network requests in DefaultBandwidthMeter. These are not useful for estimating the network speed and should be ignored. PiperOrigin-RevId: 285400948 --- .../exoplayer2/upstream/DefaultBandwidthMeter.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java index 0309292164..1b69455695 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java @@ -326,7 +326,7 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList @Override public synchronized void onTransferStart( DataSource source, DataSpec dataSpec, boolean isNetwork) { - if (!isNetwork) { + if (!isTransferAtFullNetworkSpeed(dataSpec, isNetwork)) { return; } if (streamCount == 0) { @@ -338,7 +338,7 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList @Override public synchronized void onBytesTransferred( DataSource source, DataSpec dataSpec, boolean isNetwork, int bytes) { - if (!isNetwork) { + if (!isTransferAtFullNetworkSpeed(dataSpec, isNetwork)) { return; } sampleBytesTransferred += bytes; @@ -346,7 +346,7 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList @Override public synchronized void onTransferEnd(DataSource source, DataSpec dataSpec, boolean isNetwork) { - if (!isNetwork) { + if (!isTransferAtFullNetworkSpeed(dataSpec, isNetwork)) { return; } Assertions.checkState(streamCount > 0); @@ -420,6 +420,10 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList return initialBitrateEstimate; } + private static boolean isTransferAtFullNetworkSpeed(DataSpec dataSpec, boolean isNetwork) { + return isNetwork && !dataSpec.isFlagSet(DataSpec.FLAG_MIGHT_NOT_USE_FULL_NETWORK_SPEED); + } + /* * Note: This class only holds a weak reference to DefaultBandwidthMeter instances. It should not * be made non-static, since doing so adds a strong reference (i.e. DefaultBandwidthMeter.this).