Index: content/browser/tracing/background_tracing_manager_impl.cc |
diff --git a/content/browser/tracing/background_tracing_manager_impl.cc b/content/browser/tracing/background_tracing_manager_impl.cc |
index 74d63800e6a63aa4c7a6225d162dcd5494e79298..b7a0ea913aef41bac41474a41b6854c6c6af442e 100644 |
--- a/content/browser/tracing/background_tracing_manager_impl.cc |
+++ b/content/browser/tracing/background_tracing_manager_impl.cc |
@@ -4,6 +4,7 @@ |
#include "content/browser/tracing/background_tracing_manager_impl.h" |
+#include "base/json/json_writer.h" |
#include "base/macros.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/time/time.h" |
@@ -21,6 +22,9 @@ namespace { |
base::LazyInstance<BackgroundTracingManagerImpl>::Leaky g_controller = |
LAZY_INSTANCE_INITIALIZER; |
+const char kMetaDataConfigKey[] = "config"; |
+const char kMetaDataVersionKey[] = "version"; |
+ |
// These values are used for a histogram. Do not reorder. |
enum BackgroundTracingMetrics { |
SCENARIO_ACTIVATION_REQUESTED = 0, |
@@ -370,11 +374,25 @@ void BackgroundTracingManagerImpl::OnFinalizeStarted( |
UMA_HISTOGRAM_MEMORY_KB("Tracing.Background.FinalizingTraceSizeInKB", |
file_contents->size() / 1024); |
- if (!receive_callback_.is_null()) |
+ if (!receive_callback_.is_null()) { |
+ std::map<std::string, std::string> metadata; |
+ |
+ auto metadata_dict = GenerateMetadataDict(); |
oystein (OOO til 10th of July)
2015/06/12 18:14:17
Why not pass the base::DictionaryValue around dire
shatch
2015/06/12 19:05:54
Figured it looked cleaner and easier to work with
oystein (OOO til 10th of July)
2015/06/12 19:29:16
Up to you, it just feels like a bit of an unnecess
shatch
2015/06/12 20:53:47
Done.
|
+ if (metadata_dict) { |
+ for (base::DictionaryValue::Iterator it(*metadata_dict); !it.IsAtEnd(); |
+ it.Advance()) { |
+ std::string value; |
+ if (!it.value().GetAsString(&value)) |
+ continue; |
+ metadata.insert(std::pair<std::string, std::string>(it.key(), value)); |
oystein (OOO til 10th of July)
2015/06/12 18:14:17
nit: std::make_pair() maybe?
shatch
2015/06/12 19:05:54
Done.
|
+ } |
+ } |
+ |
receive_callback_.Run( |
- file_contents, |
+ file_contents, metadata, |
base::Bind(&BackgroundTracingManagerImpl::OnFinalizeComplete, |
base::Unretained(this))); |
+ } |
} |
void BackgroundTracingManagerImpl::OnFinalizeComplete() { |
@@ -398,6 +416,27 @@ void BackgroundTracingManagerImpl::OnFinalizeComplete() { |
RecordBackgroundTracingMetric(FINALIZATION_COMPLETE); |
} |
+scoped_ptr<base::DictionaryValue> |
+BackgroundTracingManagerImpl::GenerateMetadataDict() const { |
+ std::string chrome_version; |
+ if (!delegate_->GetChromeVersion(&chrome_version)) |
oystein (OOO til 10th of July)
2015/06/12 18:14:16
Shouldn't be "chrome"; maybe product_version.
|
+ return nullptr; |
+ |
+ scoped_ptr<base::DictionaryValue> config_dict(new base::DictionaryValue()); |
+ |
+ BackgroundTracingConfig::IntoDict(config_.get(), config_dict.get()); |
+ |
+ std::string config_string; |
+ if (!base::JSONWriter::Write(*config_dict.get(), &config_string)) |
+ return nullptr; |
+ |
+ scoped_ptr<base::DictionaryValue> metadata_dict(new base::DictionaryValue()); |
+ metadata_dict->SetString(kMetaDataConfigKey, config_string); |
+ metadata_dict->SetString(kMetaDataVersionKey, chrome_version); |
+ |
+ return metadata_dict.Pass(); |
+} |
+ |
void BackgroundTracingManagerImpl::BeginFinalizing( |
StartedFinalizingCallback callback) { |
is_gathering_ = true; |
@@ -413,6 +452,13 @@ void BackgroundTracingManagerImpl::BeginFinalizing( |
trace_data_sink = content::TracingController::CreateCompressedStringSink( |
data_endpoint_wrapper_); |
RecordBackgroundTracingMetric(FINALIZATION_ALLOWED); |
+ |
+ auto metadata_dict = GenerateMetadataDict(); |
+ if (metadata_dict) { |
+ std::string results; |
+ if (base::JSONWriter::Write(*metadata_dict.get(), &results)) |
+ trace_data_sink->SetMetadata(results); |
+ } |
} else { |
RecordBackgroundTracingMetric(FINALIZATION_DISALLOWED); |
} |