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

Side by Side Diff: sync/sessions/status_controller.cc

Issue 10933075: FYI: Remove PerModelSafeGroupState + move ConflictResolution (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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
« no previous file with comments | « sync/sessions/status_controller.h ('k') | sync/sessions/status_controller_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "sync/sessions/status_controller.h" 5 #include "sync/sessions/status_controller.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "sync/internal_api/public/base/model_type.h" 10 #include "sync/internal_api/public/base/model_type.h"
11 #include "sync/protocol/sync_protocol_error.h" 11 #include "sync/protocol/sync_protocol_error.h"
12 12
13 namespace syncer { 13 namespace syncer {
14 namespace sessions { 14 namespace sessions {
15 15
16 StatusController::StatusController(const ModelSafeRoutingInfo& routes) 16 StatusController::StatusController(const ModelSafeRoutingInfo& routes)
17 : per_model_group_deleter_(&per_model_group_), 17 : group_restriction_in_effect_(false),
18 group_restriction_in_effect_(false),
19 group_restriction_(GROUP_PASSIVE), 18 group_restriction_(GROUP_PASSIVE),
20 routing_info_(routes) { 19 routing_info_(routes) {
21 } 20 }
22 21
23 StatusController::~StatusController() {} 22 StatusController::~StatusController() {}
24 23
25 const UpdateProgress* StatusController::update_progress() const {
26 const PerModelSafeGroupState* state =
27 GetModelSafeGroupState(true, group_restriction_);
28 return state ? &state->update_progress : NULL;
29 }
30
31 UpdateProgress* StatusController::mutable_update_progress() {
32 return &GetOrCreateModelSafeGroupState(
33 true, group_restriction_)->update_progress;
34 }
35
36 const ConflictProgress* StatusController::conflict_progress() const {
37 const PerModelSafeGroupState* state =
38 GetModelSafeGroupState(true, group_restriction_);
39 return state ? &state->conflict_progress : NULL;
40 }
41
42 ConflictProgress* StatusController::mutable_conflict_progress() {
43 return &GetOrCreateModelSafeGroupState(
44 true, group_restriction_)->conflict_progress;
45 }
46
47 const ConflictProgress* StatusController::GetUnrestrictedConflictProgress(
48 ModelSafeGroup group) const {
49 const PerModelSafeGroupState* state =
50 GetModelSafeGroupState(false, group);
51 return state ? &state->conflict_progress : NULL;
52 }
53
54 ConflictProgress*
55 StatusController::GetUnrestrictedMutableConflictProgressForTest(
56 ModelSafeGroup group) {
57 return &GetOrCreateModelSafeGroupState(false, group)->conflict_progress;
58 }
59
60 const UpdateProgress* StatusController::GetUnrestrictedUpdateProgress(
61 ModelSafeGroup group) const {
62 const PerModelSafeGroupState* state =
63 GetModelSafeGroupState(false, group);
64 return state ? &state->update_progress : NULL;
65 }
66
67 UpdateProgress*
68 StatusController::GetUnrestrictedMutableUpdateProgressForTest(
69 ModelSafeGroup group) {
70 return &GetOrCreateModelSafeGroupState(false, group)->update_progress;
71 }
72
73 const PerModelSafeGroupState* StatusController::GetModelSafeGroupState(
74 bool restrict, ModelSafeGroup group) const {
75 DCHECK_EQ(restrict, group_restriction_in_effect_);
76 std::map<ModelSafeGroup, PerModelSafeGroupState*>::const_iterator it =
77 per_model_group_.find(group);
78 return (it == per_model_group_.end()) ? NULL : it->second;
79 }
80
81 PerModelSafeGroupState* StatusController::GetOrCreateModelSafeGroupState(
82 bool restrict, ModelSafeGroup group) {
83 DCHECK_EQ(restrict, group_restriction_in_effect_);
84 std::map<ModelSafeGroup, PerModelSafeGroupState*>::iterator it =
85 per_model_group_.find(group);
86 if (it == per_model_group_.end()) {
87 PerModelSafeGroupState* state = new PerModelSafeGroupState();
88 it = per_model_group_.insert(std::make_pair(group, state)).first;
89 }
90 return it->second;
91 }
92
93 void StatusController::increment_num_updates_downloaded_by(int value) { 24 void StatusController::increment_num_updates_downloaded_by(int value) {
94 model_neutral_.num_updates_downloaded_total += value; 25 model_neutral_.num_updates_downloaded_total += value;
95 } 26 }
96 27
97 void StatusController::set_types_needing_local_migration(ModelTypeSet types) { 28 void StatusController::set_types_needing_local_migration(ModelTypeSet types) {
98 model_neutral_.types_needing_local_migration = types; 29 model_neutral_.types_needing_local_migration = types;
99 } 30 }
100 31
101 void StatusController::increment_num_tombstone_updates_downloaded_by( 32 void StatusController::increment_num_tombstone_updates_downloaded_by(
102 int value) { 33 int value) {
(...skipping 19 matching lines...) Expand all
122 } 53 }
123 54
124 void StatusController::increment_num_successful_bookmark_commits() { 55 void StatusController::increment_num_successful_bookmark_commits() {
125 model_neutral_.num_successful_bookmark_commits++; 56 model_neutral_.num_successful_bookmark_commits++;
126 } 57 }
127 58
128 void StatusController::increment_num_successful_commits() { 59 void StatusController::increment_num_successful_commits() {
129 model_neutral_.num_successful_commits++; 60 model_neutral_.num_successful_commits++;
130 } 61 }
131 62
63 void StatusController::increment_num_updates_applied_by(int value) {
64 model_neutral_.num_updates_applied += value;
65 }
66
67 void StatusController::increment_num_encryption_conflicts_by(int value) {
68 model_neutral_.num_encryption_conflicts += value;
69 }
70
71 void StatusController::increment_num_hierarchy_conflicts_by(int value) {
72 model_neutral_.num_hierarchy_conflicts += value;
73 }
74
75 void StatusController::increment_num_server_conflicts() {
76 model_neutral_.num_server_conflicts++;
77 }
78
132 void StatusController::increment_num_local_overwrites() { 79 void StatusController::increment_num_local_overwrites() {
133 model_neutral_.num_local_overwrites++; 80 model_neutral_.num_local_overwrites++;
134 } 81 }
135 82
136 void StatusController::increment_num_server_overwrites() { 83 void StatusController::increment_num_server_overwrites() {
137 model_neutral_.num_server_overwrites++; 84 model_neutral_.num_server_overwrites++;
138 } 85 }
139 86
140 void StatusController::set_sync_protocol_error( 87 void StatusController::set_sync_protocol_error(
141 const SyncProtocolError& error) { 88 const SyncProtocolError& error) {
(...skipping 10 matching lines...) Expand all
152 } 99 }
153 100
154 void StatusController::set_commit_result(const SyncerError result) { 101 void StatusController::set_commit_result(const SyncerError result) {
155 model_neutral_.commit_result = result; 102 model_neutral_.commit_result = result;
156 } 103 }
157 104
158 SyncerError StatusController::last_get_key_result() const { 105 SyncerError StatusController::last_get_key_result() const {
159 return model_neutral_.last_get_key_result; 106 return model_neutral_.last_get_key_result;
160 } 107 }
161 108
162 void StatusController::update_conflicts_resolved(bool resolved) {
163 model_neutral_.conflicts_resolved |= resolved;
164 }
165 void StatusController::reset_conflicts_resolved() {
166 model_neutral_.conflicts_resolved = false;
167 }
168
169 // Returns the number of updates received from the sync server. 109 // Returns the number of updates received from the sync server.
170 int64 StatusController::CountUpdates() const { 110 int64 StatusController::CountUpdates() const {
171 const sync_pb::ClientToServerResponse& updates = 111 const sync_pb::ClientToServerResponse& updates =
172 model_neutral_.updates_response; 112 model_neutral_.updates_response;
173 if (updates.has_get_updates()) { 113 if (updates.has_get_updates()) {
174 return updates.get_updates().entries().size(); 114 return updates.get_updates().entries().size();
175 } else { 115 } else {
176 return 0; 116 return 0;
177 } 117 }
178 } 118 }
179 119
180 bool StatusController::HasConflictingUpdates() const { 120 int StatusController::num_updates_applied() const {
181 DCHECK(!group_restriction_in_effect_) 121 return model_neutral_.num_updates_applied;
182 << "HasConflictingUpdates applies to all ModelSafeGroups";
183 std::map<ModelSafeGroup, PerModelSafeGroupState*>::const_iterator it =
184 per_model_group_.begin();
185 for (; it != per_model_group_.end(); ++it) {
186 if (it->second->update_progress.HasConflictingUpdates())
187 return true;
188 }
189 return false;
190 } 122 }
191 123
192 int StatusController::TotalNumEncryptionConflictingItems() const { 124 int StatusController::num_server_overwrites() const {
193 DCHECK(!group_restriction_in_effect_) 125 return model_neutral_.num_server_overwrites;
194 << "TotalNumEncryptionConflictingItems applies to all ModelSafeGroups";
195 std::map<ModelSafeGroup, PerModelSafeGroupState*>::const_iterator it =
196 per_model_group_.begin();
197 int sum = 0;
198 for (; it != per_model_group_.end(); ++it) {
199 sum += it->second->conflict_progress.EncryptionConflictingItemsSize();
200 }
201 return sum;
202 } 126 }
203 127
204 int StatusController::TotalNumHierarchyConflictingItems() const { 128 int StatusController::num_encryption_conflicts() const {
205 DCHECK(!group_restriction_in_effect_) 129 return model_neutral_.num_encryption_conflicts;
206 << "TotalNumHierarchyConflictingItems applies to all ModelSafeGroups";
207 std::map<ModelSafeGroup, PerModelSafeGroupState*>::const_iterator it =
208 per_model_group_.begin();
209 int sum = 0;
210 for (; it != per_model_group_.end(); ++it) {
211 sum += it->second->conflict_progress.HierarchyConflictingItemsSize();
212 }
213 return sum;
214 } 130 }
215 131
216 int StatusController::TotalNumSimpleConflictingItems() const { 132 int StatusController::num_hierarchy_conflicts() const {
217 DCHECK(!group_restriction_in_effect_) 133 DCHECK(!group_restriction_in_effect_)
218 << "TotalNumSimpleConflictingItems applies to all ModelSafeGroups"; 134 << "num_hierarchy_conflicts applies to all ModelSafeGroups";
219 std::map<ModelSafeGroup, PerModelSafeGroupState*>::const_iterator it = 135 return model_neutral_.num_hierarchy_conflicts;
220 per_model_group_.begin();
221 int sum = 0;
222 for (; it != per_model_group_.end(); ++it) {
223 sum += it->second->conflict_progress.SimpleConflictingItemsSize();
224 }
225 return sum;
226 } 136 }
227 137
228 int StatusController::TotalNumServerConflictingItems() const { 138 int StatusController::num_server_conflicts() const {
229 DCHECK(!group_restriction_in_effect_) 139 DCHECK(!group_restriction_in_effect_)
230 << "TotalNumServerConflictingItems applies to all ModelSafeGroups"; 140 << "num_server_conflicts applies to all ModelSafeGroups";
231 std::map<ModelSafeGroup, PerModelSafeGroupState*>::const_iterator it = 141 return model_neutral_.num_server_conflicts;
232 per_model_group_.begin();
233 int sum = 0;
234 for (; it != per_model_group_.end(); ++it) {
235 sum += it->second->conflict_progress.ServerConflictingItemsSize();
236 }
237 return sum;
238 } 142 }
239 143
240 int StatusController::TotalNumConflictingItems() const { 144 int StatusController::TotalNumConflictingItems() const {
241 DCHECK(!group_restriction_in_effect_) 145 DCHECK(!group_restriction_in_effect_)
242 << "TotalNumConflictingItems applies to all ModelSafeGroups"; 146 << "TotalNumConflictingItems applies to all ModelSafeGroups";
243 std::map<ModelSafeGroup, PerModelSafeGroupState*>::const_iterator it =
244 per_model_group_.begin();
245 int sum = 0; 147 int sum = 0;
246 for (; it != per_model_group_.end(); ++it) { 148 sum += num_encryption_conflicts();
247 sum += it->second->conflict_progress.SimpleConflictingItemsSize(); 149 sum += num_hierarchy_conflicts();
248 sum += it->second->conflict_progress.EncryptionConflictingItemsSize(); 150 sum += num_server_conflicts();
249 sum += it->second->conflict_progress.HierarchyConflictingItemsSize();
250 sum += it->second->conflict_progress.ServerConflictingItemsSize();
251 }
252 return sum; 151 return sum;
253 } 152 }
254 153
255 bool StatusController::ServerSaysNothingMoreToDownload() const { 154 bool StatusController::ServerSaysNothingMoreToDownload() const {
256 if (!download_updates_succeeded()) 155 if (!download_updates_succeeded())
257 return false; 156 return false;
258 157
259 if (!updates_response().get_updates().has_changes_remaining()) { 158 if (!updates_response().get_updates().has_changes_remaining()) {
260 NOTREACHED(); // Server should always send changes remaining. 159 NOTREACHED(); // Server should always send changes remaining.
261 return false; // Avoid looping forever. 160 return false; // Avoid looping forever.
262 } 161 }
263 // Changes remaining is an estimate, but if it's estimated to be 162 // Changes remaining is an estimate, but if it's estimated to be
264 // zero, that's firm and we don't have to ask again. 163 // zero, that's firm and we don't have to ask again.
265 return updates_response().get_updates().changes_remaining() == 0; 164 return updates_response().get_updates().changes_remaining() == 0;
266 } 165 }
267 166
268 void StatusController::set_debug_info_sent() { 167 void StatusController::set_debug_info_sent() {
269 model_neutral_.debug_info_sent = true; 168 model_neutral_.debug_info_sent = true;
270 } 169 }
271 170
272 bool StatusController::debug_info_sent() const { 171 bool StatusController::debug_info_sent() const {
273 return model_neutral_.debug_info_sent; 172 return model_neutral_.debug_info_sent;
274 } 173 }
275 174
276 } // namespace sessions 175 } // namespace sessions
277 } // namespace syncer 176 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/sessions/status_controller.h ('k') | sync/sessions/status_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698