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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/debug/trace_event_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/debug/trace_event_unittest.h" 5 #include "base/debug/trace_event_unittest.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 801 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 TraceLog::RECORD_UNTIL_FULL); 812 TraceLog::RECORD_UNTIL_FULL);
813 813
814 TraceWithAllMacroVariants(NULL); 814 TraceWithAllMacroVariants(NULL);
815 815
816 EndTraceAndFlush(); 816 EndTraceAndFlush();
817 817
818 ValidateAllTraceMacrosCreatedData(trace_parsed_); 818 ValidateAllTraceMacrosCreatedData(trace_parsed_);
819 } 819 }
820 820
821 class MockEnabledStateChangedObserver : 821 class MockEnabledStateChangedObserver :
822 public base::debug::TraceLog::EnabledStateChangedObserver { 822 public base::debug::TraceLog::EnabledStateObserver {
823 public: 823 public:
824 MOCK_METHOD0(OnTraceLogWillEnable, void()); 824 MOCK_METHOD0(OnTraceLogEnabled, void());
825 MOCK_METHOD0(OnTraceLogWillDisable, void()); 825 MOCK_METHOD0(OnTraceLogDisabled, void());
826 }; 826 };
827 827
828 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { 828 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) {
829 ManualTestSetUp(); 829 ManualTestSetUp();
830 830
831 MockEnabledStateChangedObserver observer; 831 MockEnabledStateChangedObserver observer;
832 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 832 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
833 833
834 EXPECT_CALL(observer, OnTraceLogWillEnable()) 834 EXPECT_CALL(observer, OnTraceLogEnabled())
835 .Times(1); 835 .Times(1);
836 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 836 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
837 TraceLog::RECORD_UNTIL_FULL); 837 TraceLog::RECORD_UNTIL_FULL);
838 testing::Mock::VerifyAndClear(&observer); 838 testing::Mock::VerifyAndClear(&observer);
839 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
839 840
840 // Cleanup. 841 // Cleanup.
841 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 842 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
842 TraceLog::GetInstance()->SetDisabled(); 843 TraceLog::GetInstance()->SetDisabled();
843 } 844 }
844 845
845 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { 846 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) {
846 ManualTestSetUp(); 847 ManualTestSetUp();
847 848
848 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 849 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
849 TraceLog::RECORD_UNTIL_FULL); 850 TraceLog::RECORD_UNTIL_FULL);
850 851
851 testing::StrictMock<MockEnabledStateChangedObserver> observer; 852 testing::StrictMock<MockEnabledStateChangedObserver> observer;
852 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 853 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
853 854
854 EXPECT_CALL(observer, OnTraceLogWillEnable()) 855 EXPECT_CALL(observer, OnTraceLogEnabled())
855 .Times(0); 856 .Times(0);
856 EXPECT_CALL(observer, OnTraceLogWillDisable()) 857 EXPECT_CALL(observer, OnTraceLogDisabled())
857 .Times(0); 858 .Times(0);
858 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 859 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
859 TraceLog::RECORD_UNTIL_FULL); 860 TraceLog::RECORD_UNTIL_FULL);
860 testing::Mock::VerifyAndClear(&observer); 861 testing::Mock::VerifyAndClear(&observer);
862 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
861 863
862 // Cleanup. 864 // Cleanup.
863 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 865 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
864 TraceLog::GetInstance()->SetDisabled(); 866 TraceLog::GetInstance()->SetDisabled();
865 TraceLog::GetInstance()->SetDisabled(); 867 TraceLog::GetInstance()->SetDisabled();
866 } 868 }
867 869
868 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnNestedDisable) { 870 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnNestedDisable) {
869 ManualTestSetUp(); 871 ManualTestSetUp();
870 872
871 CategoryFilter cf_inc_all("*"); 873 CategoryFilter cf_inc_all("*");
872 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); 874 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL);
873 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); 875 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL);
874 876
875 testing::StrictMock<MockEnabledStateChangedObserver> observer; 877 testing::StrictMock<MockEnabledStateChangedObserver> observer;
876 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 878 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
877 879
878 EXPECT_CALL(observer, OnTraceLogWillEnable()) 880 EXPECT_CALL(observer, OnTraceLogEnabled())
879 .Times(0); 881 .Times(0);
880 EXPECT_CALL(observer, OnTraceLogWillDisable()) 882 EXPECT_CALL(observer, OnTraceLogDisabled())
881 .Times(0); 883 .Times(0);
882 TraceLog::GetInstance()->SetDisabled(); 884 TraceLog::GetInstance()->SetDisabled();
883 testing::Mock::VerifyAndClear(&observer); 885 testing::Mock::VerifyAndClear(&observer);
884 886
885 // Cleanup. 887 // Cleanup.
886 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 888 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
887 TraceLog::GetInstance()->SetDisabled(); 889 TraceLog::GetInstance()->SetDisabled();
888 } 890 }
889 891
890 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { 892 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) {
891 ManualTestSetUp(); 893 ManualTestSetUp();
892 894
893 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 895 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
894 TraceLog::RECORD_UNTIL_FULL); 896 TraceLog::RECORD_UNTIL_FULL);
895 897
896 MockEnabledStateChangedObserver observer; 898 MockEnabledStateChangedObserver observer;
897 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 899 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
898 900
899 EXPECT_CALL(observer, OnTraceLogWillDisable()) 901 EXPECT_CALL(observer, OnTraceLogDisabled())
900 .Times(1); 902 .Times(1);
901 TraceLog::GetInstance()->SetDisabled(); 903 TraceLog::GetInstance()->SetDisabled();
902 testing::Mock::VerifyAndClear(&observer); 904 testing::Mock::VerifyAndClear(&observer);
903 905
904 // Cleanup. 906 // Cleanup.
905 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 907 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
906 } 908 }
907 909
910 // Tests the IsEnabled() state of TraceLog changes before callbacks.
911 class AfterStateChangeEnabledStateObserver
912 : public base::debug::TraceLog::EnabledStateObserver {
913 public:
914 AfterStateChangeEnabledStateObserver() {}
915 virtual ~AfterStateChangeEnabledStateObserver() {}
916
917 // base::debug::TraceLog::EnabledStateObserver overrides:
918 virtual void OnTraceLogEnabled() OVERRIDE {
919 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
920 }
921
922 virtual void OnTraceLogDisabled() OVERRIDE {
923 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled());
924 }
925 };
926
927 TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) {
928 ManualTestSetUp();
929
930 AfterStateChangeEnabledStateObserver observer;
931 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
932
933 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
934 TraceLog::RECORD_UNTIL_FULL);
935 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
936
937 TraceLog::GetInstance()->SetDisabled();
938 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled());
939
940 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
941 }
942
943 // Tests that a state observer can remove itself during a callback.
944 class SelfRemovingEnabledStateObserver
945 : public base::debug::TraceLog::EnabledStateObserver {
946 public:
947 SelfRemovingEnabledStateObserver() {}
948 virtual ~SelfRemovingEnabledStateObserver() {}
949
950 // base::debug::TraceLog::EnabledStateObserver overrides:
951 virtual void OnTraceLogEnabled() OVERRIDE {}
952
953 virtual void OnTraceLogDisabled() OVERRIDE {
954 TraceLog::GetInstance()->RemoveEnabledStateObserver(this);
955 }
956 };
957
958 TEST_F(TraceEventTestFixture, SelfRemovingObserver) {
959 ManualTestSetUp();
960 ASSERT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
961
962 SelfRemovingEnabledStateObserver observer;
963 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
964 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest());
965
966 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
967 TraceLog::RECORD_UNTIL_FULL);
968 TraceLog::GetInstance()->SetDisabled();
969 // The observer removed itself on disable.
970 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
971 }
972
908 bool IsNewTrace() { 973 bool IsNewTrace() {
909 bool is_new_trace; 974 bool is_new_trace;
910 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); 975 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace);
911 return is_new_trace; 976 return is_new_trace;
912 } 977 }
913 978
914 TEST_F(TraceEventTestFixture, NewTraceRecording) { 979 TEST_F(TraceEventTestFixture, NewTraceRecording) {
915 ManualTestSetUp(); 980 ManualTestSetUp();
916 ASSERT_FALSE(IsNewTrace()); 981 ASSERT_FALSE(IsNewTrace());
917 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 982 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
(...skipping 1109 matching lines...) Expand 10 before | Expand all | Expand 10 after
2027 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( 2092 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2028 " bad_category ")); 2093 " bad_category "));
2029 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( 2094 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2030 "")); 2095 ""));
2031 EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( 2096 EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2032 "good_category")); 2097 "good_category"));
2033 } 2098 }
2034 2099
2035 } // namespace debug 2100 } // namespace debug
2036 } // namespace base 2101 } // namespace base
OLDNEW
« 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