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

Unified Diff: sync/syncable/syncable_write_transaction.cc

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 5 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
« no previous file with comments | « sync/syncable/syncable_write_transaction.h ('k') | sync/syncable/transaction_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/syncable/syncable_write_transaction.cc
diff --git a/sync/syncable/syncable_write_transaction.cc b/sync/syncable/syncable_write_transaction.cc
deleted file mode 100644
index 08b6aaae966ca3a87706913aa0b7e4bca8005302..0000000000000000000000000000000000000000
--- a/sync/syncable/syncable_write_transaction.cc
+++ /dev/null
@@ -1,192 +0,0 @@
-// Copyright 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "sync/syncable/syncable_write_transaction.h"
-
-#include <stdint.h>
-
-#include <string>
-
-#include "sync/syncable/directory.h"
-#include "sync/syncable/directory_change_delegate.h"
-#include "sync/syncable/mutable_entry.h"
-#include "sync/syncable/transaction_observer.h"
-#include "sync/syncable/write_transaction_info.h"
-
-namespace syncer {
-namespace syncable {
-
-const int64_t kInvalidTransactionVersion = -1;
-
-WriteTransaction::WriteTransaction(const tracked_objects::Location& location,
- WriterTag writer, Directory* directory)
- : BaseWriteTransaction(location, "WriteTransaction", writer, directory),
- transaction_version_(NULL) {
- Lock();
-}
-
-WriteTransaction::WriteTransaction(const tracked_objects::Location& location,
- Directory* directory,
- int64_t* transaction_version)
- : BaseWriteTransaction(location, "WriteTransaction", SYNCAPI, directory),
- transaction_version_(transaction_version) {
- Lock();
- if (transaction_version_)
- *transaction_version_ = kInvalidTransactionVersion;
-}
-
-void WriteTransaction::TrackChangesTo(const EntryKernel* entry) {
- if (!entry) {
- return;
- }
- // Insert only if it's not already there.
- const int64_t handle = entry->ref(META_HANDLE);
- EntryKernelMutationMap::iterator it = mutations_.lower_bound(handle);
- if (it == mutations_.end() || it->first != handle) {
- mutations_[handle].original = *entry;
- }
-}
-
-ImmutableEntryKernelMutationMap WriteTransaction::RecordMutations() {
- directory_->kernel()->transaction_mutex.AssertAcquired();
- for (syncable::EntryKernelMutationMap::iterator it = mutations_.begin();
- it != mutations_.end();) {
- EntryKernel* kernel = directory()->GetEntryByHandle(it->first);
- if (!kernel) {
- NOTREACHED();
- continue;
- }
- if (kernel->is_dirty()) {
- it->second.mutated = *kernel;
- ++it;
- } else {
- DCHECK(!it->second.original.is_dirty());
- // Not actually mutated, so erase from |mutations_|.
- mutations_.erase(it++);
- }
- }
- return ImmutableEntryKernelMutationMap(&mutations_);
-}
-
-void WriteTransaction::UnlockAndNotify(
- const ImmutableEntryKernelMutationMap& mutations) {
- // Work while transaction mutex is held.
- ModelTypeSet models_with_changes;
- bool has_mutations = !mutations.Get().empty();
- if (has_mutations) {
- models_with_changes = NotifyTransactionChangingAndEnding(mutations);
- }
- Unlock();
-
- // Work after mutex is relased.
- if (has_mutations) {
- NotifyTransactionComplete(models_with_changes);
- }
-}
-
-ModelTypeSet WriteTransaction::NotifyTransactionChangingAndEnding(
- const ImmutableEntryKernelMutationMap& mutations) {
- directory_->kernel()->transaction_mutex.AssertAcquired();
- DCHECK(!mutations.Get().empty());
-
- WriteTransactionInfo write_transaction_info(
- directory_->kernel()->next_write_transaction_id,
- from_here_, writer_, mutations);
- ++directory_->kernel()->next_write_transaction_id;
-
- ImmutableWriteTransactionInfo immutable_write_transaction_info(
- &write_transaction_info);
- DirectoryChangeDelegate* const delegate = directory_->kernel()->delegate;
- std::vector<int64_t> entry_changed;
- if (writer_ == syncable::SYNCAPI) {
- delegate->HandleCalculateChangesChangeEventFromSyncApi(
- immutable_write_transaction_info, this, &entry_changed);
- } else {
- delegate->HandleCalculateChangesChangeEventFromSyncer(
- immutable_write_transaction_info, this, &entry_changed);
- }
- UpdateTransactionVersion(entry_changed);
-
- ModelTypeSet models_with_changes =
- delegate->HandleTransactionEndingChangeEvent(
- immutable_write_transaction_info, this);
-
- directory_->kernel()->transaction_observer.Call(FROM_HERE,
- &TransactionObserver::OnTransactionWrite,
- immutable_write_transaction_info, models_with_changes);
-
- return models_with_changes;
-}
-
-void WriteTransaction::NotifyTransactionComplete(
- ModelTypeSet models_with_changes) {
- directory_->kernel()->delegate->HandleTransactionCompleteChangeEvent(
- models_with_changes);
-}
-
-void WriteTransaction::UpdateTransactionVersion(
- const std::vector<int64_t>& entry_changed) {
- syncer::ModelTypeSet type_seen;
- for (uint32_t i = 0; i < entry_changed.size(); ++i) {
- MutableEntry entry(this, GET_BY_HANDLE, entry_changed[i]);
- if (entry.good()) {
- ModelType type = GetModelTypeFromSpecifics(entry.GetSpecifics());
- if (type < FIRST_REAL_MODEL_TYPE)
- continue;
- if (!type_seen.Has(type)) {
- directory_->IncrementTransactionVersion(type);
- type_seen.Put(type);
- }
- entry.UpdateTransactionVersion(directory_->GetTransactionVersion(type));
- }
- }
-
- if (!type_seen.Empty() && transaction_version_) {
- DCHECK_EQ(1u, type_seen.Size());
- *transaction_version_ = directory_->GetTransactionVersion(
- type_seen.First().Get());
- }
-}
-
-WriteTransaction::~WriteTransaction() {
- const ImmutableEntryKernelMutationMap& mutations = RecordMutations();
-
- MetahandleSet modified_handles;
- for (EntryKernelMutationMap::const_iterator i = mutations.Get().begin();
- i != mutations.Get().end(); ++i) {
- modified_handles.insert(i->first);
- }
- directory()->CheckInvariantsOnTransactionClose(this, modified_handles);
-
- // |CheckTreeInvariants| could have thrown an unrecoverable error.
- if (unrecoverable_error_set_) {
- HandleUnrecoverableErrorIfSet();
- Unlock();
- return;
- }
-
- UnlockAndNotify(mutations);
-}
-
-#define ENUM_CASE(x) case x: return #x; break
-
-std::string WriterTagToString(WriterTag writer_tag) {
- switch (writer_tag) {
- ENUM_CASE(INVALID);
- ENUM_CASE(SYNCER);
- ENUM_CASE(AUTHWATCHER);
- ENUM_CASE(UNITTEST);
- ENUM_CASE(VACUUM_AFTER_SAVE);
- ENUM_CASE(HANDLE_SAVE_FAILURE);
- ENUM_CASE(PURGE_ENTRIES);
- ENUM_CASE(SYNCAPI);
- }
- NOTREACHED();
- return std::string();
-}
-
-#undef ENUM_CASE
-
-} // namespace syncable
-} // namespace syncer
« no previous file with comments | « sync/syncable/syncable_write_transaction.h ('k') | sync/syncable/transaction_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698