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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/task_dependency_manager.cc

Issue 212203003: [SyncFS] Add exclusive task support for TaskDependencyManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync_file_system/drive_backend/task_dependency_manager. h" 5 #include "chrome/browser/sync_file_system/drive_backend/task_dependency_manager. h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 10
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 for (itr = paths_to_insert.begin(); itr != end; ++itr) 52 for (itr = paths_to_insert.begin(); itr != end; ++itr)
53 paths->erase(*itr); 53 paths->erase(*itr);
54 return false; 54 return false;
55 } 55 }
56 } 56 }
57 return true; 57 return true;
58 } 58 }
59 59
60 } // namespace 60 } // namespace
61 61
62 BlockingFactor::BlockingFactor() {} 62 BlockingFactor::BlockingFactor() : exclusive(false) {}
63 BlockingFactor::~BlockingFactor() {} 63 BlockingFactor::~BlockingFactor() {}
64 64
65 TaskDependencyManager::TaskDependencyManager() {} 65 TaskDependencyManager::TaskDependencyManager()
66 : running_exclusive_task_(false) {}
66 67
67 TaskDependencyManager::~TaskDependencyManager() { 68 TaskDependencyManager::~TaskDependencyManager() {
68 DCHECK(paths_by_app_id_.empty()); 69 DCHECK(paths_by_app_id_.empty());
69 DCHECK(file_ids_.empty()); 70 DCHECK(file_ids_.empty());
70 DCHECK(tracker_ids_.empty()); 71 DCHECK(tracker_ids_.empty());
71 } 72 }
72 73
73 bool TaskDependencyManager::Insert(const BlockingFactor& blocking_factor) { 74 bool TaskDependencyManager::Insert(const BlockingFactor& blocking_factor) {
75 if (running_exclusive_task_)
76 return false;
77
78 if (blocking_factor.exclusive) {
79 if (!tracker_ids_.empty() ||
80 !file_ids_.empty() ||
81 !paths_by_app_id_.empty())
82 return false;
83 running_exclusive_task_ = true;
84 return true;
85 }
86
74 if (!InsertAllOrNone(blocking_factor.tracker_ids, &tracker_ids_)) 87 if (!InsertAllOrNone(blocking_factor.tracker_ids, &tracker_ids_))
75 goto fail_on_tracker_id_insertion; 88 goto fail_on_tracker_id_insertion;
76 89
77 if (!InsertAllOrNone(blocking_factor.file_ids, &file_ids_)) 90 if (!InsertAllOrNone(blocking_factor.file_ids, &file_ids_))
78 goto fail_on_file_id_insertion; 91 goto fail_on_file_id_insertion;
79 92
80 if (!blocking_factor.app_id.empty() && 93 if (!blocking_factor.app_id.empty() &&
81 !InsertPaths(blocking_factor.paths, 94 !InsertPaths(blocking_factor.paths,
82 &paths_by_app_id_[blocking_factor.app_id])) { 95 &paths_by_app_id_[blocking_factor.app_id])) {
83 if (paths_by_app_id_[blocking_factor.app_id].empty()) 96 if (paths_by_app_id_[blocking_factor.app_id].empty())
84 paths_by_app_id_.erase(blocking_factor.app_id); 97 paths_by_app_id_.erase(blocking_factor.app_id);
85 goto fail_on_path_insertion; 98 goto fail_on_path_insertion;
86 } 99 }
87 100
88 return true; 101 return true;
89 102
90 fail_on_path_insertion: 103 fail_on_path_insertion:
91 EraseContainer(blocking_factor.file_ids, &file_ids_); 104 EraseContainer(blocking_factor.file_ids, &file_ids_);
92 fail_on_file_id_insertion: 105 fail_on_file_id_insertion:
93 EraseContainer(blocking_factor.tracker_ids, &tracker_ids_); 106 EraseContainer(blocking_factor.tracker_ids, &tracker_ids_);
94 fail_on_tracker_id_insertion: 107 fail_on_tracker_id_insertion:
95 108
96 return false; 109 return false;
97 } 110 }
98 111
99 void TaskDependencyManager::Erase(const BlockingFactor& blocking_factor) { 112 void TaskDependencyManager::Erase(const BlockingFactor& blocking_factor) {
113 if (blocking_factor.exclusive) {
114 DCHECK(running_exclusive_task_);
115 DCHECK(paths_by_app_id_.empty());
116 DCHECK(file_ids_.empty());
117 DCHECK(tracker_ids_.empty());
118
119 running_exclusive_task_ = false;
120 return;
121 }
122
100 if (!blocking_factor.app_id.empty()) { 123 if (!blocking_factor.app_id.empty()) {
101 EraseContainer(blocking_factor.paths, 124 EraseContainer(blocking_factor.paths,
102 &paths_by_app_id_[blocking_factor.app_id]); 125 &paths_by_app_id_[blocking_factor.app_id]);
103 if (paths_by_app_id_[blocking_factor.app_id].empty()) 126 if (paths_by_app_id_[blocking_factor.app_id].empty())
104 paths_by_app_id_.erase(blocking_factor.app_id); 127 paths_by_app_id_.erase(blocking_factor.app_id);
105 } 128 }
106 129
107 EraseContainer(blocking_factor.file_ids, &file_ids_); 130 EraseContainer(blocking_factor.file_ids, &file_ids_);
108 EraseContainer(blocking_factor.tracker_ids, &tracker_ids_); 131 EraseContainer(blocking_factor.tracker_ids, &tracker_ids_);
109 } 132 }
110 133
111 } // namespace drive_backend 134 } // namespace drive_backend
112 } // namespace sync_file_system 135 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698