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

Unified Diff: chrome/browser/tracing/crash_service_uploader.cc

Issue 1181213002: Slow Reports - Embed Metadata in Traces (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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/tracing/crash_service_uploader.cc
diff --git a/chrome/browser/tracing/crash_service_uploader.cc b/chrome/browser/tracing/crash_service_uploader.cc
index 9224a58b1c98c2070bdbff7e91999dbb193d1944..6f62b9d0bb6ef1b7cc6922cda0c747f184081039 100644
--- a/chrome/browser/tracing/crash_service_uploader.cc
+++ b/chrome/browser/tracing/crash_service_uploader.cc
@@ -50,6 +50,43 @@ TraceCrashServiceUploader::TraceCrashServiceUploader(
upload_url = command_line.GetSwitchValueASCII(switches::kTraceUploadURL);
}
SetUploadURL(upload_url);
+
+#if defined(OS_WIN)
+ const char product[] = "Chrome";
+#elif defined(OS_MACOSX)
+ const char product[] = "Chrome_Mac";
+#elif defined(OS_LINUX)
+ const char product[] = "Chrome_Linux";
+#elif defined(OS_ANDROID)
+ const char product[] = "Chrome_Android";
+#elif defined(OS_CHROMEOS)
+ const char product[] = "Chrome_ChromeOS";
+#else
+#error Platform not supported.
+#endif
+
+ // VersionInfo::ProductNameAndVersionForUserAgent() returns a string like
+ // "Chrome/aa.bb.cc.dd", split out the part before the "/".
+ chrome::VersionInfo version_info;
+ std::vector<std::string> product_components;
+ base::SplitString(version_info.ProductNameAndVersionForUserAgent(), '/',
oystein (OOO til 10th of July) 2015/06/12 18:14:16 Why have this twice now?
shatch 2015/06/12 19:05:54 This was actually just moved from earlier in the f
+ &product_components);
+ DCHECK_EQ(2U, product_components.size());
+ std::string version;
+ if (product_components.size() == 2U) {
+ version = product_components[1];
+ } else {
+ version = "unknown";
+ }
+
+ metadata_.insert(std::pair<std::string, std::string>("prod", product));
+ metadata_.insert(
+ std::pair<std::string, std::string>("ver", version + "-trace"));
+ metadata_.insert(std::pair<std::string, std::string>("guid", "0"));
+ metadata_.insert(std::pair<std::string, std::string>("type", "trace"));
+ // No minidump means no need for crash to process the report.
+ metadata_.insert(
+ std::pair<std::string, std::string>("should_process", "false"));
}
TraceCrashServiceUploader::~TraceCrashServiceUploader() {
@@ -64,6 +101,12 @@ void TraceCrashServiceUploader::SetUploadURL(const std::string& url) {
upload_url_.clear();
}
+void TraceCrashServiceUploader::SetMetadata(
+ const std::map<std::string, std::string>& metadata) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ metadata_.insert(metadata.begin(), metadata.end());
+}
+
void TraceCrashServiceUploader::OnURLFetchComplete(
const net::URLFetcher* source) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
@@ -104,13 +147,14 @@ void TraceCrashServiceUploader::DoUpload(
content::BrowserThread::PostTask(
content::BrowserThread::FILE, FROM_HERE,
base::Bind(&TraceCrashServiceUploader::DoUploadOnFileThread,
- base::Unretained(this), file_contents, upload_url_,
+ base::Unretained(this), file_contents, upload_url_, metadata_,
progress_callback, done_callback));
}
void TraceCrashServiceUploader::DoUploadOnFileThread(
const std::string& file_contents,
const std::string& upload_url,
+ const std::map<std::string, std::string>& metadata,
const UploadProgressCallback& progress_callback,
const UploadDoneCallback& done_callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
@@ -124,34 +168,6 @@ void TraceCrashServiceUploader::DoUploadOnFileThread(
return;
}
-#if defined(OS_WIN)
- const char product[] = "Chrome";
-#elif defined(OS_MACOSX)
- const char product[] = "Chrome_Mac";
-#elif defined(OS_LINUX)
- const char product[] = "Chrome_Linux";
-#elif defined(OS_ANDROID)
- const char product[] = "Chrome_Android";
-#elif defined(OS_CHROMEOS)
- const char product[] = "Chrome_ChromeOS";
-#else
-#error Platform not supported.
-#endif
-
- // VersionInfo::ProductNameAndVersionForUserAgent() returns a string like
- // "Chrome/aa.bb.cc.dd", split out the part before the "/".
- chrome::VersionInfo version_info;
- std::vector<std::string> product_components;
- base::SplitString(version_info.ProductNameAndVersionForUserAgent(), '/',
- &product_components);
- DCHECK_EQ(2U, product_components.size());
- std::string version;
- if (product_components.size() == 2U) {
- version = product_components[1];
- } else {
- version = "unknown";
- }
-
if (url_fetcher_.get()) {
OnUploadError("Already uploading.");
return;
@@ -166,7 +182,7 @@ void TraceCrashServiceUploader::DoUploadOnFileThread(
}
std::string post_data;
- SetupMultipart(product, version, "trace.json.gz",
+ SetupMultipart(metadata, "trace.json.gz",
std::string(compressed_contents.get(), compressed_bytes),
&post_data);
@@ -184,22 +200,14 @@ void TraceCrashServiceUploader::OnUploadError(std::string error_message) {
}
void TraceCrashServiceUploader::SetupMultipart(
- const std::string& product,
- const std::string& version,
+ const std::map<std::string, std::string> metadata,
const std::string& trace_filename,
const std::string& trace_contents,
std::string* post_data) {
- net::AddMultipartValueForUpload("prod", product, kMultipartBoundary, "",
- post_data);
- net::AddMultipartValueForUpload("ver", version + "-trace", kMultipartBoundary,
- "", post_data);
- net::AddMultipartValueForUpload("guid", "0", kMultipartBoundary, "",
- post_data);
- net::AddMultipartValueForUpload("type", "trace", kMultipartBoundary, "",
- post_data);
- // No minidump means no need for crash to process the report.
- net::AddMultipartValueForUpload("should_process", "false", kMultipartBoundary,
- "", post_data);
+ for (auto it = metadata.begin(); it != metadata.end(); ++it) {
+ net::AddMultipartValueForUpload(it->first, it->second, kMultipartBoundary,
+ "", post_data);
+ }
AddTraceFile(trace_filename, trace_contents, post_data);

Powered by Google App Engine
This is Rietveld 408576698