Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(885)

Unified Diff: webkit/fileapi/syncable/syncable_file_operation_runner.cc

Issue 11238054: Add OnSyncEnabled/OnWriteEnabled notification handling to operation runner (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: added export Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/fileapi/syncable/syncable_file_operation_runner.cc
diff --git a/webkit/fileapi/syncable/syncable_file_operation_runner.cc b/webkit/fileapi/syncable/syncable_file_operation_runner.cc
index ef9c8995761f4460fb9b68073d1c15001d97e407..0f3afe7239f8c0f9c085de93a952314a548f1ffb 100644
--- a/webkit/fileapi/syncable/syncable_file_operation_runner.cc
+++ b/webkit/fileapi/syncable/syncable_file_operation_runner.cc
@@ -41,38 +41,55 @@ void SyncableFileOperationRunner::Task::Start(LocalFileSyncStatus* status) {
// SyncableFileOperationRunner -------------------------------------------------
-SyncableFileOperationRunner::SyncableFileOperationRunner()
- : sync_status_(new LocalFileSyncStatus) {
+SyncableFileOperationRunner::SyncableFileOperationRunner(
+ int64 max_inflight_tasks,
+ LocalFileSyncStatus* sync_status)
+ : sync_status_(sync_status),
+ max_inflight_tasks_(max_inflight_tasks),
+ num_inflight_tasks_(0) {
DCHECK(CalledOnValidThread());
+ sync_status_->AddObserver(this);
}
SyncableFileOperationRunner::~SyncableFileOperationRunner() {
DCHECK(CalledOnValidThread());
- for_each(pending_operations_.begin(), pending_operations_.end(),
+ for_each(pending_tasks_.begin(), pending_tasks_.end(),
SyncableFileOperationRunner::Task::CancelAndDelete);
}
+void SyncableFileOperationRunner::OnSyncEnabled(const FileSystemURL& url) {
+}
+
+void SyncableFileOperationRunner::OnWriteEnabled(const FileSystemURL& url) {
+ DCHECK(CalledOnValidThread());
+ RunNextRunnableTask();
+}
+
void SyncableFileOperationRunner::PostOperationTask(scoped_ptr<Task> task) {
DCHECK(CalledOnValidThread());
- pending_operations_.push_back(task.release());
+ pending_tasks_.push_back(task.release());
RunNextRunnableTask();
}
void SyncableFileOperationRunner::RunNextRunnableTask() {
DCHECK(CalledOnValidThread());
- for (std::list<Task*>::iterator iter = pending_operations_.begin();
- iter != pending_operations_.end(); ++iter) {
+ for (std::list<Task*>::iterator iter = pending_tasks_.begin();
+ iter != pending_tasks_.end() && ShouldStartMoreTasks();) {
if ((*iter)->IsRunnable(sync_status())) {
+ ++num_inflight_tasks_;
+ DCHECK_GE(num_inflight_tasks_, 1);
scoped_ptr<Task> task(*iter);
- pending_operations_.erase(iter);
+ pending_tasks_.erase(iter++);
task->Start(sync_status());
- return;
}
+ ++iter;
}
}
void SyncableFileOperationRunner::OnOperationCompleted(
const std::vector<FileSystemURL>& target_paths) {
+ --num_inflight_tasks_;
+ DCHECK_GE(num_inflight_tasks_, 0);
for (size_t i = 0; i < target_paths.size(); ++i) {
DCHECK(sync_status()->IsWriting(target_paths[i]));
sync_status()->EndWriting(target_paths[i]);
@@ -80,4 +97,8 @@ void SyncableFileOperationRunner::OnOperationCompleted(
RunNextRunnableTask();
}
+bool SyncableFileOperationRunner::ShouldStartMoreTasks() const {
+ return num_inflight_tasks_ < max_inflight_tasks_;
+}
+
} // namespace fileapi

Powered by Google App Engine
This is Rietveld 408576698