Chromium Code Reviews| 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..8e4b267b38debcc9cf506302a1392b935ba46412 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[] = "product_version"; |
| + |
| // These values are used for a histogram. Do not reorder. |
| enum BackgroundTracingMetrics { |
| SCENARIO_ACTIVATION_REQUESTED = 0, |
| @@ -370,11 +374,12 @@ void BackgroundTracingManagerImpl::OnFinalizeStarted( |
| UMA_HISTOGRAM_MEMORY_KB("Tracing.Background.FinalizingTraceSizeInKB", |
| file_contents->size() / 1024); |
| - if (!receive_callback_.is_null()) |
| + if (!receive_callback_.is_null()) { |
| receive_callback_.Run( |
| - file_contents, |
| + file_contents, GenerateMetadataDict(), |
| base::Bind(&BackgroundTracingManagerImpl::OnFinalizeComplete, |
| base::Unretained(this))); |
| + } |
| } |
| void BackgroundTracingManagerImpl::OnFinalizeComplete() { |
| @@ -398,6 +403,23 @@ void BackgroundTracingManagerImpl::OnFinalizeComplete() { |
| RecordBackgroundTracingMetric(FINALIZATION_COMPLETE); |
| } |
| +scoped_ptr<base::DictionaryValue> |
| +BackgroundTracingManagerImpl::GenerateMetadataDict() const { |
| + // Grab the product version. |
| + std::string product_version = GetContentClient()->GetProduct(); |
| + |
| + // Serialize the config into json. |
| + scoped_ptr<base::DictionaryValue> config_dict(new base::DictionaryValue()); |
| + |
| + BackgroundTracingConfig::IntoDict(config_.get(), config_dict.get()); |
| + |
| + scoped_ptr<base::DictionaryValue> metadata_dict(new base::DictionaryValue()); |
| + metadata_dict->Set(kMetaDataConfigKey, config_dict.Pass()); |
| + metadata_dict->SetString(kMetaDataVersionKey, product_version); |
| + |
| + return metadata_dict.Pass(); |
| +} |
| + |
| void BackgroundTracingManagerImpl::BeginFinalizing( |
| StartedFinalizingCallback callback) { |
| is_gathering_ = true; |
| @@ -413,6 +435,13 @@ void BackgroundTracingManagerImpl::BeginFinalizing( |
| trace_data_sink = content::TracingController::CreateCompressedStringSink( |
| data_endpoint_wrapper_); |
| RecordBackgroundTracingMetric(FINALIZATION_ALLOWED); |
| + |
| + auto metadata_dict = GenerateMetadataDict(); |
| + if (metadata_dict) { |
|
dsinclair
2015/06/13 00:41:21
if (auto metadata_dict = GenerateMetadataDict()) {
|
| + std::string results; |
| + if (base::JSONWriter::Write(*metadata_dict.get(), &results)) |
| + trace_data_sink->SetMetadata(results); |
| + } |
| } else { |
| RecordBackgroundTracingMetric(FINALIZATION_DISALLOWED); |
| } |