blob: fab6c650f57264a14a67ed58f803b5fb994188f6 [file] [log] [blame]
// Copyright (c) 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 "components/sync/engine/cycle/sync_cycle_snapshot.h"
#include <utility>
#include "base/json/json_writer.h"
#include "base/values.h"
#include "components/sync/protocol/proto_enum_conversions.h"
namespace syncer {
SyncCycleSnapshot::SyncCycleSnapshot()
: is_silenced_(false),
num_encryption_conflicts_(0),
num_hierarchy_conflicts_(0),
num_server_conflicts_(0),
notifications_enabled_(false),
num_entries_(0),
num_entries_by_type_(MODEL_TYPE_COUNT, 0),
num_to_delete_entries_by_type_(MODEL_TYPE_COUNT, 0),
is_initialized_(false) {}
SyncCycleSnapshot::SyncCycleSnapshot(
const ModelNeutralState& model_neutral_state,
const ProgressMarkerMap& download_progress_markers,
bool is_silenced,
int num_encryption_conflicts,
int num_hierarchy_conflicts,
int num_server_conflicts,
bool notifications_enabled,
size_t num_entries,
base::Time sync_start_time,
base::Time poll_finish_time,
const std::vector<int>& num_entries_by_type,
const std::vector<int>& num_to_delete_entries_by_type,
sync_pb::GetUpdatesCallerInfo::GetUpdatesSource legacy_updates_source)
: model_neutral_state_(model_neutral_state),
download_progress_markers_(download_progress_markers),
is_silenced_(is_silenced),
num_encryption_conflicts_(num_encryption_conflicts),
num_hierarchy_conflicts_(num_hierarchy_conflicts),
num_server_conflicts_(num_server_conflicts),
notifications_enabled_(notifications_enabled),
num_entries_(num_entries),
sync_start_time_(sync_start_time),
poll_finish_time_(poll_finish_time),
num_entries_by_type_(num_entries_by_type),
num_to_delete_entries_by_type_(num_to_delete_entries_by_type),
legacy_updates_source_(legacy_updates_source),
is_initialized_(true) {}
SyncCycleSnapshot::SyncCycleSnapshot(const SyncCycleSnapshot& other) = default;
SyncCycleSnapshot::~SyncCycleSnapshot() {}
std::unique_ptr<base::DictionaryValue> SyncCycleSnapshot::ToValue() const {
std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
value->SetInteger("numSuccessfulCommits",
model_neutral_state_.num_successful_commits);
value->SetInteger("numSuccessfulBookmarkCommits",
model_neutral_state_.num_successful_bookmark_commits);
value->SetInteger("numUpdatesDownloadedTotal",
model_neutral_state_.num_updates_downloaded_total);
value->SetInteger(
"numTombstoneUpdatesDownloadedTotal",
model_neutral_state_.num_tombstone_updates_downloaded_total);
value->SetInteger(
"numReflectedUpdatesDownloadedTotal",
model_neutral_state_.num_reflected_updates_downloaded_total);
value->SetInteger("numLocalOverwrites",
model_neutral_state_.num_local_overwrites);
value->SetInteger("numServerOverwrites",
model_neutral_state_.num_server_overwrites);
value->Set("downloadProgressMarkers",
ProgressMarkerMapToValue(download_progress_markers_));
value->SetBoolean("isSilenced", is_silenced_);
// We don't care too much if we lose precision here, also.
value->SetInteger("numEncryptionConflicts", num_encryption_conflicts_);
value->SetInteger("numHierarchyConflicts", num_hierarchy_conflicts_);
value->SetInteger("numServerConflicts", num_server_conflicts_);
value->SetInteger("numEntries", num_entries_);
value->SetString("legacySource", ProtoEnumToString(legacy_updates_source_));
value->SetBoolean("notificationsEnabled", notifications_enabled_);
std::unique_ptr<base::DictionaryValue> counter_entries(
new base::DictionaryValue());
for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; i++) {
std::unique_ptr<base::DictionaryValue> type_entries(
new base::DictionaryValue());
type_entries->SetInteger("numEntries", num_entries_by_type_[i]);
type_entries->SetInteger("numToDeleteEntries",
num_to_delete_entries_by_type_[i]);
const std::string model_type = ModelTypeToString(static_cast<ModelType>(i));
counter_entries->Set(model_type, std::move(type_entries));
}
value->Set("counter_entries", std::move(counter_entries));
return value;
}
std::string SyncCycleSnapshot::ToString() const {
std::string json;
base::JSONWriter::WriteWithOptions(
*ToValue(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
return json;
}
const ProgressMarkerMap& SyncCycleSnapshot::download_progress_markers() const {
return download_progress_markers_;
}
bool SyncCycleSnapshot::is_silenced() const {
return is_silenced_;
}
int SyncCycleSnapshot::num_encryption_conflicts() const {
return num_encryption_conflicts_;
}
int SyncCycleSnapshot::num_hierarchy_conflicts() const {
return num_hierarchy_conflicts_;
}
int SyncCycleSnapshot::num_server_conflicts() const {
return num_server_conflicts_;
}
bool SyncCycleSnapshot::notifications_enabled() const {
return notifications_enabled_;
}
size_t SyncCycleSnapshot::num_entries() const {
return num_entries_;
}
base::Time SyncCycleSnapshot::sync_start_time() const {
return sync_start_time_;
}
base::Time SyncCycleSnapshot::poll_finish_time() const {
return poll_finish_time_;
}
bool SyncCycleSnapshot::is_initialized() const {
return is_initialized_;
}
const std::vector<int>& SyncCycleSnapshot::num_entries_by_type() const {
return num_entries_by_type_;
}
const std::vector<int>& SyncCycleSnapshot::num_to_delete_entries_by_type()
const {
return num_to_delete_entries_by_type_;
}
sync_pb::GetUpdatesCallerInfo::GetUpdatesSource
SyncCycleSnapshot::legacy_updates_source() const {
return legacy_updates_source_;
}
} // namespace syncer