| 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..3c6d26f8adb59ec8e85bc640f8eeb1f0b6e8338e 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,12 @@ void BackgroundTracingManagerImpl::BeginFinalizing(
|
| trace_data_sink = content::TracingController::CreateCompressedStringSink(
|
| data_endpoint_wrapper_);
|
| RecordBackgroundTracingMetric(FINALIZATION_ALLOWED);
|
| +
|
| + 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);
|
| }
|
|
|