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

Unified Diff: sync/sessions/data_type_tracker.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/sessions/data_type_tracker.h ('k') | sync/sessions/debug_info_getter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/sessions/data_type_tracker.cc
diff --git a/sync/sessions/data_type_tracker.cc b/sync/sessions/data_type_tracker.cc
deleted file mode 100644
index fa7a507334502ee39df21b2c84d6a10ae3357d3b..0000000000000000000000000000000000000000
--- a/sync/sessions/data_type_tracker.cc
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2013 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/sessions/data_type_tracker.h"
-
-#include <stddef.h>
-
-#include <algorithm>
-
-#include "base/logging.h"
-#include "sync/internal_api/public/base/invalidation_interface.h"
-#include "sync/sessions/nudge_tracker.h"
-
-namespace syncer {
-namespace sessions {
-
-DataTypeTracker::DataTypeTracker()
- : local_nudge_count_(0),
- local_refresh_request_count_(0),
- payload_buffer_size_(NudgeTracker::kDefaultMaxPayloadsPerType),
- initial_sync_required_(false),
- sync_required_to_resolve_conflict_(false) {
-}
-
-DataTypeTracker::~DataTypeTracker() { }
-
-base::TimeDelta DataTypeTracker::RecordLocalChange() {
- local_nudge_count_++;
- return nudge_delay_;
-}
-
-void DataTypeTracker::RecordLocalRefreshRequest() {
- local_refresh_request_count_++;
-}
-
-void DataTypeTracker::RecordRemoteInvalidation(
- std::unique_ptr<InvalidationInterface> incoming) {
- DCHECK(incoming);
-
- // Merge the incoming invalidation into our list of pending invalidations.
- //
- // We won't use STL algorithms here because our concept of equality doesn't
- // quite fit the expectations of set_intersection. In particular, two
- // invalidations can be equal according to the SingleObjectInvalidationSet's
- // rules (ie. have equal versions), but still have different AckHandle values
- // and need to be acknowledged separately.
- //
- // The invalidations service can only track one outsanding invalidation per
- // type and version, so the acknowledgement here should be redundant. We'll
- // acknowledge them anyway since it should do no harm, and makes this code a
- // bit easier to test.
- //
- // Overlaps should be extremely rare for most invalidations. They can happen
- // for unknown version invalidations, though.
-
- ScopedVector<InvalidationInterface>::iterator it =
- pending_invalidations_.begin();
-
- // Find the lower bound.
- while (it != pending_invalidations_.end() &&
- InvalidationInterface::LessThanByVersion(**it, *incoming)) {
- it++;
- }
-
- if (it != pending_invalidations_.end() &&
- !InvalidationInterface::LessThanByVersion(*incoming, **it) &&
- !InvalidationInterface::LessThanByVersion(**it, *incoming)) {
- // Incoming overlaps with existing. Either both are unknown versions
- // (likely) or these two have the same version number (very unlikely).
- // Acknowledge and overwrite existing.
-
- // Insert before the existing and get iterator to inserted.
- ScopedVector<InvalidationInterface>::iterator it2 =
- pending_invalidations_.insert(it, incoming.release());
-
- // Increment that iterator to the old one, then acknowledge and remove it.
- ++it2;
- (*it2)->Acknowledge();
- pending_invalidations_.erase(it2);
- } else {
- // The incoming has a version not in the pending_invalidations_ list.
- // Add it to the list at the proper position.
- pending_invalidations_.insert(it, incoming.release());
- }
-
- // The incoming invalidation may have caused us to exceed our buffer size.
- // Trim some items from our list, if necessary.
- while (pending_invalidations_.size() > payload_buffer_size_) {
- last_dropped_invalidation_.reset(pending_invalidations_.front());
- last_dropped_invalidation_->Drop();
- pending_invalidations_.weak_erase(pending_invalidations_.begin());
- }
-}
-
-void DataTypeTracker::RecordInitialSyncRequired() {
- initial_sync_required_ = true;
-}
-
-void DataTypeTracker::RecordCommitConflict() {
- sync_required_to_resolve_conflict_ = true;
-}
-
-void DataTypeTracker::RecordSuccessfulSyncCycle() {
- // If we were throttled, then we would have been excluded from this cycle's
- // GetUpdates and Commit actions. Our state remains unchanged.
- if (IsThrottled())
- return;
-
- local_nudge_count_ = 0;
- local_refresh_request_count_ = 0;
-
- // TODO(rlarocque): If we want this to be correct even if we should happen to
- // crash before writing all our state, we should wait until the results of
- // this sync cycle have been written to disk before updating the invalidations
- // state. See crbug.com/324996.
- for (ScopedVector<InvalidationInterface>::const_iterator it =
- pending_invalidations_.begin();
- it != pending_invalidations_.end();
- ++it) {
- (*it)->Acknowledge();
- }
- pending_invalidations_.clear();
-
- if (last_dropped_invalidation_) {
- last_dropped_invalidation_->Acknowledge();
- last_dropped_invalidation_.reset();
- }
-
- initial_sync_required_ = false;
- sync_required_to_resolve_conflict_ = false;
-}
-
-// This limit will take effect on all future invalidations received.
-void DataTypeTracker::UpdatePayloadBufferSize(size_t new_size) {
- payload_buffer_size_ = new_size;
-}
-
-bool DataTypeTracker::IsSyncRequired() const {
- return !IsThrottled() && (HasLocalChangePending() || IsGetUpdatesRequired());
-}
-
-bool DataTypeTracker::IsGetUpdatesRequired() const {
- return !IsThrottled() &&
- (HasRefreshRequestPending() || HasPendingInvalidation() ||
- IsInitialSyncRequired() || IsSyncRequiredToResolveConflict());
-}
-
-bool DataTypeTracker::HasLocalChangePending() const {
- return local_nudge_count_ > 0;
-}
-
-bool DataTypeTracker::HasRefreshRequestPending() const {
- return local_refresh_request_count_ > 0;
-}
-
-bool DataTypeTracker::HasPendingInvalidation() const {
- return !pending_invalidations_.empty() || last_dropped_invalidation_;
-}
-
-bool DataTypeTracker::IsInitialSyncRequired() const {
- return initial_sync_required_;
-}
-
-bool DataTypeTracker::IsSyncRequiredToResolveConflict() const {
- return sync_required_to_resolve_conflict_;
-}
-
-void DataTypeTracker::SetLegacyNotificationHint(
- sync_pb::DataTypeProgressMarker* progress) const {
- DCHECK(!IsThrottled())
- << "We should not make requests if the type is throttled.";
-
- if (!pending_invalidations_.empty() &&
- !pending_invalidations_.back()->IsUnknownVersion()) {
- // The old-style source info can contain only one hint per type. We grab
- // the most recent, to mimic the old coalescing behaviour.
- progress->set_notification_hint(
- pending_invalidations_.back()->GetPayload());
- } else if (HasLocalChangePending()) {
- // The old-style source info sent up an empty string (as opposed to
- // nothing at all) when the type was locally nudged, but had not received
- // any invalidations.
- progress->set_notification_hint(std::string());
- }
-}
-
-void DataTypeTracker::FillGetUpdatesTriggersMessage(
- sync_pb::GetUpdateTriggers* msg) const {
- // Fill the list of payloads, if applicable. The payloads must be ordered
- // oldest to newest, so we insert them in the same order as we've been storing
- // them internally.
- for (ScopedVector<InvalidationInterface>::const_iterator it =
- pending_invalidations_.begin();
- it != pending_invalidations_.end();
- ++it) {
- if (!(*it)->IsUnknownVersion()) {
- msg->add_notification_hint((*it)->GetPayload());
- }
- }
-
- msg->set_server_dropped_hints(
- !pending_invalidations_.empty() &&
- (*pending_invalidations_.begin())->IsUnknownVersion());
- msg->set_client_dropped_hints(!!last_dropped_invalidation_);
- msg->set_local_modification_nudges(local_nudge_count_);
- msg->set_datatype_refresh_nudges(local_refresh_request_count_);
- msg->set_initial_sync_in_progress(initial_sync_required_);
- msg->set_sync_for_resolve_conflict_in_progress(
- sync_required_to_resolve_conflict_);
-}
-
-bool DataTypeTracker::IsThrottled() const {
- return !unthrottle_time_.is_null();
-}
-
-base::TimeDelta DataTypeTracker::GetTimeUntilUnthrottle(
- base::TimeTicks now) const {
- if (!IsThrottled()) {
- NOTREACHED();
- return base::TimeDelta::FromSeconds(0);
- }
- return std::max(base::TimeDelta::FromSeconds(0),
- unthrottle_time_ - now);
-}
-
-void DataTypeTracker::ThrottleType(base::TimeDelta duration,
- base::TimeTicks now) {
- unthrottle_time_ = std::max(unthrottle_time_, now + duration);
-}
-
-void DataTypeTracker::UpdateThrottleState(base::TimeTicks now) {
- if (now >= unthrottle_time_) {
- unthrottle_time_ = base::TimeTicks();
- }
-}
-
-void DataTypeTracker::UpdateLocalNudgeDelay(base::TimeDelta delay) {
- nudge_delay_ = delay;
-}
-
-} // namespace sessions
-} // namespace syncer
« no previous file with comments | « sync/sessions/data_type_tracker.h ('k') | sync/sessions/debug_info_getter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698