Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1937)

Unified Diff: base/debug/trace_event_unittest.cc

Issue 16829002: Notify TraceLog observers outside of the lock (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/debug/trace_event_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/trace_event_unittest.cc
diff --git a/base/debug/trace_event_unittest.cc b/base/debug/trace_event_unittest.cc
index d2d38c719face94018372a96c05b9f3a0d77ff0a..8685ceb3e361e7050b1805fb7237347f39ac3b37 100644
--- a/base/debug/trace_event_unittest.cc
+++ b/base/debug/trace_event_unittest.cc
@@ -819,10 +819,10 @@ TEST_F(TraceEventTestFixture, DataCaptured) {
}
class MockEnabledStateChangedObserver :
- public base::debug::TraceLog::EnabledStateChangedObserver {
+ public base::debug::TraceLog::EnabledStateObserver {
public:
- MOCK_METHOD0(OnTraceLogWillEnable, void());
- MOCK_METHOD0(OnTraceLogWillDisable, void());
+ MOCK_METHOD0(OnTraceLogEnabled, void());
+ MOCK_METHOD0(OnTraceLogDisabled, void());
};
TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) {
@@ -831,11 +831,12 @@ TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) {
MockEnabledStateChangedObserver observer;
TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
- EXPECT_CALL(observer, OnTraceLogWillEnable())
+ EXPECT_CALL(observer, OnTraceLogEnabled())
.Times(1);
TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
TraceLog::RECORD_UNTIL_FULL);
testing::Mock::VerifyAndClear(&observer);
+ EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
// Cleanup.
TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
@@ -851,13 +852,14 @@ TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) {
testing::StrictMock<MockEnabledStateChangedObserver> observer;
TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
- EXPECT_CALL(observer, OnTraceLogWillEnable())
+ EXPECT_CALL(observer, OnTraceLogEnabled())
.Times(0);
- EXPECT_CALL(observer, OnTraceLogWillDisable())
+ EXPECT_CALL(observer, OnTraceLogDisabled())
.Times(0);
TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
TraceLog::RECORD_UNTIL_FULL);
testing::Mock::VerifyAndClear(&observer);
+ EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
// Cleanup.
TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
@@ -875,9 +877,9 @@ TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnNestedDisable) {
testing::StrictMock<MockEnabledStateChangedObserver> observer;
TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
- EXPECT_CALL(observer, OnTraceLogWillEnable())
+ EXPECT_CALL(observer, OnTraceLogEnabled())
.Times(0);
- EXPECT_CALL(observer, OnTraceLogWillDisable())
+ EXPECT_CALL(observer, OnTraceLogDisabled())
.Times(0);
TraceLog::GetInstance()->SetDisabled();
testing::Mock::VerifyAndClear(&observer);
@@ -896,7 +898,7 @@ TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) {
MockEnabledStateChangedObserver observer;
TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
- EXPECT_CALL(observer, OnTraceLogWillDisable())
+ EXPECT_CALL(observer, OnTraceLogDisabled())
.Times(1);
TraceLog::GetInstance()->SetDisabled();
testing::Mock::VerifyAndClear(&observer);
@@ -905,6 +907,69 @@ TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) {
TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
}
+// Tests the IsEnabled() state of TraceLog changes before callbacks.
+class AfterStateChangeEnabledStateObserver
+ : public base::debug::TraceLog::EnabledStateObserver {
+ public:
+ AfterStateChangeEnabledStateObserver() {}
+ virtual ~AfterStateChangeEnabledStateObserver() {}
+
+ // base::debug::TraceLog::EnabledStateObserver overrides:
+ virtual void OnTraceLogEnabled() OVERRIDE {
+ EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
+ }
+
+ virtual void OnTraceLogDisabled() OVERRIDE {
+ EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled());
+ }
+};
+
+TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) {
+ ManualTestSetUp();
+
+ AfterStateChangeEnabledStateObserver observer;
+ TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
+
+ TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
+ TraceLog::RECORD_UNTIL_FULL);
+ EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
+
+ TraceLog::GetInstance()->SetDisabled();
+ EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled());
+
+ TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
+}
+
+// Tests that a state observer can remove itself during a callback.
+class SelfRemovingEnabledStateObserver
+ : public base::debug::TraceLog::EnabledStateObserver {
+ public:
+ SelfRemovingEnabledStateObserver() {}
+ virtual ~SelfRemovingEnabledStateObserver() {}
+
+ // base::debug::TraceLog::EnabledStateObserver overrides:
+ virtual void OnTraceLogEnabled() OVERRIDE {}
+
+ virtual void OnTraceLogDisabled() OVERRIDE {
+ TraceLog::GetInstance()->RemoveEnabledStateObserver(this);
+ }
+};
+
+TEST_F(TraceEventTestFixture, SelfRemovingObserver) {
+ ManualTestSetUp();
+ ASSERT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
+
+ SelfRemovingEnabledStateObserver observer;
+ TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
+ EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest());
+
+ TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
+ TraceLog::RECORD_UNTIL_FULL);
+ TraceLog::GetInstance()->SetDisabled();
+ // The observer removed itself on disable.
+ EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
+}
+
bool IsNewTrace() {
bool is_new_trace;
TRACE_EVENT_IS_NEW_TRACE(&is_new_trace);
« no previous file with comments | « base/debug/trace_event_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698