| Index: sync/sessions/model_type_registry.cc
|
| diff --git a/sync/sessions/model_type_registry.cc b/sync/sessions/model_type_registry.cc
|
| index a41a7f30c3fff43ae50d79aab4f50af7054a9a78..2b9e7cb2c90871a9540b57a631b9a8f0992e7cb2 100644
|
| --- a/sync/sessions/model_type_registry.cc
|
| +++ b/sync/sessions/model_type_registry.cc
|
| @@ -30,22 +30,21 @@ ModelTypeRegistry::~ModelTypeRegistry() {}
|
|
|
| void ModelTypeRegistry::SetEnabledDirectoryTypes(
|
| const ModelSafeRoutingInfo& routing_info) {
|
| - // Remove all existing directory processors and delete them.
|
| + // Remove all existing directory processors and delete them. The
|
| + // DebugInfoEmitters are not deleted here, since we want to preserve their
|
| + // counters.
|
| for (ModelTypeSet::Iterator it = enabled_directory_types_.First();
|
| it.Good(); it.Inc()) {
|
| size_t result1 = update_handler_map_.erase(it.Get());
|
| size_t result2 = commit_contributor_map_.erase(it.Get());
|
| - size_t result3 = directory_type_debug_info_emitter_map_.erase(it.Get());
|
| DCHECK_EQ(1U, result1);
|
| DCHECK_EQ(1U, result2);
|
| - DCHECK_EQ(1U, result3);
|
| }
|
|
|
| // Clear the old instances of directory update handlers and commit
|
| // contributors, deleting their contents in the processs.
|
| directory_update_handlers_.clear();
|
| directory_commit_contributors_.clear();
|
| - directory_type_debug_info_emitters_.clear();
|
|
|
| // Create new ones and add them to the appropriate containers.
|
| for (ModelSafeRoutingInfo::const_iterator routing_iter = routing_info.begin();
|
| @@ -57,18 +56,28 @@ void ModelTypeRegistry::SetEnabledDirectoryTypes(
|
| DCHECK(worker_it != workers_map_.end());
|
| scoped_refptr<ModelSafeWorker> worker = worker_it->second;
|
|
|
| - DirectoryTypeDebugInfoEmitter* emitter =
|
| - new DirectoryTypeDebugInfoEmitter(directory_, type,
|
| - &type_debug_info_observers_);
|
| + // DebugInfoEmitters are never deleted. Use existing one if we have it.
|
| + DirectoryTypeDebugInfoEmitter* emitter = NULL;
|
| + DirectoryTypeDebugInfoEmitterMap::iterator it =
|
| + directory_type_debug_info_emitter_map_.find(type);
|
| + if (it != directory_type_debug_info_emitter_map_.end()) {
|
| + emitter = it->second;
|
| + } else {
|
| + emitter = new DirectoryTypeDebugInfoEmitter(directory_, type,
|
| + &type_debug_info_observers_);
|
| + directory_type_debug_info_emitter_map_.insert(
|
| + std::make_pair(type, emitter));
|
| + directory_type_debug_info_emitters_.push_back(emitter);
|
| + }
|
| +
|
| DirectoryCommitContributor* committer =
|
| - new DirectoryCommitContributor(directory_, type);
|
| + new DirectoryCommitContributor(directory_, type, emitter);
|
| DirectoryUpdateHandler* updater =
|
| - new DirectoryUpdateHandler(directory_, type, worker);
|
| + new DirectoryUpdateHandler(directory_, type, worker, emitter);
|
|
|
| // These containers take ownership of their contents.
|
| directory_commit_contributors_.push_back(committer);
|
| directory_update_handlers_.push_back(updater);
|
| - directory_type_debug_info_emitters_.push_back(emitter);
|
|
|
| bool inserted1 =
|
| update_handler_map_.insert(std::make_pair(type, updater)).second;
|
| @@ -77,11 +86,6 @@ void ModelTypeRegistry::SetEnabledDirectoryTypes(
|
| bool inserted2 =
|
| commit_contributor_map_.insert(std::make_pair(type, committer)).second;
|
| DCHECK(inserted2) << "Attempt to override existing type handler in map";
|
| -
|
| - bool inserted3 =
|
| - directory_type_debug_info_emitter_map_.insert(
|
| - std::make_pair(type, emitter)).second;
|
| - DCHECK(inserted3) << "Attempt to override existing type handler in map";
|
| }
|
|
|
| enabled_directory_types_ = GetRoutingInfoTypes(routing_info);
|
|
|