| Index: components/sync_driver/startup_controller.cc
|
| diff --git a/components/sync_driver/startup_controller.cc b/components/sync_driver/startup_controller.cc
|
| deleted file mode 100644
|
| index 26b4ef7e55ea657a6638c07065ab8966023f510c..0000000000000000000000000000000000000000
|
| --- a/components/sync_driver/startup_controller.cc
|
| +++ /dev/null
|
| @@ -1,209 +0,0 @@
|
| -// Copyright 2014 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 "components/sync_driver/startup_controller.h"
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/location.h"
|
| -#include "base/metrics/histogram.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "components/sync_driver/sync_driver_switches.h"
|
| -#include "components/sync_driver/sync_prefs.h"
|
| -
|
| -namespace browser_sync {
|
| -
|
| -namespace {
|
| -
|
| -// The amount of time we'll wait to initialize sync if no data type triggers
|
| -// initialization via a StartSyncFlare.
|
| -const int kDeferredInitFallbackSeconds = 10;
|
| -
|
| -// Enum (for UMA, primarily) defining different events that cause us to
|
| -// exit the "deferred" state of initialization and invoke start_backend.
|
| -enum DeferredInitTrigger {
|
| - // We have received a signal from a SyncableService requesting that sync
|
| - // starts as soon as possible.
|
| - TRIGGER_DATA_TYPE_REQUEST,
|
| - // No data type requested sync to start and our fallback timer expired.
|
| - TRIGGER_FALLBACK_TIMER,
|
| - MAX_TRIGGER_VALUE
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -StartupController::StartupController(const sync_driver::SyncPrefs* sync_prefs,
|
| - base::Callback<bool()> can_start,
|
| - base::Closure start_backend)
|
| - : bypass_setup_complete_(false),
|
| - received_start_request_(false),
|
| - setup_in_progress_(false),
|
| - sync_prefs_(sync_prefs),
|
| - can_start_(can_start),
|
| - start_backend_(start_backend),
|
| - fallback_timeout_(
|
| - base::TimeDelta::FromSeconds(kDeferredInitFallbackSeconds)),
|
| - weak_factory_(this) {
|
| - if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kSyncDeferredStartupTimeoutSeconds)) {
|
| - int timeout = kDeferredInitFallbackSeconds;
|
| - if (base::StringToInt(
|
| - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
|
| - switches::kSyncDeferredStartupTimeoutSeconds),
|
| - &timeout)) {
|
| - DCHECK_GE(timeout, 0);
|
| - DVLOG(2) << "Sync StartupController overriding startup timeout to "
|
| - << timeout << " seconds.";
|
| - fallback_timeout_ = base::TimeDelta::FromSeconds(timeout);
|
| - }
|
| - }
|
| -}
|
| -
|
| -StartupController::~StartupController() {}
|
| -
|
| -void StartupController::Reset(const syncer::ModelTypeSet registered_types) {
|
| - received_start_request_ = false;
|
| - bypass_setup_complete_ = false;
|
| - start_up_time_ = base::Time();
|
| - start_backend_time_ = base::Time();
|
| - // Don't let previous timers affect us post-reset.
|
| - weak_factory_.InvalidateWeakPtrs();
|
| - registered_types_ = registered_types;
|
| -}
|
| -
|
| -void StartupController::SetSetupInProgress(bool setup_in_progress) {
|
| - setup_in_progress_ = setup_in_progress;
|
| - if (setup_in_progress_) {
|
| - TryStart();
|
| - }
|
| -}
|
| -
|
| -bool StartupController::StartUp(StartUpDeferredOption deferred_option) {
|
| - const bool first_start = start_up_time_.is_null();
|
| - if (first_start)
|
| - start_up_time_ = base::Time::Now();
|
| -
|
| - if (deferred_option == STARTUP_BACKEND_DEFERRED &&
|
| - !base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kSyncDisableDeferredStartup) &&
|
| - sync_prefs_->GetPreferredDataTypes(registered_types_)
|
| - .Has(syncer::SESSIONS)) {
|
| - if (first_start) {
|
| - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
| - FROM_HERE,
|
| - base::Bind(&StartupController::OnFallbackStartupTimerExpired,
|
| - weak_factory_.GetWeakPtr()),
|
| - fallback_timeout_);
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - if (start_backend_time_.is_null()) {
|
| - start_backend_time_ = base::Time::Now();
|
| - start_backend_.Run();
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void StartupController::OverrideFallbackTimeoutForTest(
|
| - const base::TimeDelta& timeout) {
|
| - fallback_timeout_ = timeout;
|
| -}
|
| -
|
| -bool StartupController::TryStart() {
|
| - if (!can_start_.Run())
|
| - return false;
|
| -
|
| - // For performance reasons, defer the heavy lifting for sync init unless:
|
| - //
|
| - // - a datatype has requested an immediate start of sync, or
|
| - // - sync needs to start up the backend immediately to provide control state
|
| - // and encryption information to the UI.
|
| - // Do not start up the sync backend if setup has not completed and isn't
|
| - // in progress, unless told to otherwise.
|
| - if (setup_in_progress_) {
|
| - return StartUp(STARTUP_IMMEDIATE);
|
| - } else if (sync_prefs_->IsFirstSetupComplete() || bypass_setup_complete_) {
|
| - return StartUp(received_start_request_ ? STARTUP_IMMEDIATE
|
| - : STARTUP_BACKEND_DEFERRED);
|
| - } else {
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -bool StartupController::TryStartImmediately() {
|
| - received_start_request_ = true;
|
| - bypass_setup_complete_ = true;
|
| - return TryStart();
|
| -}
|
| -
|
| -void StartupController::RecordTimeDeferred() {
|
| - DCHECK(!start_up_time_.is_null());
|
| - base::TimeDelta time_deferred = base::Time::Now() - start_up_time_;
|
| - UMA_HISTOGRAM_CUSTOM_TIMES("Sync.Startup.TimeDeferred2",
|
| - time_deferred,
|
| - base::TimeDelta::FromSeconds(0),
|
| - base::TimeDelta::FromMinutes(2),
|
| - 60);
|
| -}
|
| -
|
| -void StartupController::OnFallbackStartupTimerExpired() {
|
| - DCHECK(!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kSyncDisableDeferredStartup));
|
| -
|
| - if (!start_backend_time_.is_null())
|
| - return;
|
| -
|
| - DVLOG(2) << "Sync deferred init fallback timer expired, starting backend.";
|
| - RecordTimeDeferred();
|
| - UMA_HISTOGRAM_ENUMERATION("Sync.Startup.DeferredInitTrigger",
|
| - TRIGGER_FALLBACK_TIMER,
|
| - MAX_TRIGGER_VALUE);
|
| - received_start_request_ = true;
|
| - TryStart();
|
| -}
|
| -
|
| -std::string StartupController::GetBackendInitializationStateString() const {
|
| - if (!start_backend_time_.is_null())
|
| - return "Started";
|
| - else if (!start_up_time_.is_null())
|
| - return "Deferred";
|
| - else
|
| - return "Not started";
|
| -}
|
| -
|
| -void StartupController::OnDataTypeRequestsSyncStartup(syncer::ModelType type) {
|
| - if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kSyncDisableDeferredStartup)) {
|
| - DVLOG(2) << "Ignoring data type request for sync startup: "
|
| - << syncer::ModelTypeToString(type);
|
| - return;
|
| - }
|
| -
|
| - if (!start_backend_time_.is_null())
|
| - return;
|
| -
|
| - DVLOG(2) << "Data type requesting sync startup: "
|
| - << syncer::ModelTypeToString(type);
|
| - // Measure the time spent waiting for init and the type that triggered it.
|
| - // We could measure the time spent deferred on a per-datatype basis, but
|
| - // for now this is probably sufficient.
|
| - if (!start_up_time_.is_null()) {
|
| - RecordTimeDeferred();
|
| - UMA_HISTOGRAM_ENUMERATION("Sync.Startup.TypeTriggeringInit",
|
| - ModelTypeToHistogramInt(type),
|
| - syncer::MODEL_TYPE_COUNT);
|
| - UMA_HISTOGRAM_ENUMERATION("Sync.Startup.DeferredInitTrigger",
|
| - TRIGGER_DATA_TYPE_REQUEST,
|
| - MAX_TRIGGER_VALUE);
|
| - }
|
| - received_start_request_ = true;
|
| - TryStart();
|
| -}
|
| -
|
| -} // namespace browser_sync
|
|
|