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

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

Issue 2735005: Merge 49197 - Submitting CL http://codereview.chromium.org/2324001 on behalf ... (Closed) Base URL: svn://svn.chromium.org/chrome/branches/418/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
« no previous file with comments | « chrome/browser/metrics/metrics_log.h ('k') | chrome/browser/metrics/metrics_log_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/metrics/metrics_log.cc
===================================================================
--- chrome/browser/metrics/metrics_log.cc (revision 49204)
+++ chrome/browser/metrics/metrics_log.cc (working copy)
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 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.
@@ -10,6 +10,7 @@
#include "base/file_util.h"
#include "base/file_version_info.h"
#include "base/md5.h"
+#include "base/perftimer.h"
#include "base/scoped_ptr.h"
#include "base/string_util.h"
#include "base/sys_info.h"
@@ -51,6 +52,7 @@
client_id_(client_id),
session_id_(IntToString(session_id)),
locked_(false),
+ doc_(NULL),
buffer_(NULL),
writer_(NULL),
num_events_(0) {
@@ -58,7 +60,11 @@
buffer_ = xmlBufferCreate();
DCHECK(buffer_);
- writer_ = xmlNewTextWriterMemory(buffer_, 0);
+#if defined(OS_CHROMEOS)
+ writer_ = xmlNewTextWriterDoc(&doc_, /* compression */ 0);
+#else
+ writer_ = xmlNewTextWriterMemory(buffer_, /* compression */ 0);
+#endif // OS_CHROMEOS
DCHECK(writer_);
int result = xmlTextWriterSetIndent(writer_, 2);
@@ -68,16 +74,15 @@
WriteAttribute("clientid", client_id_);
WriteInt64Attribute("buildtime", GetBuildTime());
WriteAttribute("appversion", GetVersionString());
-
- DCHECK_GE(result, 0);
}
MetricsLog::~MetricsLog() {
- if (writer_)
- xmlFreeTextWriter(writer_);
+ FreeDocWriter();
- if (buffer_)
+ if (buffer_) {
xmlBufferFree(buffer_);
+ buffer_ = NULL;
+ }
}
void MetricsLog::CloseLog() {
@@ -89,6 +94,27 @@
result = xmlTextWriterFlush(writer_);
DCHECK_GE(result, 0);
+
+#if defined(OS_CHROMEOS)
+ xmlNodePtr root = xmlDocGetRootElement(doc_);
+ if (!hardware_class_.empty()) {
+ // The hardware class is determined after the first ongoing log is
+ // constructed, so this adds the root element's "hardwareclass"
+ // attribute when the log is closed instead.
+ xmlNewProp(root, UnsignedChar("hardwareclass"),
+ UnsignedChar(hardware_class_.c_str()));
+ }
+
+ // Flattens the XML tree into a character buffer.
+ PerfTimer dump_timer;
+ result = xmlNodeDump(buffer_, doc_, root, /* level */ 0, /* format */ 1);
+ DCHECK_GE(result, 0);
+ UMA_HISTOGRAM_TIMES("UMA.XMLNodeDumpTime", dump_timer.Elapsed());
+
+ PerfTimer free_timer;
+ FreeDocWriter();
+ UMA_HISTOGRAM_TIMES("UMA.XMLWriterDestructionTime", free_timer.Elapsed());
+#endif // OS_CHROMEOS
}
int MetricsLog::GetEncodedLogSize() {
@@ -285,6 +311,18 @@
}
}
+void MetricsLog::FreeDocWriter() {
+ if (writer_) {
+ xmlFreeTextWriter(writer_);
+ writer_ = NULL;
+ }
+
+ if (doc_) {
+ xmlFreeDoc(doc_);
+ doc_ = NULL;
+ }
+}
+
void MetricsLog::StartElement(const char* name) {
DCHECK(!locked_);
DCHECK(name);
« no previous file with comments | « chrome/browser/metrics/metrics_log.h ('k') | chrome/browser/metrics/metrics_log_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698