Commit 780bfdc0 authored by ssid's avatar ssid Committed by Commit Bot

Make interning interval configurable

While we figure out better solutions for interning, to make traces
useful we can decrease interning interval. Make this configurable by
experiments.

Change-Id: I9ad99ab3184362f81d9b7ba5bc217e9c8b1914bd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1716601
Commit-Queue: ssid <ssid@chromium.org>
Reviewed-by: default avataroysteine <oysteine@chromium.org>
Cr-Commit-Position: refs/heads/master@{#680611}
parent baa7414f
...@@ -71,7 +71,8 @@ class PerfettoTracingSession ...@@ -71,7 +71,8 @@ class PerfettoTracingSession
public mojo::DataPipeDrainer::Client { public mojo::DataPipeDrainer::Client {
public: public:
PerfettoTracingSession(BackgroundTracingActiveScenario* parent_scenario, PerfettoTracingSession(BackgroundTracingActiveScenario* parent_scenario,
const TraceConfig& chrome_config) const TraceConfig& chrome_config,
int interning_reset_interval_ms)
: parent_scenario_(parent_scenario), : parent_scenario_(parent_scenario),
raw_data_(std::make_unique<std::string>()) { raw_data_(std::make_unique<std::string>()) {
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
...@@ -89,6 +90,8 @@ class PerfettoTracingSession ...@@ -89,6 +90,8 @@ class PerfettoTracingSession
perfetto::TraceConfig perfetto_config = tracing::GetDefaultPerfettoConfig( perfetto::TraceConfig perfetto_config = tracing::GetDefaultPerfettoConfig(
chrome_config, /*privacy_filtering_enabled=*/true); chrome_config, /*privacy_filtering_enabled=*/true);
perfetto_config.mutable_incremental_state_config()->set_clear_period_ms(
interning_reset_interval_ms);
tracing::mojom::TracingSessionClientPtr tracing_session_client; tracing::mojom::TracingSessionClientPtr tracing_session_client;
binding_.Bind(mojo::MakeRequest(&tracing_session_client)); binding_.Bind(mojo::MakeRequest(&tracing_session_client));
...@@ -264,11 +267,9 @@ class LegacyTracingSession ...@@ -264,11 +267,9 @@ class LegacyTracingSession
BackgroundTracingActiveScenario::BackgroundTracingActiveScenario( BackgroundTracingActiveScenario::BackgroundTracingActiveScenario(
std::unique_ptr<BackgroundTracingConfigImpl> config, std::unique_ptr<BackgroundTracingConfigImpl> config,
bool requires_anonymized_data,
BackgroundTracingManager::ReceiveCallback receive_callback, BackgroundTracingManager::ReceiveCallback receive_callback,
base::OnceClosure on_aborted_callback) base::OnceClosure on_aborted_callback)
: config_(std::move(config)), : config_(std::move(config)),
requires_anonymized_data_(requires_anonymized_data),
receive_callback_(std::move(receive_callback)), receive_callback_(std::move(receive_callback)),
on_aborted_callback_(std::move(on_aborted_callback)) { on_aborted_callback_(std::move(on_aborted_callback)) {
DCHECK(config_ && !config_->rules().empty()); DCHECK(config_ && !config_->rules().empty());
...@@ -333,8 +334,7 @@ void BackgroundTracingActiveScenario::StartTracingIfConfigNeedsIt() { ...@@ -333,8 +334,7 @@ void BackgroundTracingActiveScenario::StartTracingIfConfigNeedsIt() {
} }
bool BackgroundTracingActiveScenario::StartTracing() { bool BackgroundTracingActiveScenario::StartTracing() {
TraceConfig chrome_config = TraceConfig chrome_config = config_->GetTraceConfig();
config_->GetTraceConfig(requires_anonymized_data_);
// If the tracing controller is tracing, i.e. DevTools or about://tracing, // If the tracing controller is tracing, i.e. DevTools or about://tracing,
// we don't start background tracing to not interfere with the user activity. // we don't start background tracing to not interfere with the user activity.
...@@ -354,8 +354,8 @@ bool BackgroundTracingActiveScenario::StartTracing() { ...@@ -354,8 +354,8 @@ bool BackgroundTracingActiveScenario::StartTracing() {
DCHECK(!tracing_session_); DCHECK(!tracing_session_);
if (base::FeatureList::IsEnabled(features::kBackgroundTracingProtoOutput)) { if (base::FeatureList::IsEnabled(features::kBackgroundTracingProtoOutput)) {
tracing_session_ = tracing_session_ = std::make_unique<PerfettoTracingSession>(
std::make_unique<PerfettoTracingSession>(this, chrome_config); this, chrome_config, config_->interning_reset_interval_ms());
} else { } else {
tracing_session_ = tracing_session_ =
std::make_unique<LegacyTracingSession>(this, chrome_config); std::make_unique<LegacyTracingSession>(this, chrome_config);
......
...@@ -31,7 +31,6 @@ class BackgroundTracingActiveScenario { ...@@ -31,7 +31,6 @@ class BackgroundTracingActiveScenario {
BackgroundTracingActiveScenario( BackgroundTracingActiveScenario(
std::unique_ptr<BackgroundTracingConfigImpl> config, std::unique_ptr<BackgroundTracingConfigImpl> config,
bool requires_anonymized_data,
BackgroundTracingManager::ReceiveCallback receive_callback, BackgroundTracingManager::ReceiveCallback receive_callback,
base::OnceClosure on_aborted_callback); base::OnceClosure on_aborted_callback);
virtual ~BackgroundTracingActiveScenario(); virtual ~BackgroundTracingActiveScenario();
...@@ -39,12 +38,11 @@ class BackgroundTracingActiveScenario { ...@@ -39,12 +38,11 @@ class BackgroundTracingActiveScenario {
void StartTracingIfConfigNeedsIt(); void StartTracingIfConfigNeedsIt();
void AbortScenario(); void AbortScenario();
const BackgroundTracingConfigImpl* GetConfig() const; CONTENT_EXPORT const BackgroundTracingConfigImpl* GetConfig() const;
void GenerateMetadataDict(base::DictionaryValue* metadata_dict); void GenerateMetadataDict(base::DictionaryValue* metadata_dict);
void GenerateMetadataProto( void GenerateMetadataProto(
perfetto::protos::pbzero::ChromeMetadataPacket* metadata); perfetto::protos::pbzero::ChromeMetadataPacket* metadata);
State state() const { return scenario_state_; } State state() const { return scenario_state_; }
bool requires_anonymized_data() const { return requires_anonymized_data_; }
base::WeakPtr<BackgroundTracingActiveScenario> GetWeakPtr(); base::WeakPtr<BackgroundTracingActiveScenario> GetWeakPtr();
void TriggerNamedEvent( void TriggerNamedEvent(
...@@ -86,7 +84,6 @@ class BackgroundTracingActiveScenario { ...@@ -86,7 +84,6 @@ class BackgroundTracingActiveScenario {
std::unique_ptr<BackgroundTracingConfigImpl> config_; std::unique_ptr<BackgroundTracingConfigImpl> config_;
// Owned by |config_|. // Owned by |config_|.
const BackgroundTracingRule* last_triggered_rule_ = nullptr; const BackgroundTracingRule* last_triggered_rule_ = nullptr;
const bool requires_anonymized_data_ = false;
State scenario_state_ = State::kIdle; State scenario_state_ = State::kIdle;
base::RepeatingClosure rule_triggered_callback_for_testing_; base::RepeatingClosure rule_triggered_callback_for_testing_;
BackgroundTracingManager::ReceiveCallback receive_callback_; BackgroundTracingManager::ReceiveCallback receive_callback_;
......
...@@ -56,6 +56,7 @@ const char kConfigMobileNetworkBuferSizeKb[] = "mobile_network_buffer_size_kb"; ...@@ -56,6 +56,7 @@ const char kConfigMobileNetworkBuferSizeKb[] = "mobile_network_buffer_size_kb";
const char kConfigMaxBufferSizeKb[] = "max_buffer_size_kb"; const char kConfigMaxBufferSizeKb[] = "max_buffer_size_kb";
const char kConfigUploadLimitKb[] = "upload_limit_kb"; const char kConfigUploadLimitKb[] = "upload_limit_kb";
const char kConfigUploadLimitNetworkKb[] = "upload_limit_network_kb"; const char kConfigUploadLimitNetworkKb[] = "upload_limit_network_kb";
const char kConfigInterningResetIntervalMs[] = "interning_reset_interval_ms";
} // namespace } // namespace
...@@ -234,8 +235,7 @@ void BackgroundTracingConfigImpl::AddReactiveRule( ...@@ -234,8 +235,7 @@ void BackgroundTracingConfigImpl::AddReactiveRule(
} }
} }
TraceConfig BackgroundTracingConfigImpl::GetTraceConfig( TraceConfig BackgroundTracingConfigImpl::GetTraceConfig() const {
bool requires_anonymized_data) {
base::trace_event::TraceRecordMode record_mode = base::trace_event::TraceRecordMode record_mode =
(tracing_mode() == BackgroundTracingConfigImpl::REACTIVE) (tracing_mode() == BackgroundTracingConfigImpl::REACTIVE)
? base::trace_event::RECORD_UNTIL_FULL ? base::trace_event::RECORD_UNTIL_FULL
...@@ -251,7 +251,7 @@ TraceConfig BackgroundTracingConfigImpl::GetTraceConfig( ...@@ -251,7 +251,7 @@ TraceConfig BackgroundTracingConfigImpl::GetTraceConfig(
chrome_config.SetProcessFilterConfig(process_config); chrome_config.SetProcessFilterConfig(process_config);
} }
if (requires_anonymized_data) { if (requires_anonymized_data_) {
chrome_config.EnableArgumentFilter(); chrome_config.EnableArgumentFilter();
} }
...@@ -510,6 +510,9 @@ void BackgroundTracingConfigImpl::SetBufferSizeLimits( ...@@ -510,6 +510,9 @@ void BackgroundTracingConfigImpl::SetBufferSizeLimits(
if (dict->GetInteger(kConfigUploadLimitNetworkKb, &value)) { if (dict->GetInteger(kConfigUploadLimitNetworkKb, &value)) {
upload_limit_network_kb_ = value; upload_limit_network_kb_ = value;
} }
if (dict->GetInteger(kConfigInterningResetIntervalMs, &value)) {
interning_reset_interval_ms_ = value;
}
} }
int BackgroundTracingConfigImpl::GetMaximumTraceBufferSizeKb() const { int BackgroundTracingConfigImpl::GetMaximumTraceBufferSizeKb() const {
......
...@@ -63,9 +63,17 @@ class CONTENT_EXPORT BackgroundTracingConfigImpl ...@@ -63,9 +63,17 @@ class CONTENT_EXPORT BackgroundTracingConfigImpl
const base::DictionaryValue* dict, const base::DictionaryValue* dict,
BackgroundTracingConfigImpl::CategoryPreset category_preset); BackgroundTracingConfigImpl::CategoryPreset category_preset);
base::trace_event::TraceConfig GetTraceConfig(bool requires_anonymized_data); base::trace_event::TraceConfig GetTraceConfig() const;
size_t GetTraceUploadLimitKb() const; size_t GetTraceUploadLimitKb() const;
int interning_reset_interval_ms() const {
return interning_reset_interval_ms_;
}
void set_requires_anonymized_data(bool value) {
requires_anonymized_data_ = value;
}
bool requires_anonymized_data() const { return requires_anonymized_data_; }
static std::unique_ptr<BackgroundTracingConfigImpl> PreemptiveFromDict( static std::unique_ptr<BackgroundTracingConfigImpl> PreemptiveFromDict(
const base::DictionaryValue* dict); const base::DictionaryValue* dict);
...@@ -107,6 +115,7 @@ class CONTENT_EXPORT BackgroundTracingConfigImpl ...@@ -107,6 +115,7 @@ class CONTENT_EXPORT BackgroundTracingConfigImpl
std::string scenario_name_; std::string scenario_name_;
std::string custom_categories_; std::string custom_categories_;
bool requires_anonymized_data_ = false;
bool trace_browser_process_only_ = false; bool trace_browser_process_only_ = false;
// The default memory overhead of running background tracing for various // The default memory overhead of running background tracing for various
...@@ -124,6 +133,7 @@ class CONTENT_EXPORT BackgroundTracingConfigImpl ...@@ -124,6 +133,7 @@ class CONTENT_EXPORT BackgroundTracingConfigImpl
// compression ratio grows up to 8x if the buffer size is around 100MB. // compression ratio grows up to 8x if the buffer size is around 100MB.
int upload_limit_network_kb_ = 1024; int upload_limit_network_kb_ = 1024;
int upload_limit_kb_ = kUploadLimitKb; int upload_limit_kb_ = kUploadLimitKb;
int interning_reset_interval_ms_ = 5000;
DISALLOW_COPY_AND_ASSIGN(BackgroundTracingConfigImpl); DISALLOW_COPY_AND_ASSIGN(BackgroundTracingConfigImpl);
}; };
......
...@@ -690,12 +690,12 @@ TEST_F(BackgroundTracingConfigTest, BufferLimitConfig) { ...@@ -690,12 +690,12 @@ TEST_F(BackgroundTracingConfigTest, BufferLimitConfig) {
notifier.set_type(net::NetworkChangeNotifier::CONNECTION_2G); notifier.set_type(net::NetworkChangeNotifier::CONNECTION_2G);
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
EXPECT_EQ(300u, config->GetTraceConfig(true).GetTraceBufferSizeInKb()); EXPECT_EQ(300u, config->GetTraceConfig().GetTraceBufferSizeInKb());
EXPECT_EQ(600u, config->GetTraceUploadLimitKb()); EXPECT_EQ(600u, config->GetTraceUploadLimitKb());
#endif #endif
notifier.set_type(net::NetworkChangeNotifier::CONNECTION_WIFI); notifier.set_type(net::NetworkChangeNotifier::CONNECTION_WIFI);
EXPECT_LE(800u, config->GetTraceConfig(true).GetTraceBufferSizeInKb()); EXPECT_LE(800u, config->GetTraceConfig().GetTraceBufferSizeInKb());
EXPECT_EQ(500u, config->GetTraceUploadLimitKb()); EXPECT_EQ(500u, config->GetTraceUploadLimitKb());
} }
......
...@@ -1407,6 +1407,7 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, RunStartupTracing) { ...@@ -1407,6 +1407,7 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, RunStartupTracing) {
EXPECT_TRUE(BackgroundTracingManagerImpl::GetInstance() EXPECT_TRUE(BackgroundTracingManagerImpl::GetInstance()
->GetActiveScenarioForTesting() ->GetActiveScenarioForTesting()
->GetConfig()
->requires_anonymized_data()); ->requires_anonymized_data());
EXPECT_TRUE(base::trace_event::TraceLog::GetInstance() EXPECT_TRUE(base::trace_event::TraceLog::GetInstance()
->GetCurrentTraceConfig() ->GetCurrentTraceConfig()
......
...@@ -145,6 +145,7 @@ bool BackgroundTracingManagerImpl::SetActiveScenario( ...@@ -145,6 +145,7 @@ bool BackgroundTracingManagerImpl::SetActiveScenario(
} }
bool requires_anonymized_data = (data_filtering == ANONYMIZE_DATA); bool requires_anonymized_data = (data_filtering == ANONYMIZE_DATA);
config_impl->set_requires_anonymized_data(requires_anonymized_data);
// If the profile hasn't loaded or been created yet, this is a startup // If the profile hasn't loaded or been created yet, this is a startup
// scenario and we have to wait until initialization is finished to validate // scenario and we have to wait until initialization is finished to validate
...@@ -169,8 +170,7 @@ bool BackgroundTracingManagerImpl::SetActiveScenario( ...@@ -169,8 +170,7 @@ bool BackgroundTracingManagerImpl::SetActiveScenario(
} }
active_scenario_ = std::make_unique<BackgroundTracingActiveScenario>( active_scenario_ = std::make_unique<BackgroundTracingActiveScenario>(
std::move(config_impl), requires_anonymized_data, std::move(config_impl), std::move(receive_callback),
std::move(receive_callback),
base::BindOnce(&BackgroundTracingManagerImpl::OnScenarioAborted, base::BindOnce(&BackgroundTracingManagerImpl::OnScenarioAborted,
base::Unretained(this))); base::Unretained(this)));
...@@ -307,7 +307,7 @@ void BackgroundTracingManagerImpl::ValidateStartupScenario() { ...@@ -307,7 +307,7 @@ void BackgroundTracingManagerImpl::ValidateStartupScenario() {
if (!delegate_->IsAllowedToBeginBackgroundScenario( if (!delegate_->IsAllowedToBeginBackgroundScenario(
*active_scenario_->GetConfig(), *active_scenario_->GetConfig(),
active_scenario_->requires_anonymized_data())) { active_scenario_->GetConfig()->requires_anonymized_data())) {
AbortScenario(); AbortScenario();
} }
} }
...@@ -398,10 +398,11 @@ void BackgroundTracingManagerImpl::WhenIdle( ...@@ -398,10 +398,11 @@ void BackgroundTracingManagerImpl::WhenIdle(
} }
bool BackgroundTracingManagerImpl::IsAllowedFinalization() const { bool BackgroundTracingManagerImpl::IsAllowedFinalization() const {
return !delegate_ || (active_scenario_ && return !delegate_ ||
delegate_->IsAllowedToEndBackgroundScenario( (active_scenario_ &&
*active_scenario_->GetConfig(), delegate_->IsAllowedToEndBackgroundScenario(
active_scenario_->requires_anonymized_data())); *active_scenario_->GetConfig(),
active_scenario_->GetConfig()->requires_anonymized_data()));
} }
std::unique_ptr<base::DictionaryValue> std::unique_ptr<base::DictionaryValue>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment