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..7c06cbbd2a13db7f21caa44c40d0cac8e9d1ec35 100644 |
| --- a/content/browser/tracing/background_tracing_manager_impl.cc |
| +++ b/content/browser/tracing/background_tracing_manager_impl.cc |
| @@ -4,8 +4,10 @@ |
| #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/strings/string_split.h" |
| #include "base/time/time.h" |
| #include "content/public/browser/background_tracing_preemptive_config.h" |
| #include "content/public/browser/background_tracing_reactive_config.h" |
| @@ -21,6 +23,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 +375,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(); |
| + 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::make_pair(it.key(), value)); |
| + } |
| + } |
| + |
| receive_callback_.Run( |
| - file_contents, |
| + file_contents, metadata, |
| base::Bind(&BackgroundTracingManagerImpl::OnFinalizeComplete, |
| base::Unretained(this))); |
| + } |
| } |
| void BackgroundTracingManagerImpl::OnFinalizeComplete() { |
| @@ -398,6 +417,34 @@ void BackgroundTracingManagerImpl::OnFinalizeComplete() { |
| RecordBackgroundTracingMetric(FINALIZATION_COMPLETE); |
| } |
| +scoped_ptr<base::DictionaryValue> |
| +BackgroundTracingManagerImpl::GenerateMetadataDict() const { |
| + // Grab the product version. |
| + std::string product_version = GetContentClient()->GetProduct(); |
| + std::vector<std::string> product_components; |
| + base::SplitString(product_version, '/', &product_components); |
| + DCHECK_EQ(2U, product_components.size()); |
| + if (product_components.size() != 2U) |
| + return nullptr; |
| + |
| + product_version = product_components[1]; |
|
oystein (OOO til 10th of July)
2015/06/12 19:29:16
Is it worth cutting out the "Chrome/" part? Could
shatch
2015/06/12 20:53:47
Done.
|
| + |
| + // Serialize the config into json. |
| + 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, product_version); |
| + |
| + return metadata_dict.Pass(); |
| +} |
| + |
| void BackgroundTracingManagerImpl::BeginFinalizing( |
| StartedFinalizingCallback callback) { |
| is_gathering_ = true; |
| @@ -413,6 +460,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)) |
|
dsinclair
2015/06/12 19:38:51
This is going to produce strange levels of encodin
shatch
2015/06/12 20:53:48
Ah didn't think about the double encoding, checked
|
| + trace_data_sink->SetMetadata(results); |
| + } |
| } else { |
| RecordBackgroundTracingMetric(FINALIZATION_DISALLOWED); |
| } |