Index: content/browser/tracing/background_tracing_manager_browsertest.cc |
diff --git a/content/browser/tracing/background_tracing_manager_browsertest.cc b/content/browser/tracing/background_tracing_manager_browsertest.cc |
index f353264f911aa59fb7b36d62422afce812058982..54a1127c230b13497f9c09c2e25a40bb29988342 100644 |
--- a/content/browser/tracing/background_tracing_manager_browsertest.cc |
+++ b/content/browser/tracing/background_tracing_manager_browsertest.cc |
@@ -67,7 +67,23 @@ scoped_ptr<BackgroundTracingPreemptiveConfig> CreatePreemptiveConfig() { |
BackgroundTracingPreemptiveConfig::MonitoringRule rule; |
rule.type = |
BackgroundTracingPreemptiveConfig::MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED; |
- rule.named_trigger_info.trigger_name = "test"; |
+ rule.named_trigger_info.trigger_name = "preemptive_test"; |
+ |
+ config->configs.push_back(rule); |
+ |
+ return config.Pass(); |
+} |
+ |
+scoped_ptr<BackgroundTracingReactiveConfig> CreateReactiveConfig() { |
+ scoped_ptr<BackgroundTracingReactiveConfig> config( |
+ new BackgroundTracingReactiveConfig()); |
+ |
+ BackgroundTracingReactiveConfig::TracingRule rule; |
+ rule.type = |
+ BackgroundTracingReactiveConfig::TRACE_FOR_10S_OR_TRIGGER_OR_FULL; |
+ rule.trigger_name = "reactive_test"; |
+ rule.category_preset = |
+ BackgroundTracingConfig::CategoryPreset::BENCHMARK_DEEP; |
config->configs.push_back(rule); |
@@ -98,7 +114,8 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
CreatePreemptiveConfig(); |
BackgroundTracingManager::TriggerHandle handle = |
- BackgroundTracingManager::GetInstance()->RegisterTriggerType("test"); |
+ BackgroundTracingManager:: |
+ GetInstance()->RegisterTriggerType("preemptive_test"); |
BackgroundTracingManager::GetInstance()->SetActiveScenario( |
config.Pass(), upload_config_wrapper.get_receive_callback(), true); |
@@ -130,7 +147,7 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
content::BackgroundTracingManager::TriggerHandle handle = |
content::BackgroundTracingManager::GetInstance()->RegisterTriggerType( |
- "test"); |
+ "preemptive_test"); |
BackgroundTracingManager::GetInstance()->SetActiveScenario( |
config.Pass(), upload_config_wrapper.get_receive_callback(), true); |
@@ -208,7 +225,7 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
content::BackgroundTracingManager::TriggerHandle handle = |
content::BackgroundTracingManager::GetInstance()->RegisterTriggerType( |
- "test"); |
+ "preemptive_test"); |
BackgroundTracingManager::GetInstance()->TriggerNamedEvent( |
handle, |
@@ -269,7 +286,7 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
content::BackgroundTracingManager::TriggerHandle handle = |
content::BackgroundTracingManager::GetInstance()->RegisterTriggerType( |
- "test"); |
+ "preemptive_test"); |
content::BackgroundTracingManager::GetInstance() |
->InvalidateTriggerHandlesForTesting(); |
@@ -290,7 +307,7 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
} |
} |
-// This tests that reactive mode configs will fail. |
+// This tests that preemptive mode configs will fail. |
IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
DoesNotAllowPreemptiveConfigThatsNotManual) { |
{ |
@@ -316,22 +333,110 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
} |
} |
-// This tests that reactive mode configs will fail. |
+// This tests that reactive mode records and terminates with timeout. |
IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
- DoesNotAllowReactiveConfig) { |
+ ReactiveTimeoutTermination) { |
{ |
SetupBackgroundTracingManager(); |
+ base::RunLoop run_loop; |
BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper( |
- (base::Closure())); |
+ run_loop.QuitClosure()); |
- scoped_ptr<BackgroundTracingConfig> config( |
- new BackgroundTracingReactiveConfig()); |
+ scoped_ptr<BackgroundTracingReactiveConfig> config = |
+ CreateReactiveConfig(); |
- bool result = BackgroundTracingManager::GetInstance()->SetActiveScenario( |
+ BackgroundTracingManager::TriggerHandle handle = |
+ BackgroundTracingManager:: |
+ GetInstance()->RegisterTriggerType("reactive_test"); |
+ |
+ BackgroundTracingManager::GetInstance()->SetActiveScenario( |
config.Pass(), upload_config_wrapper.get_receive_callback(), true); |
- EXPECT_FALSE(result); |
+ BackgroundTracingManager::GetInstance()->WhenIdle( |
+ base::Bind(&DisableScenarioWhenIdle)); |
+ |
+ BackgroundTracingManager::GetInstance()->TriggerNamedEvent( |
+ handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true)); |
+ |
+ BackgroundTracingManager::GetInstance()->FireTimerForTesting(); |
+ |
+ run_loop.Run(); |
+ |
+ EXPECT_TRUE(upload_config_wrapper.get_receive_count() == 1); |
+ } |
+} |
+ |
+// This tests that reactive mode records and terminates with a second trigger. |
+IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
+ ReactiveSecondTriggerTermination) { |
+ { |
+ SetupBackgroundTracingManager(); |
+ |
+ base::RunLoop run_loop; |
+ BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper( |
+ run_loop.QuitClosure()); |
+ |
+ scoped_ptr<BackgroundTracingReactiveConfig> config = |
+ CreateReactiveConfig(); |
+ |
+ BackgroundTracingManager::TriggerHandle handle = |
+ BackgroundTracingManager:: |
+ GetInstance()->RegisterTriggerType("reactive_test"); |
+ |
+ BackgroundTracingManager::GetInstance()->SetActiveScenario( |
+ config.Pass(), upload_config_wrapper.get_receive_callback(), true); |
+ |
+ BackgroundTracingManager::GetInstance()->WhenIdle( |
+ base::Bind(&DisableScenarioWhenIdle)); |
+ |
+ BackgroundTracingManager::GetInstance()->TriggerNamedEvent( |
+ handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true)); |
+ // second trigger to terminate. |
+ BackgroundTracingManager::GetInstance()->TriggerNamedEvent( |
+ handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true)); |
+ |
+ run_loop.Run(); |
+ |
+ EXPECT_TRUE(upload_config_wrapper.get_receive_count() == 1); |
+ } |
+} |
+ |
+// This tests a third trigger in reactive more does not start another trace. |
+IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, |
+ ReactiveThirdTriggerTimeout) { |
+ { |
+ SetupBackgroundTracingManager(); |
+ |
+ base::RunLoop run_loop; |
+ BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper( |
+ run_loop.QuitClosure()); |
+ |
+ scoped_ptr<BackgroundTracingReactiveConfig> config = |
+ CreateReactiveConfig(); |
+ |
+ BackgroundTracingManager::TriggerHandle handle = |
+ BackgroundTracingManager:: |
+ GetInstance()->RegisterTriggerType("reactive_test"); |
+ |
+ BackgroundTracingManager::GetInstance()->SetActiveScenario( |
+ config.Pass(), upload_config_wrapper.get_receive_callback(), true); |
+ |
+ BackgroundTracingManager::GetInstance()->WhenIdle( |
+ base::Bind(&DisableScenarioWhenIdle)); |
+ |
+ BackgroundTracingManager::GetInstance()->TriggerNamedEvent( |
+ handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true)); |
+ // second trigger to terminate. |
+ BackgroundTracingManager::GetInstance()->TriggerNamedEvent( |
+ handle, base::Bind(&StartedFinalizingCallback, base::Closure(), true)); |
+ // third trigger to trigger again, fails as it is still gathering. |
+ BackgroundTracingManager::GetInstance()->TriggerNamedEvent( |
+ handle, base::Bind(&StartedFinalizingCallback, base::Closure(), false)); |
+ |
+ run_loop.Run(); |
+ |
+ EXPECT_TRUE(upload_config_wrapper.get_receive_count() == 1); |
} |
} |