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

Side by Side Diff: chrome/browser/sync/syncable/syncable.cc

Issue 7926001: [Sync] Move change-related methods out of SyncManager::Observer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/syncable/syncable.h" 5 #include "chrome/browser/sync/syncable/syncable.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #include <sys/stat.h> 9 #include <sys/stat.h>
10 #if defined(OS_POSIX) 10 #if defined(OS_POSIX)
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 }; 62 };
63 63
64 static const InvariantCheckLevel kInvariantCheckLevel = VERIFY_IN_MEMORY; 64 static const InvariantCheckLevel kInvariantCheckLevel = VERIFY_IN_MEMORY;
65 65
66 // Max number of milliseconds to spend checking syncable entry invariants 66 // Max number of milliseconds to spend checking syncable entry invariants
67 static const int kInvariantCheckMaxMs = 50; 67 static const int kInvariantCheckMaxMs = 50;
68 } // namespace 68 } // namespace
69 69
70 using std::string; 70 using std::string;
71 71
72
73 namespace syncable { 72 namespace syncable {
74 73
75 #define ENUM_CASE(x) case x: return #x; break 74 #define ENUM_CASE(x) case x: return #x; break
76 75
77 std::string WriterTagToString(WriterTag writer_tag) { 76 std::string WriterTagToString(WriterTag writer_tag) {
78 switch (writer_tag) { 77 switch (writer_tag) {
79 ENUM_CASE(INVALID); 78 ENUM_CASE(INVALID);
80 ENUM_CASE(SYNCER); 79 ENUM_CASE(SYNCER);
81 ENUM_CASE(AUTHWATCHER); 80 ENUM_CASE(AUTHWATCHER);
82 ENUM_CASE(UNITTEST); 81 ENUM_CASE(UNITTEST);
83 ENUM_CASE(VACUUM_AFTER_SAVE); 82 ENUM_CASE(VACUUM_AFTER_SAVE);
84 ENUM_CASE(PURGE_ENTRIES); 83 ENUM_CASE(PURGE_ENTRIES);
85 ENUM_CASE(SYNCAPI); 84 ENUM_CASE(SYNCAPI);
86 }; 85 };
87 NOTREACHED(); 86 NOTREACHED();
88 return ""; 87 return "";
89 } 88 }
90 89
91 #undef ENUM_CASE 90 #undef ENUM_CASE
92 91
93 namespace { 92 WriteTransactionInfo::WriteTransactionInfo(
93 int64 id,
94 tracked_objects::Location location,
95 WriterTag writer,
96 ImmutableEntryKernelMutationMap mutations)
97 : id(id),
98 location_string(location.ToString()),
99 writer(writer),
100 mutations(mutations) {}
101
102 WriteTransactionInfo::WriteTransactionInfo()
103 : id(-1), writer(INVALID) {}
104
105 WriteTransactionInfo::~WriteTransactionInfo() {}
106
107 base::DictionaryValue* WriteTransactionInfo::ToValue(
108 size_t max_mutations_size) const {
109 DictionaryValue* dict = new DictionaryValue();
110 dict->SetString("id", base::Int64ToString(id));
111 dict->SetString("location", location_string);
112 dict->SetString("writer", WriterTagToString(writer));
113 Value* mutations_value = NULL;
114 const size_t mutations_size = mutations.Get().size();
115 if (mutations_size <= max_mutations_size) {
116 mutations_value = EntryKernelMutationMapToValue(mutations.Get());
117 } else {
118 mutations_value =
119 Value::CreateStringValue(
120 base::Uint64ToString(static_cast<uint64>(mutations_size)) +
121 " mutations");
122 }
123 dict->Set("mutations", mutations_value);
124 return dict;
125 }
94 126
95 DictionaryValue* EntryKernelMutationToValue( 127 DictionaryValue* EntryKernelMutationToValue(
96 const EntryKernelMutation& mutation) { 128 const EntryKernelMutation& mutation) {
97 DictionaryValue* dict = new DictionaryValue(); 129 DictionaryValue* dict = new DictionaryValue();
98 dict->Set("original", mutation.original.ToValue()); 130 dict->Set("original", mutation.original.ToValue());
99 dict->Set("mutated", mutation.mutated.ToValue()); 131 dict->Set("mutated", mutation.mutated.ToValue());
100 return dict; 132 return dict;
101 } 133 }
102 134
103 } // namespace
104
105 ListValue* EntryKernelMutationMapToValue( 135 ListValue* EntryKernelMutationMapToValue(
106 const EntryKernelMutationMap& mutations) { 136 const EntryKernelMutationMap& mutations) {
107 ListValue* list = new ListValue(); 137 ListValue* list = new ListValue();
108 for (EntryKernelMutationMap::const_iterator it = mutations.begin(); 138 for (EntryKernelMutationMap::const_iterator it = mutations.begin();
109 it != mutations.end(); ++it) { 139 it != mutations.end(); ++it) {
110 list->Append(EntryKernelMutationToValue(it->second)); 140 list->Append(EntryKernelMutationToValue(it->second));
111 } 141 }
112 return list; 142 return list;
113 } 143 }
114 144
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 } 398 }
369 399
370 Directory::SaveChangesSnapshot::~SaveChangesSnapshot() {} 400 Directory::SaveChangesSnapshot::~SaveChangesSnapshot() {}
371 401
372 Directory::Kernel::Kernel(const FilePath& db_path, 402 Directory::Kernel::Kernel(const FilePath& db_path,
373 const string& name, 403 const string& name,
374 const KernelLoadInfo& info, 404 const KernelLoadInfo& info,
375 DirectoryChangeDelegate* delegate) 405 DirectoryChangeDelegate* delegate)
376 : db_path(db_path), 406 : db_path(db_path),
377 refcount(1), 407 refcount(1),
408 next_write_transaction_id(0),
378 name(name), 409 name(name),
379 metahandles_index(new Directory::MetahandlesIndex), 410 metahandles_index(new Directory::MetahandlesIndex),
380 ids_index(new Directory::IdsIndex), 411 ids_index(new Directory::IdsIndex),
381 parent_id_child_index(new Directory::ParentIdChildIndex), 412 parent_id_child_index(new Directory::ParentIdChildIndex),
382 client_tag_index(new Directory::ClientTagIndex), 413 client_tag_index(new Directory::ClientTagIndex),
383 unapplied_update_metahandles(new MetahandleSet), 414 unapplied_update_metahandles(new MetahandleSet),
384 unsynced_metahandles(new MetahandleSet), 415 unsynced_metahandles(new MetahandleSet),
385 dirty_metahandles(new MetahandleSet), 416 dirty_metahandles(new MetahandleSet),
386 metahandles_to_purge(new MetahandleSet), 417 metahandles_to_purge(new MetahandleSet),
387 info_status(Directory::KERNEL_SHARE_INFO_VALID), 418 info_status(Directory::KERNEL_SHARE_INFO_VALID),
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 if (has_mutations) { 1276 if (has_mutations) {
1246 NotifyTransactionComplete(models_with_changes); 1277 NotifyTransactionComplete(models_with_changes);
1247 } 1278 }
1248 } 1279 }
1249 1280
1250 ModelTypeBitSet WriteTransaction::NotifyTransactionChangingAndEnding( 1281 ModelTypeBitSet WriteTransaction::NotifyTransactionChangingAndEnding(
1251 const ImmutableEntryKernelMutationMap& mutations) { 1282 const ImmutableEntryKernelMutationMap& mutations) {
1252 dirkernel_->transaction_mutex.AssertAcquired(); 1283 dirkernel_->transaction_mutex.AssertAcquired();
1253 DCHECK(!mutations.Get().empty()); 1284 DCHECK(!mutations.Get().empty());
1254 1285
1286 WriteTransactionInfo write_transaction_info(
1287 dirkernel_->next_write_transaction_id, from_here_, writer_, mutations);
1288 ++dirkernel_->next_write_transaction_id;
1289
1290 ImmutableWriteTransactionInfo immutable_write_transaction_info(
1291 &write_transaction_info);
1255 DirectoryChangeDelegate* const delegate = dirkernel_->delegate; 1292 DirectoryChangeDelegate* const delegate = dirkernel_->delegate;
1256 if (writer_ == syncable::SYNCAPI) { 1293 if (writer_ == syncable::SYNCAPI) {
1257 delegate->HandleCalculateChangesChangeEventFromSyncApi( 1294 delegate->HandleCalculateChangesChangeEventFromSyncApi(
1258 mutations.Get(), this); 1295 immutable_write_transaction_info, this);
1259 } else { 1296 } else {
1260 delegate->HandleCalculateChangesChangeEventFromSyncer( 1297 delegate->HandleCalculateChangesChangeEventFromSyncer(
1261 mutations.Get(), this); 1298 immutable_write_transaction_info, this);
1262 } 1299 }
1263 1300
1264 ModelTypeBitSet models_with_changes = 1301 ModelTypeBitSet models_with_changes =
1265 delegate->HandleTransactionEndingChangeEvent(this); 1302 delegate->HandleTransactionEndingChangeEvent(
1303 immutable_write_transaction_info, this);
1266 1304
1267 dirkernel_->observers->Notify( 1305 dirkernel_->observers->Notify(
1268 &TransactionObserver::OnTransactionMutate, 1306 &TransactionObserver::OnTransactionWrite,
1269 from_here_, writer_, mutations, models_with_changes); 1307 immutable_write_transaction_info, models_with_changes);
1270 1308
1271 return models_with_changes; 1309 return models_with_changes;
1272 } 1310 }
1273 1311
1274 void WriteTransaction::NotifyTransactionComplete( 1312 void WriteTransaction::NotifyTransactionComplete(
1275 ModelTypeBitSet models_with_changes) { 1313 ModelTypeBitSet models_with_changes) {
1276 dirkernel_->delegate->HandleTransactionCompleteChangeEvent( 1314 dirkernel_->delegate->HandleTransactionCompleteChangeEvent(
1277 models_with_changes); 1315 models_with_changes);
1278 } 1316 }
1279 1317
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after
1948 CHECK(result); 1986 CHECK(result);
1949 for (iterator i = GetParentChildIndexLowerBound(lock, parent_id), 1987 for (iterator i = GetParentChildIndexLowerBound(lock, parent_id),
1950 end = GetParentChildIndexUpperBound(lock, parent_id); 1988 end = GetParentChildIndexUpperBound(lock, parent_id);
1951 i != end; ++i) { 1989 i != end; ++i) {
1952 DCHECK_EQ(parent_id, (*i)->ref(PARENT_ID)); 1990 DCHECK_EQ(parent_id, (*i)->ref(PARENT_ID));
1953 result->push_back((*i)->ref(META_HANDLE)); 1991 result->push_back((*i)->ref(META_HANDLE));
1954 } 1992 }
1955 } 1993 }
1956 1994
1957 } // namespace syncable 1995 } // namespace syncable
OLDNEW
« no previous file with comments | « chrome/browser/sync/syncable/syncable.h ('k') | chrome/browser/sync/syncable/transaction_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698