mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Post maxParallelDownload and minRetryCount changes
PiperOrigin-RevId: 245405316
This commit is contained in:
parent
643e187d99
commit
f37b28f12e
@ -133,11 +133,13 @@ public final class DownloadManager {
|
|||||||
private static final int MSG_SET_DOWNLOADS_PAUSED = 1;
|
private static final int MSG_SET_DOWNLOADS_PAUSED = 1;
|
||||||
private static final int MSG_SET_NOT_MET_REQUIREMENTS = 2;
|
private static final int MSG_SET_NOT_MET_REQUIREMENTS = 2;
|
||||||
private static final int MSG_SET_STOP_REASON = 3;
|
private static final int MSG_SET_STOP_REASON = 3;
|
||||||
private static final int MSG_ADD_DOWNLOAD = 4;
|
private static final int MSG_SET_MAX_PARALLEL_DOWNLOADS = 4;
|
||||||
private static final int MSG_REMOVE_DOWNLOAD = 5;
|
private static final int MSG_SET_MIN_RETRY_COUNT = 5;
|
||||||
private static final int MSG_DOWNLOAD_THREAD_STOPPED = 6;
|
private static final int MSG_ADD_DOWNLOAD = 6;
|
||||||
private static final int MSG_CONTENT_LENGTH_CHANGED = 7;
|
private static final int MSG_REMOVE_DOWNLOAD = 7;
|
||||||
private static final int MSG_RELEASE = 8;
|
private static final int MSG_DOWNLOAD_THREAD_STOPPED = 8;
|
||||||
|
private static final int MSG_CONTENT_LENGTH_CHANGED = 9;
|
||||||
|
private static final int MSG_RELEASE = 10;
|
||||||
|
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@IntDef({
|
@IntDef({
|
||||||
@ -179,17 +181,17 @@ public final class DownloadManager {
|
|||||||
private boolean initialized;
|
private boolean initialized;
|
||||||
private boolean released;
|
private boolean released;
|
||||||
private boolean downloadsPaused;
|
private boolean downloadsPaused;
|
||||||
|
private int maxParallelDownloads;
|
||||||
|
private int minRetryCount;
|
||||||
private RequirementsWatcher requirementsWatcher;
|
private RequirementsWatcher requirementsWatcher;
|
||||||
|
|
||||||
// Mutable fields that are accessed on the internal thread.
|
// Mutable fields that are accessed on the internal thread.
|
||||||
@Requirements.RequirementFlags private int notMetRequirements;
|
@Requirements.RequirementFlags private int notMetRequirements;
|
||||||
private boolean downloadsPausedInternal;
|
private boolean downloadsPausedInternal;
|
||||||
|
private int maxParallelDownloadsInternal;
|
||||||
|
private int minRetryCountInternal;
|
||||||
private int parallelDownloads;
|
private int parallelDownloads;
|
||||||
|
|
||||||
// TODO: Fix these to properly support changes at runtime.
|
|
||||||
private volatile int maxParallelDownloads;
|
|
||||||
private volatile int minRetryCount;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a {@link DownloadManager}.
|
* Constructs a {@link DownloadManager}.
|
||||||
*
|
*
|
||||||
@ -221,7 +223,9 @@ public final class DownloadManager {
|
|||||||
this.downloadIndex = downloadIndex;
|
this.downloadIndex = downloadIndex;
|
||||||
this.downloaderFactory = downloaderFactory;
|
this.downloaderFactory = downloaderFactory;
|
||||||
maxParallelDownloads = DEFAULT_MAX_PARALLEL_DOWNLOADS;
|
maxParallelDownloads = DEFAULT_MAX_PARALLEL_DOWNLOADS;
|
||||||
|
maxParallelDownloadsInternal = DEFAULT_MAX_PARALLEL_DOWNLOADS;
|
||||||
minRetryCount = DEFAULT_MIN_RETRY_COUNT;
|
minRetryCount = DEFAULT_MIN_RETRY_COUNT;
|
||||||
|
minRetryCountInternal = DEFAULT_MIN_RETRY_COUNT;
|
||||||
downloadsPaused = true;
|
downloadsPaused = true;
|
||||||
downloadsPausedInternal = true;
|
downloadsPausedInternal = true;
|
||||||
|
|
||||||
@ -319,9 +323,15 @@ public final class DownloadManager {
|
|||||||
*
|
*
|
||||||
* @param maxParallelDownloads The maximum number of parallel downloads.
|
* @param maxParallelDownloads The maximum number of parallel downloads.
|
||||||
*/
|
*/
|
||||||
// TODO: Fix to properly support changes at runtime.
|
|
||||||
public void setMaxParallelDownloads(int maxParallelDownloads) {
|
public void setMaxParallelDownloads(int maxParallelDownloads) {
|
||||||
|
if (this.maxParallelDownloads == maxParallelDownloads) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.maxParallelDownloads = maxParallelDownloads;
|
this.maxParallelDownloads = maxParallelDownloads;
|
||||||
|
pendingMessages++;
|
||||||
|
internalHandler
|
||||||
|
.obtainMessage(MSG_SET_MAX_PARALLEL_DOWNLOADS, maxParallelDownloads, /* unused */ 0)
|
||||||
|
.sendToTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -338,9 +348,15 @@ public final class DownloadManager {
|
|||||||
*
|
*
|
||||||
* @param minRetryCount The minimum number of times that a download will be retried.
|
* @param minRetryCount The minimum number of times that a download will be retried.
|
||||||
*/
|
*/
|
||||||
// TODO: Fix to properly support changes at runtime.
|
|
||||||
public void setMinRetryCount(int minRetryCount) {
|
public void setMinRetryCount(int minRetryCount) {
|
||||||
|
if (this.minRetryCount == minRetryCount) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.minRetryCount = minRetryCount;
|
this.minRetryCount = minRetryCount;
|
||||||
|
pendingMessages++;
|
||||||
|
internalHandler
|
||||||
|
.obtainMessage(MSG_SET_MIN_RETRY_COUNT, minRetryCount, /* unused */ 0)
|
||||||
|
.sendToTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the used {@link DownloadIndex}. */
|
/** Returns the used {@link DownloadIndex}. */
|
||||||
@ -587,6 +603,14 @@ public final class DownloadManager {
|
|||||||
int stopReason = message.arg1;
|
int stopReason = message.arg1;
|
||||||
setStopReasonInternal(id, stopReason);
|
setStopReasonInternal(id, stopReason);
|
||||||
break;
|
break;
|
||||||
|
case MSG_SET_MAX_PARALLEL_DOWNLOADS:
|
||||||
|
int maxParallelDownloads = message.arg1;
|
||||||
|
setMaxParallelDownloadsInternal(maxParallelDownloads);
|
||||||
|
break;
|
||||||
|
case MSG_SET_MIN_RETRY_COUNT:
|
||||||
|
int minRetryCount = message.arg1;
|
||||||
|
setMinRetryCountInternal(minRetryCount);
|
||||||
|
break;
|
||||||
case MSG_ADD_DOWNLOAD:
|
case MSG_ADD_DOWNLOAD:
|
||||||
DownloadRequest request = (DownloadRequest) message.obj;
|
DownloadRequest request = (DownloadRequest) message.obj;
|
||||||
stopReason = message.arg1;
|
stopReason = message.arg1;
|
||||||
@ -688,6 +712,15 @@ public final class DownloadManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setMaxParallelDownloadsInternal(int maxParallelDownloads) {
|
||||||
|
maxParallelDownloadsInternal = maxParallelDownloads;
|
||||||
|
// TODO: Start or stop downloads if necessary.
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setMinRetryCountInternal(int minRetryCount) {
|
||||||
|
minRetryCountInternal = minRetryCount;
|
||||||
|
}
|
||||||
|
|
||||||
private void addDownloadInternal(DownloadRequest request, int stopReason) {
|
private void addDownloadInternal(DownloadRequest request, int stopReason) {
|
||||||
DownloadInternal downloadInternal = getDownload(request.id);
|
DownloadInternal downloadInternal = getDownload(request.id);
|
||||||
if (downloadInternal != null) {
|
if (downloadInternal != null) {
|
||||||
@ -736,14 +769,14 @@ public final class DownloadManager {
|
|||||||
boolean tryToStartDownloads = false;
|
boolean tryToStartDownloads = false;
|
||||||
if (!downloadThread.isRemove) {
|
if (!downloadThread.isRemove) {
|
||||||
// If maxParallelDownloads was hit, there might be a download waiting for a slot.
|
// If maxParallelDownloads was hit, there might be a download waiting for a slot.
|
||||||
tryToStartDownloads = parallelDownloads == maxParallelDownloads;
|
tryToStartDownloads = parallelDownloads == maxParallelDownloadsInternal;
|
||||||
parallelDownloads--;
|
parallelDownloads--;
|
||||||
}
|
}
|
||||||
getDownload(downloadId)
|
getDownload(downloadId)
|
||||||
.onDownloadThreadStopped(downloadThread.isCanceled, downloadThread.finalError);
|
.onDownloadThreadStopped(downloadThread.isCanceled, downloadThread.finalError);
|
||||||
if (tryToStartDownloads) {
|
if (tryToStartDownloads) {
|
||||||
for (int i = 0;
|
for (int i = 0;
|
||||||
parallelDownloads < maxParallelDownloads && i < downloadInternals.size();
|
parallelDownloads < maxParallelDownloadsInternal && i < downloadInternals.size();
|
||||||
i++) {
|
i++) {
|
||||||
downloadInternals.get(i).start();
|
downloadInternals.get(i).start();
|
||||||
}
|
}
|
||||||
@ -804,7 +837,7 @@ public final class DownloadManager {
|
|||||||
}
|
}
|
||||||
boolean isRemove = downloadInternal.isInRemoveState();
|
boolean isRemove = downloadInternal.isInRemoveState();
|
||||||
if (!isRemove) {
|
if (!isRemove) {
|
||||||
if (parallelDownloads == maxParallelDownloads) {
|
if (parallelDownloads == maxParallelDownloadsInternal) {
|
||||||
return START_THREAD_TOO_MANY_DOWNLOADS;
|
return START_THREAD_TOO_MANY_DOWNLOADS;
|
||||||
}
|
}
|
||||||
parallelDownloads++;
|
parallelDownloads++;
|
||||||
@ -813,7 +846,12 @@ public final class DownloadManager {
|
|||||||
DownloadProgress downloadProgress = downloadInternal.download.progress;
|
DownloadProgress downloadProgress = downloadInternal.download.progress;
|
||||||
DownloadThread downloadThread =
|
DownloadThread downloadThread =
|
||||||
new DownloadThread(
|
new DownloadThread(
|
||||||
request, downloader, downloadProgress, isRemove, minRetryCount, internalHandler);
|
request,
|
||||||
|
downloader,
|
||||||
|
downloadProgress,
|
||||||
|
isRemove,
|
||||||
|
minRetryCountInternal,
|
||||||
|
internalHandler);
|
||||||
downloadThreads.put(downloadId, downloadThread);
|
downloadThreads.put(downloadId, downloadThread);
|
||||||
downloadThread.start();
|
downloadThread.start();
|
||||||
logd("Download is started", downloadInternal);
|
logd("Download is started", downloadInternal);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user