[tracing] Migrate away from chrome_config_string in field tracing
This CL stops filling chrome_config_string in field tracing config, which is no longer used by any of the data source. This uses `event_package_name_filter_enabled` proto field instead of IsEventPackageNameFilterEnabled() from trace_config string. chrome_config_string is still used locally by a few data sources - java heap profiler - arc/system data source on ChromeOs - memory instrumentation - kMetaDataSourceName Change-Id: I26bcd376e854ca06248b455a6126e9bd44cbbee6 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6530108 Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org> Reviewed-by: Stephen Nusko <nuskos@chromium.org> Cr-Commit-Position: refs/heads/main@{#1459492}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
ae9af25ea5
commit
e6d973399b
base/android
content/browser/tracing
services/tracing/public/cpp/perfetto
@ -43,10 +43,8 @@ class TraceEnabledObserver : public perfetto::TrackEventSessionObserver {
|
||||
|
||||
// perfetto::TrackEventSessionObserver implementation
|
||||
void OnSetup(const perfetto::DataSourceBase::SetupArgs& args) override {
|
||||
trace_event::TraceConfig trace_config(
|
||||
args.config->chrome_config().trace_config());
|
||||
event_name_filtering_per_session_[args.internal_instance_index] =
|
||||
trace_config.IsEventPackageNameFilterEnabled();
|
||||
args.config->chrome_config().event_package_name_filter_enabled();
|
||||
}
|
||||
|
||||
void OnStart(const perfetto::DataSourceBase::StartArgs&) override {
|
||||
|
@ -769,11 +769,6 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest,
|
||||
ASSERT_TRUE(trace_json->is_dict());
|
||||
auto* metadata_json = trace_json->GetDict().FindDict("metadata");
|
||||
ASSERT_TRUE(metadata_json);
|
||||
|
||||
const std::string* trace_config = metadata_json->FindString("trace-config");
|
||||
ASSERT_TRUE(trace_config);
|
||||
EXPECT_NE(trace_config->find("record-continuously"), trace_config->npos)
|
||||
<< *trace_config;
|
||||
}
|
||||
|
||||
// Used as a known symbol to look up the current module.
|
||||
|
@ -45,27 +45,25 @@ perfetto::TraceConfig::DataSource* AddDataSourceConfig(
|
||||
bool privacy_filtering_enabled,
|
||||
bool convert_to_legacy_json,
|
||||
perfetto::protos::gen::ChromeConfig::ClientPriority client_priority,
|
||||
const std::string& json_agent_label_filter) {
|
||||
const std::string& json_agent_label_filter,
|
||||
bool enable_package_name_filter) {
|
||||
auto* data_source = perfetto_config->add_data_sources();
|
||||
auto* source_config = data_source->mutable_config();
|
||||
source_config->set_name(name);
|
||||
source_config->set_target_buffer(0);
|
||||
|
||||
auto* chrome_config = source_config->mutable_chrome_config();
|
||||
chrome_config->set_trace_config(chrome_config_string);
|
||||
if (!chrome_config_string.empty()) {
|
||||
chrome_config->set_trace_config(chrome_config_string);
|
||||
}
|
||||
chrome_config->set_privacy_filtering_enabled(privacy_filtering_enabled);
|
||||
chrome_config->set_convert_to_legacy_json(convert_to_legacy_json);
|
||||
chrome_config->set_client_priority(client_priority);
|
||||
chrome_config->set_event_package_name_filter_enabled(
|
||||
enable_package_name_filter);
|
||||
if (!json_agent_label_filter.empty())
|
||||
chrome_config->set_json_agent_label_filter(json_agent_label_filter);
|
||||
|
||||
if (!strcmp(name, tracing::mojom::kTraceEventDataSourceName)) {
|
||||
source_config->set_name("track_event");
|
||||
base::trace_event::TraceConfig base_config(chrome_config_string);
|
||||
source_config->set_track_event_config_raw(
|
||||
base_config.ToPerfettoTrackEventConfigRaw(privacy_filtering_enabled));
|
||||
}
|
||||
|
||||
return data_source;
|
||||
}
|
||||
|
||||
@ -77,7 +75,8 @@ void AddDataSourceConfigs(
|
||||
bool privacy_filtering_enabled,
|
||||
bool convert_to_legacy_json,
|
||||
perfetto::protos::gen::ChromeConfig::ClientPriority client_priority,
|
||||
const std::string& json_agent_label_filter) {
|
||||
const std::string& json_agent_label_filter,
|
||||
bool enable_package_name_filter) {
|
||||
const std::string chrome_config_string = stripped_config.ToString();
|
||||
|
||||
if (stripped_config.IsCategoryGroupEnabled(
|
||||
@ -85,17 +84,21 @@ void AddDataSourceConfigs(
|
||||
AddDataSourceConfig(
|
||||
perfetto_config, tracing::mojom::kMemoryInstrumentationDataSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
client_priority, json_agent_label_filter, enable_package_name_filter);
|
||||
AddDataSourceConfig(
|
||||
perfetto_config, tracing::mojom::kNativeHeapProfilerSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
client_priority, json_agent_label_filter, enable_package_name_filter);
|
||||
}
|
||||
|
||||
auto* trace_event_data_source = AddDataSourceConfig(
|
||||
perfetto_config, tracing::mojom::kTraceEventDataSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
client_priority, json_agent_label_filter, enable_package_name_filter);
|
||||
auto* trace_event_source_config = trace_event_data_source->mutable_config();
|
||||
trace_event_source_config->set_name("track_event");
|
||||
trace_event_source_config->set_track_event_config_raw(
|
||||
stripped_config.ToPerfettoTrackEventConfigRaw(privacy_filtering_enabled));
|
||||
for (auto& enabled_pid : process_filters.included_process_ids()) {
|
||||
*trace_event_data_source->add_producer_name_filter() = base::StrCat(
|
||||
{mojom::kPerfettoProducerNamePrefix,
|
||||
@ -109,14 +112,14 @@ void AddDataSourceConfigs(
|
||||
AddDataSourceConfig(
|
||||
perfetto_config, tracing::mojom::kSystemTraceDataSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
client_priority, json_agent_label_filter, enable_package_name_filter);
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
AddDataSourceConfig(
|
||||
perfetto_config, tracing::mojom::kArcTraceDataSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
client_priority, json_agent_label_filter, enable_package_name_filter);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -124,14 +127,15 @@ void AddDataSourceConfigs(
|
||||
AddDataSourceConfig(perfetto_config, tracing::mojom::kMetaDataSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled,
|
||||
convert_to_legacy_json, client_priority,
|
||||
json_agent_label_filter);
|
||||
json_agent_label_filter, enable_package_name_filter);
|
||||
|
||||
if (stripped_config.IsCategoryGroupEnabled(
|
||||
TRACE_DISABLED_BY_DEFAULT("histogram_samples"))) {
|
||||
auto* data_source = AddDataSourceConfig(
|
||||
perfetto_config, tracing::mojom::kHistogramSampleSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
/*chrome_config_string=*/"", privacy_filtering_enabled,
|
||||
convert_to_legacy_json, client_priority, json_agent_label_filter,
|
||||
enable_package_name_filter);
|
||||
|
||||
perfetto::protos::gen::ChromiumHistogramSamplesConfig histogram_config;
|
||||
histogram_config.set_filter_histogram_names(privacy_filtering_enabled);
|
||||
@ -147,18 +151,20 @@ void AddDataSourceConfigs(
|
||||
|
||||
if (stripped_config.IsCategoryGroupEnabled(
|
||||
TRACE_DISABLED_BY_DEFAULT("cpu_profiler"))) {
|
||||
AddDataSourceConfig(
|
||||
perfetto_config, tracing::mojom::kSamplerProfilerSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
AddDataSourceConfig(perfetto_config,
|
||||
tracing::mojom::kSamplerProfilerSourceName,
|
||||
/*chrome_config_string=*/"", privacy_filtering_enabled,
|
||||
convert_to_legacy_json, client_priority,
|
||||
json_agent_label_filter, enable_package_name_filter);
|
||||
}
|
||||
|
||||
if (stripped_config.IsCategoryGroupEnabled(
|
||||
TRACE_DISABLED_BY_DEFAULT("system_metrics"))) {
|
||||
AddDataSourceConfig(
|
||||
perfetto_config, tracing::mojom::kSystemMetricsSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
AddDataSourceConfig(perfetto_config,
|
||||
tracing::mojom::kSystemMetricsSourceName,
|
||||
/*chrome_config_string=*/"", privacy_filtering_enabled,
|
||||
convert_to_legacy_json, client_priority,
|
||||
json_agent_label_filter, enable_package_name_filter);
|
||||
}
|
||||
|
||||
if (stripped_config.IsCategoryGroupEnabled(
|
||||
@ -166,7 +172,7 @@ void AddDataSourceConfigs(
|
||||
AddDataSourceConfig(
|
||||
perfetto_config, tracing::mojom::kJavaHeapProfilerSourceName,
|
||||
chrome_config_string, privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
client_priority, json_agent_label_filter, enable_package_name_filter);
|
||||
}
|
||||
}
|
||||
|
||||
@ -186,67 +192,6 @@ size_t GetDefaultTraceBufferSize() {
|
||||
}
|
||||
}
|
||||
|
||||
std::optional<base::trace_event::TraceConfig> GetChromeTraceConfig(
|
||||
const perfetto::TraceConfig& perfetto_config) {
|
||||
// The caller must ensure a valid buffer config for chrome.
|
||||
DCHECK_GE(perfetto_config.buffers_size(), 1);
|
||||
|
||||
base::trace_event::TraceRecordMode record_mode;
|
||||
switch (perfetto_config.buffers()[0].fill_policy()) {
|
||||
case perfetto::protos::gen::TraceConfig::BufferConfig::DISCARD:
|
||||
case perfetto::protos::gen::TraceConfig::BufferConfig::UNSPECIFIED:
|
||||
record_mode = base::trace_event::RECORD_UNTIL_FULL;
|
||||
break;
|
||||
case perfetto::protos::gen::TraceConfig::BufferConfig::RING_BUFFER:
|
||||
record_mode = base::trace_event::RECORD_CONTINUOUSLY;
|
||||
break;
|
||||
}
|
||||
std::string category_filter_string;
|
||||
bool systrace_enabled = false;
|
||||
for (const auto& data_source_config : perfetto_config.data_sources()) {
|
||||
#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_CASTOS)
|
||||
if (data_source_config.config().name() ==
|
||||
tracing::mojom::kSystemTraceDataSourceName ||
|
||||
data_source_config.config().name() ==
|
||||
tracing::mojom::kArcTraceDataSourceName) {
|
||||
systrace_enabled = true;
|
||||
}
|
||||
#endif
|
||||
if (!data_source_config.config().track_event_config_raw().empty()) {
|
||||
perfetto::protos::gen::TrackEventConfig track_event_config;
|
||||
if (!track_event_config.ParseFromString(
|
||||
data_source_config.config().track_event_config_raw())) {
|
||||
return std::nullopt;
|
||||
}
|
||||
// tags aren't supported in chrome TraceConfig.
|
||||
if (!track_event_config.disabled_tags().empty() ||
|
||||
!track_event_config.enabled_tags().empty()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
for (const auto& cat : track_event_config.enabled_categories()) {
|
||||
if (cat == "__metadata" || cat == "*") {
|
||||
continue;
|
||||
}
|
||||
base::StringAppendF(&category_filter_string, "%s,", cat.c_str());
|
||||
}
|
||||
for (const auto& cat : track_event_config.disabled_categories()) {
|
||||
if (cat == "*") {
|
||||
continue;
|
||||
}
|
||||
base::StringAppendF(&category_filter_string, "-%s,", cat.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
base::trace_event::TraceConfig chrome_config(category_filter_string,
|
||||
record_mode);
|
||||
chrome_config.SetTraceBufferSizeInKb(0);
|
||||
chrome_config.SetTraceBufferSizeInEvents(0);
|
||||
if (systrace_enabled) {
|
||||
chrome_config.EnableSystrace();
|
||||
}
|
||||
return chrome_config;
|
||||
}
|
||||
|
||||
void AdaptBuiltinDataSourcesConfig(
|
||||
perfetto::TraceConfig::BuiltinDataSource* config,
|
||||
bool privacy_filtering_enabled) {
|
||||
@ -282,10 +227,10 @@ void AdaptTrackEventConfig(perfetto::protos::gen::TrackEventConfig* config,
|
||||
|
||||
void AdaptDataSourceConfig(
|
||||
perfetto::DataSourceConfig* config,
|
||||
const std::string& chrome_config_string,
|
||||
bool privacy_filtering_enabled,
|
||||
bool enable_package_name_filter,
|
||||
perfetto::protos::gen::ChromeConfig::ClientPriority client_priority,
|
||||
bool enable_system_backend = false) {
|
||||
bool enable_system_backend) {
|
||||
if (!config->has_target_buffer()) {
|
||||
config->set_target_buffer(0);
|
||||
}
|
||||
@ -302,7 +247,8 @@ void AdaptDataSourceConfig(
|
||||
// background tracing configs.
|
||||
chrome_config->set_convert_to_legacy_json(false);
|
||||
chrome_config->set_client_priority(client_priority);
|
||||
chrome_config->set_trace_config(chrome_config_string);
|
||||
chrome_config->set_event_package_name_filter_enabled(
|
||||
enable_package_name_filter);
|
||||
}
|
||||
|
||||
if (config->name() == tracing::mojom::kHistogramSampleSourceName) {
|
||||
@ -380,7 +326,8 @@ perfetto::TraceConfig GetDefaultPerfettoConfig(
|
||||
AddDataSourceConfigs(&perfetto_config, chrome_config.process_filter_config(),
|
||||
stripped_config, chrome_config.IsSystraceEnabled(),
|
||||
privacy_filtering_enabled, convert_to_legacy_json,
|
||||
client_priority, json_agent_label_filter);
|
||||
client_priority, json_agent_label_filter,
|
||||
chrome_config.IsEventPackageNameFilterEnabled());
|
||||
|
||||
return perfetto_config;
|
||||
}
|
||||
@ -397,12 +344,6 @@ bool AdaptPerfettoConfigForChrome(
|
||||
buffer_config->set_fill_policy(
|
||||
perfetto::TraceConfig::BufferConfig::RING_BUFFER);
|
||||
}
|
||||
auto chrome_config = GetChromeTraceConfig(*perfetto_config);
|
||||
if (!chrome_config) {
|
||||
return false;
|
||||
}
|
||||
chrome_config->SetEventPackageNameFilterEnabled(enable_package_name_filter);
|
||||
std::string chrome_config_string = chrome_config->ToString();
|
||||
|
||||
AdaptBuiltinDataSourcesConfig(perfetto_config->mutable_builtin_data_sources(),
|
||||
privacy_filtering_enabled);
|
||||
@ -413,7 +354,7 @@ bool AdaptPerfettoConfigForChrome(
|
||||
|
||||
for (auto& data_source_config : *perfetto_config->mutable_data_sources()) {
|
||||
AdaptDataSourceConfig(data_source_config.mutable_config(),
|
||||
chrome_config_string, privacy_filtering_enabled,
|
||||
privacy_filtering_enabled, enable_package_name_filter,
|
||||
client_priority, enable_system_backend);
|
||||
}
|
||||
return true;
|
||||
|
@ -35,7 +35,19 @@ class AdaptPerfettoConfigForChromeTest : public ::testing::Test {
|
||||
return destination;
|
||||
}
|
||||
|
||||
void RemoveChromeConfigString(perfetto::DataSourceConfig* message) {
|
||||
// .gen.h proto doesn't expose a clear method.
|
||||
message->mutable_chrome_config()->set_trace_config("");
|
||||
}
|
||||
|
||||
void RemoveChromeConfigString(perfetto::TraceConfig* mesaage) {
|
||||
for (auto& data_source_config : *mesaage->mutable_data_sources()) {
|
||||
RemoveChromeConfigString(data_source_config.mutable_config());
|
||||
}
|
||||
}
|
||||
|
||||
std::string PrintConfigToText(perfetto::TraceConfig message) {
|
||||
RemoveChromeConfigString(&message);
|
||||
std::string serialized_message = message.SerializeAsString();
|
||||
std::string proto_text = config_loader_.PrintToText(
|
||||
"perfetto.protos.TraceConfig", serialized_message);
|
||||
@ -47,6 +59,7 @@ class AdaptPerfettoConfigForChromeTest : public ::testing::Test {
|
||||
if (!message) {
|
||||
return "";
|
||||
}
|
||||
RemoveChromeConfigString(&message.value());
|
||||
std::string serialized_message = message->SerializeAsString();
|
||||
std::string proto_text = config_loader_.PrintToText(
|
||||
"perfetto.protos.DataSourceConfig", serialized_message);
|
||||
@ -122,21 +135,6 @@ TEST_F(AdaptPerfettoConfigForChromeTest, LegacyTraceEvent) {
|
||||
PrintConfigToText(perfetto_config));
|
||||
}
|
||||
|
||||
TEST_F(AdaptPerfettoConfigForChromeTest, UnsupportedTrackEvent) {
|
||||
auto perfetto_config = ParsePerfettoConfigFromText(R"pb(
|
||||
data_sources: {
|
||||
config: {
|
||||
name: "org.chromium.trace_event"
|
||||
track_event_config: {
|
||||
enabled_tags: [ "foo" ]
|
||||
disabled_tags: [ "*" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
)pb");
|
||||
EXPECT_FALSE(AdaptPerfettoConfigForChrome(&perfetto_config));
|
||||
}
|
||||
|
||||
TEST_F(AdaptPerfettoConfigForChromeTest, DisabledCategories) {
|
||||
auto perfetto_config = ParsePerfettoConfigFromText(R"pb(
|
||||
data_sources: {
|
||||
|
Reference in New Issue
Block a user