Add percentage field to CacheUtil.CachingCounters

PiperOrigin-RevId: 241524766
This commit is contained in:
eguven 2019-04-02 15:34:18 +01:00 committed by Oliver Woodman
parent 9aacef47ad
commit d5b19694fa
2 changed files with 15 additions and 4 deletions

View file

@ -103,10 +103,7 @@ public final class ProgressiveDownloader implements Downloader {
@Override
public float getDownloadPercentage() {
long contentLength = cachingCounters.contentLength;
return contentLength == C.LENGTH_UNSET
? C.PERCENTAGE_UNSET
: ((cachingCounters.totalCachedBytes() * 100f) / contentLength);
return cachingCounters.percentage;
}
@Override

View file

@ -42,6 +42,8 @@ public final class CacheUtil {
public volatile long newlyCachedBytes;
/** The length of the content being cached in bytes, or {@link C#LENGTH_UNSET} if unknown. */
public volatile long contentLength = C.LENGTH_UNSET;
/** The percentage of cached data, or {@link C#PERCENTAGE_UNSET} if unavailable. */
public volatile float percentage;
/**
* Returns the sum of {@link #alreadyCachedBytes} and {@link #newlyCachedBytes}.
@ -49,6 +51,16 @@ public final class CacheUtil {
public long totalCachedBytes() {
return alreadyCachedBytes + newlyCachedBytes;
}
/** Updates {@link #percentage} value using other values. */
public void updatePercentage() {
// Take local snapshot of the volatile field
long contentLength = this.contentLength;
percentage =
contentLength == C.LENGTH_UNSET
? C.PERCENTAGE_UNSET
: ((totalCachedBytes() * 100f) / contentLength);
}
}
/** Default buffer size to be used while caching. */
@ -105,6 +117,7 @@ public final class CacheUtil {
start += blockLength;
left -= left == C.LENGTH_UNSET ? 0 : blockLength;
}
counters.updatePercentage();
}
/**
@ -293,6 +306,7 @@ public final class CacheUtil {
}
totalRead += read;
counters.newlyCachedBytes += read;
counters.updatePercentage();
}
return totalRead;
} catch (PriorityTaskManager.PriorityTooLowException exception) {