| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |