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

Unified Diff: chrome/browser/metrics/metrics_service.cc

Issue 2744003: Preparation CL for adding crash metrics UMA counters to ChromeFrame. Basicall... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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
Index: chrome/browser/metrics/metrics_service.cc
===================================================================
--- chrome/browser/metrics/metrics_service.cc (revision 49302)
+++ chrome/browser/metrics/metrics_service.cc (working copy)
@@ -408,15 +408,11 @@
user_permits_upload_(false),
server_permits_upload_(true),
state_(INITIALIZED),
- pending_log_(NULL),
- pending_log_text_(),
current_fetch_(NULL),
- current_log_(NULL),
idle_since_last_transmission_(false),
next_window_id_(0),
ALLOW_THIS_IN_INITIALIZER_LIST(log_sender_factory_(this)),
ALLOW_THIS_IN_INITIALIZER_LIST(state_saver_factory_(this)),
- logged_samples_(),
interlog_duration_(TimeDelta::FromSeconds(kInitialInterlogDuration)),
log_event_limit_(kInitialEventLimit),
timer_pending_(false) {
@@ -426,14 +422,6 @@
MetricsService::~MetricsService() {
SetRecording(false);
- if (pending_log_) {
- delete pending_log_;
- pending_log_ = NULL;
- }
- if (current_log_) {
- delete current_log_;
- current_log_ = NULL;
- }
}
void MetricsService::SetUserPermitsUpload(bool enabled) {
@@ -597,10 +585,13 @@
LogKeywords(Source<TemplateURLModel>(source).ptr());
break;
- case NotificationType::OMNIBOX_OPENED_URL:
- current_log_->RecordOmniboxOpenedURL(
+ case NotificationType::OMNIBOX_OPENED_URL: {
+ MetricsLog* current_log = current_log_->AsMetricsLog();
+ DCHECK(current_log);
+ current_log->RecordOmniboxOpenedURL(
*Details<AutocompleteLog>(details).ptr());
break;
+ }
case NotificationType::BOOKMARK_MODEL_LOADED: {
Profile* p = Source<Profile>(source).ptr();
@@ -848,11 +839,13 @@
}
}
-void MetricsService::StopRecording(MetricsLog** log) {
+void MetricsService::StopRecording(MetricsLogBase** log) {
if (!current_log_)
return;
- current_log_->set_hardware_class(hardware_class_); // Adds to ongoing logs.
+ MetricsLog* current_log = current_log_->AsMetricsLog();
+ DCHECK(current_log);
+ current_log->set_hardware_class(hardware_class_); // Adds to ongoing logs.
// TODO(jar): Integrate bounds on log recording more consistently, so that we
// can stop recording logs that are too big much sooner.
@@ -869,13 +862,13 @@
// end of all log transmissions (initial log handles this separately).
// Don't bother if we're going to discard current_log_.
if (log) {
- current_log_->RecordIncrementalStabilityElements();
+ current_log->RecordIncrementalStabilityElements();
RecordCurrentHistograms();
}
current_log_->CloseLog();
if (log)
- *log = current_log_;
+ *log = current_log;
else
delete current_log_;
current_log_ = NULL;
@@ -1141,7 +1134,7 @@
log->RecordEnvironment(plugins_, profile_dictionary_.get());
// Histograms only get written to current_log_, so setup for the write.
- MetricsLog* save_log = current_log_;
+ MetricsLogBase* save_log = current_log_;
current_log_ = log;
RecordCurrentHistograms(); // Into current_log_... which is really log.
current_log_ = save_log;
@@ -1240,53 +1233,6 @@
current_fetch_->set_upload_data(kMetricsType, compressed_log);
}
-void MetricsService::DiscardPendingLog() {
- if (pending_log_) { // Shutdown might have deleted it!
- delete pending_log_;
- pending_log_ = NULL;
- }
- pending_log_text_.clear();
-}
-
-// This implementation is based on the Firefox MetricsService implementation.
-bool MetricsService::Bzip2Compress(const std::string& input,
- std::string* output) {
- bz_stream stream = {0};
- // As long as our input is smaller than the bzip2 block size, we should get
- // the best compression. For example, if your input was 250k, using a block
- // size of 300k or 500k should result in the same compression ratio. Since
- // our data should be under 100k, using the minimum block size of 100k should
- // allocate less temporary memory, but result in the same compression ratio.
- int result = BZ2_bzCompressInit(&stream,
- 1, // 100k (min) block size
- 0, // quiet
- 0); // default "work factor"
- if (result != BZ_OK) { // out of memory?
- return false;
- }
-
- output->clear();
-
- stream.next_in = const_cast<char*>(input.data());
- stream.avail_in = static_cast<int>(input.size());
- // NOTE: we don't need a BZ_RUN phase since our input buffer contains
- // the entire input
- do {
- output->resize(output->size() + 1024);
- stream.next_out = &((*output)[stream.total_out_lo32]);
- stream.avail_out = static_cast<int>(output->size()) - stream.total_out_lo32;
- result = BZ2_bzCompress(&stream, BZ_FINISH);
- } while (result == BZ_FINISH_OK);
- if (result != BZ_STREAM_END) // unknown failure?
- return false;
- result = BZ2_bzCompressEnd(&stream);
- DCHECK(result == BZ_OK);
-
- output->resize(stream.total_out_lo32);
-
- return true;
-}
-
static const char* StatusToString(const URLRequestStatus& status) {
switch (status.status()) {
case URLRequestStatus::SUCCESS:
@@ -1876,51 +1822,6 @@
RecordPluginChanges(pref);
}
-void MetricsService::RecordCurrentHistograms() {
- DCHECK(current_log_);
-
- StatisticsRecorder::Histograms histograms;
- StatisticsRecorder::GetHistograms(&histograms);
- for (StatisticsRecorder::Histograms::iterator it = histograms.begin();
- histograms.end() != it;
- ++it) {
- if ((*it)->flags() & Histogram::kUmaTargetedHistogramFlag)
- // TODO(petersont): Only record historgrams if they are not precluded by
- // the UMA response data.
- // Bug http://code.google.com/p/chromium/issues/detail?id=2739.
- RecordHistogram(**it);
- }
-}
-
-void MetricsService::RecordHistogram(const Histogram& histogram) {
- // Get up-to-date snapshot of sample stats.
- Histogram::SampleSet snapshot;
- histogram.SnapshotSample(&snapshot);
-
- const std::string& histogram_name = histogram.histogram_name();
-
- // Find the already sent stats, or create an empty set.
- LoggedSampleMap::iterator it = logged_samples_.find(histogram_name);
- Histogram::SampleSet* already_logged;
- if (logged_samples_.end() == it) {
- // Add new entry
- already_logged = &logged_samples_[histogram.histogram_name()];
- already_logged->Resize(histogram); // Complete initialization.
- } else {
- already_logged = &(it->second);
- // Deduct any stats we've already logged from our snapshot.
- snapshot.Subtract(*already_logged);
- }
-
- // snapshot now contains only a delta to what we've already_logged.
-
- if (snapshot.TotalCount() > 0) {
- current_log_->RecordHistogramDelta(histogram, snapshot);
- // Add new data into our running total.
- already_logged->Add(snapshot);
- }
-}
-
static bool IsSingleThreaded() {
static PlatformThreadId thread_id = 0;
if (!thread_id)

Powered by Google App Engine
This is Rietveld 408576698