| Index: chrome/common/metrics/metrics_log_manager.cc
|
| diff --git a/chrome/common/metrics/metrics_log_manager.cc b/chrome/common/metrics/metrics_log_manager.cc
|
| deleted file mode 100644
|
| index bd49de9c9b380730a648a2960104623ee2f4e8ec..0000000000000000000000000000000000000000
|
| --- a/chrome/common/metrics/metrics_log_manager.cc
|
| +++ /dev/null
|
| @@ -1,203 +0,0 @@
|
| -// 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 "chrome/common/metrics/metrics_log_manager.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/metrics/histogram.h"
|
| -#include "base/sha1.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "base/timer/elapsed_timer.h"
|
| -#include "chrome/common/metrics/metrics_log_base.h"
|
| -
|
| -MetricsLogManager::SerializedLog::SerializedLog() {}
|
| -MetricsLogManager::SerializedLog::~SerializedLog() {}
|
| -
|
| -bool MetricsLogManager::SerializedLog::IsEmpty() const {
|
| - return log_text_.empty();
|
| -}
|
| -
|
| -void MetricsLogManager::SerializedLog::SwapLogText(std::string* log_text) {
|
| - log_text_.swap(*log_text);
|
| - if (log_text_.empty())
|
| - log_hash_.clear();
|
| - else
|
| - log_hash_ = base::SHA1HashString(log_text_);
|
| -}
|
| -
|
| -void MetricsLogManager::SerializedLog::Clear() {
|
| - log_text_.clear();
|
| - log_hash_.clear();
|
| -}
|
| -
|
| -void MetricsLogManager::SerializedLog::Swap(
|
| - MetricsLogManager::SerializedLog* other) {
|
| - log_text_.swap(other->log_text_);
|
| - log_hash_.swap(other->log_hash_);
|
| -}
|
| -
|
| -MetricsLogManager::MetricsLogManager()
|
| - : unsent_logs_loaded_(false),
|
| - staged_log_type_(MetricsLogBase::NO_LOG),
|
| - max_ongoing_log_store_size_(0),
|
| - last_provisional_store_index_(-1),
|
| - last_provisional_store_type_(MetricsLogBase::INITIAL_STABILITY_LOG) {}
|
| -
|
| -MetricsLogManager::~MetricsLogManager() {}
|
| -
|
| -void MetricsLogManager::BeginLoggingWithLog(MetricsLogBase* log) {
|
| - DCHECK(!current_log_.get());
|
| - current_log_.reset(log);
|
| -}
|
| -
|
| -void MetricsLogManager::FinishCurrentLog() {
|
| - DCHECK(current_log_.get());
|
| - current_log_->CloseLog();
|
| - SerializedLog compressed_log;
|
| - CompressCurrentLog(&compressed_log);
|
| - if (!compressed_log.IsEmpty())
|
| - StoreLog(&compressed_log, current_log_->log_type(), NORMAL_STORE);
|
| - current_log_.reset();
|
| -}
|
| -
|
| -void MetricsLogManager::StageNextLogForUpload() {
|
| - // Prioritize initial logs for uploading.
|
| - std::vector<SerializedLog>* source_list =
|
| - unsent_initial_logs_.empty() ? &unsent_ongoing_logs_
|
| - : &unsent_initial_logs_;
|
| - LogType source_type = (source_list == &unsent_ongoing_logs_) ?
|
| - MetricsLogBase::ONGOING_LOG : MetricsLogBase::INITIAL_STABILITY_LOG;
|
| - // CHECK, rather than DCHECK, because swap()ing with an empty list causes
|
| - // hard-to-identify crashes much later.
|
| - CHECK(!source_list->empty());
|
| - DCHECK(staged_log_.IsEmpty());
|
| - DCHECK_EQ(MetricsLogBase::NO_LOG, staged_log_type_);
|
| - staged_log_.Swap(&source_list->back());
|
| - staged_log_type_ = source_type;
|
| - source_list->pop_back();
|
| -
|
| - // If the staged log was the last provisional store, clear that.
|
| - if (last_provisional_store_index_ != -1) {
|
| - if (source_type == last_provisional_store_type_ &&
|
| - static_cast<unsigned int>(last_provisional_store_index_) ==
|
| - source_list->size()) {
|
| - last_provisional_store_index_ = -1;
|
| - }
|
| - }
|
| -}
|
| -
|
| -bool MetricsLogManager::has_staged_log() const {
|
| - return !staged_log_.IsEmpty();
|
| -}
|
| -
|
| -void MetricsLogManager::DiscardStagedLog() {
|
| - staged_log_.Clear();
|
| - staged_log_type_ = MetricsLogBase::NO_LOG;
|
| -}
|
| -
|
| -void MetricsLogManager::DiscardCurrentLog() {
|
| - current_log_->CloseLog();
|
| - current_log_.reset();
|
| -}
|
| -
|
| -void MetricsLogManager::PauseCurrentLog() {
|
| - DCHECK(!paused_log_.get());
|
| - paused_log_.reset(current_log_.release());
|
| -}
|
| -
|
| -void MetricsLogManager::ResumePausedLog() {
|
| - DCHECK(!current_log_.get());
|
| - current_log_.reset(paused_log_.release());
|
| -}
|
| -
|
| -void MetricsLogManager::StoreStagedLogAsUnsent(StoreType store_type) {
|
| - DCHECK(has_staged_log());
|
| -
|
| - // If compressing the log failed, there's nothing to store.
|
| - if (staged_log_.IsEmpty())
|
| - return;
|
| -
|
| - StoreLog(&staged_log_, staged_log_type_, store_type);
|
| - DiscardStagedLog();
|
| -}
|
| -
|
| -void MetricsLogManager::StoreLog(SerializedLog* log,
|
| - LogType log_type,
|
| - StoreType store_type) {
|
| - DCHECK_NE(MetricsLogBase::NO_LOG, log_type);
|
| - std::vector<SerializedLog>* destination_list =
|
| - (log_type == MetricsLogBase::INITIAL_STABILITY_LOG) ?
|
| - &unsent_initial_logs_ : &unsent_ongoing_logs_;
|
| - destination_list->push_back(SerializedLog());
|
| - destination_list->back().Swap(log);
|
| -
|
| - if (store_type == PROVISIONAL_STORE) {
|
| - last_provisional_store_index_ = destination_list->size() - 1;
|
| - last_provisional_store_type_ = log_type;
|
| - }
|
| -}
|
| -
|
| -void MetricsLogManager::DiscardLastProvisionalStore() {
|
| - if (last_provisional_store_index_ == -1)
|
| - return;
|
| - std::vector<SerializedLog>* source_list =
|
| - (last_provisional_store_type_ == MetricsLogBase::ONGOING_LOG) ?
|
| - &unsent_ongoing_logs_ : &unsent_initial_logs_;
|
| - DCHECK_LT(static_cast<unsigned int>(last_provisional_store_index_),
|
| - source_list->size());
|
| - source_list->erase(source_list->begin() + last_provisional_store_index_);
|
| - last_provisional_store_index_ = -1;
|
| -}
|
| -
|
| -void MetricsLogManager::PersistUnsentLogs() {
|
| - DCHECK(log_serializer_.get());
|
| - if (!log_serializer_.get())
|
| - return;
|
| - DCHECK(unsent_logs_loaded_);
|
| - if (!unsent_logs_loaded_)
|
| - return;
|
| -
|
| - base::ElapsedTimer timer;
|
| - // Remove any ongoing logs that are over the serialization size limit.
|
| - if (max_ongoing_log_store_size_) {
|
| - for (std::vector<SerializedLog>::iterator it = unsent_ongoing_logs_.begin();
|
| - it != unsent_ongoing_logs_.end();) {
|
| - size_t log_size = it->log_text().length();
|
| - if (log_size > max_ongoing_log_store_size_) {
|
| - UMA_HISTOGRAM_COUNTS("UMA.Large Accumulated Log Not Persisted",
|
| - static_cast<int>(log_size));
|
| - it = unsent_ongoing_logs_.erase(it);
|
| - } else {
|
| - ++it;
|
| - }
|
| - }
|
| - }
|
| - log_serializer_->SerializeLogs(unsent_initial_logs_,
|
| - MetricsLogBase::INITIAL_STABILITY_LOG);
|
| - log_serializer_->SerializeLogs(unsent_ongoing_logs_,
|
| - MetricsLogBase::ONGOING_LOG);
|
| - UMA_HISTOGRAM_TIMES("UMA.StoreLogsTime", timer.Elapsed());
|
| -}
|
| -
|
| -void MetricsLogManager::LoadPersistedUnsentLogs() {
|
| - DCHECK(log_serializer_.get());
|
| - if (!log_serializer_.get())
|
| - return;
|
| -
|
| - base::ElapsedTimer timer;
|
| - log_serializer_->DeserializeLogs(MetricsLogBase::INITIAL_STABILITY_LOG,
|
| - &unsent_initial_logs_);
|
| - log_serializer_->DeserializeLogs(MetricsLogBase::ONGOING_LOG,
|
| - &unsent_ongoing_logs_);
|
| - UMA_HISTOGRAM_TIMES("UMA.LoadLogsTime", timer.Elapsed());
|
| -
|
| - unsent_logs_loaded_ = true;
|
| -}
|
| -
|
| -void MetricsLogManager::CompressCurrentLog(SerializedLog* compressed_log) {
|
| - std::string log_text;
|
| - current_log_->GetEncodedLog(&log_text);
|
| - compressed_log->SwapLogText(&log_text);
|
| -}
|
|
|