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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 }; | 42 }; |
43 | 43 |
44 const int kThreadId = 42; | 44 const int kThreadId = 42; |
45 const int kAsyncId = 5; | 45 const int kAsyncId = 5; |
46 const char kAsyncIdStr[] = "0x5"; | 46 const char kAsyncIdStr[] = "0x5"; |
47 const int kAsyncId2 = 6; | 47 const int kAsyncId2 = 6; |
48 const char kAsyncId2Str[] = "0x6"; | 48 const char kAsyncId2Str[] = "0x6"; |
49 | 49 |
50 class TraceEventTestFixture : public testing::Test { | 50 class TraceEventTestFixture : public testing::Test { |
51 public: | 51 public: |
52 // This fixture does not use SetUp() because the fixture must be manually set | |
53 // up multiple times when testing AtExit. Use ManualTestSetUp for this. | |
54 void ManualTestSetUp(); | |
55 void OnTraceDataCollected( | 52 void OnTraceDataCollected( |
56 const scoped_refptr<base::RefCountedString>& events_str); | 53 const scoped_refptr<base::RefCountedString>& events_str); |
57 void OnTraceNotification(int notification) { | 54 void OnTraceNotification(int notification) { |
58 if (notification & TraceLog::EVENT_WATCH_NOTIFICATION) | 55 if (notification & TraceLog::EVENT_WATCH_NOTIFICATION) |
59 ++event_watch_notification_; | 56 ++event_watch_notification_; |
60 notifications_received_ |= notification; | 57 notifications_received_ |= notification; |
61 } | 58 } |
62 DictionaryValue* FindMatchingTraceEntry(const JsonKeyValue* key_values); | 59 DictionaryValue* FindMatchingTraceEntry(const JsonKeyValue* key_values); |
63 DictionaryValue* FindNamePhase(const char* name, const char* phase); | 60 DictionaryValue* FindNamePhase(const char* name, const char* phase); |
64 DictionaryValue* FindNamePhaseKeyValue(const char* name, | 61 DictionaryValue* FindNamePhaseKeyValue(const char* name, |
(...skipping 25 matching lines...) Expand all Loading... |
90 TraceLog::GetInstance()->SetDisabled(); | 87 TraceLog::GetInstance()->SetDisabled(); |
91 TraceLog::GetInstance()->Flush( | 88 TraceLog::GetInstance()->Flush( |
92 base::Bind(&TraceEventTestFixture::OnTraceDataCollected, | 89 base::Bind(&TraceEventTestFixture::OnTraceDataCollected, |
93 base::Unretained(this))); | 90 base::Unretained(this))); |
94 } | 91 } |
95 | 92 |
96 virtual void SetUp() OVERRIDE { | 93 virtual void SetUp() OVERRIDE { |
97 const char* name = PlatformThread::GetName(); | 94 const char* name = PlatformThread::GetName(); |
98 old_thread_name_ = name ? strdup(name) : NULL; | 95 old_thread_name_ = name ? strdup(name) : NULL; |
99 notifications_received_ = 0; | 96 notifications_received_ = 0; |
| 97 |
| 98 TraceLog::DeleteForTesting(); |
| 99 TraceLog* tracelog = TraceLog::GetInstance(); |
| 100 ASSERT_TRUE(tracelog); |
| 101 ASSERT_FALSE(tracelog->IsEnabled()); |
| 102 tracelog->SetNotificationCallback( |
| 103 base::Bind(&TraceEventTestFixture::OnTraceNotification, |
| 104 base::Unretained(this))); |
| 105 trace_buffer_.SetOutputCallback(json_output_.GetCallback()); |
100 } | 106 } |
101 virtual void TearDown() OVERRIDE { | 107 virtual void TearDown() OVERRIDE { |
102 if (TraceLog::GetInstance()) | 108 if (TraceLog::GetInstance()) |
103 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); | 109 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); |
104 PlatformThread::SetName(old_thread_name_ ? old_thread_name_ : ""); | 110 PlatformThread::SetName(old_thread_name_ ? old_thread_name_ : ""); |
105 free(old_thread_name_); | 111 free(old_thread_name_); |
106 old_thread_name_ = NULL; | 112 old_thread_name_ = NULL; |
| 113 // We want our singleton torn down after each test. |
| 114 TraceLog::DeleteForTesting(); |
107 } | 115 } |
108 | 116 |
109 char* old_thread_name_; | 117 char* old_thread_name_; |
110 ListValue trace_parsed_; | 118 ListValue trace_parsed_; |
111 base::debug::TraceResultBuffer trace_buffer_; | 119 base::debug::TraceResultBuffer trace_buffer_; |
112 base::debug::TraceResultBuffer::SimpleOutput json_output_; | 120 base::debug::TraceResultBuffer::SimpleOutput json_output_; |
113 int event_watch_notification_; | 121 int event_watch_notification_; |
114 int notifications_received_; | 122 int notifications_received_; |
115 | 123 |
116 private: | 124 private: |
117 // We want our singleton torn down after each test. | 125 // We want our singleton torn down after each test. |
118 ShadowingAtExitManager at_exit_manager_; | 126 ShadowingAtExitManager at_exit_manager_; |
119 Lock lock_; | 127 Lock lock_; |
120 }; | 128 }; |
121 | 129 |
122 void TraceEventTestFixture::ManualTestSetUp() { | |
123 TraceLog::DeleteForTesting(); | |
124 TraceLog::Resurrect(); | |
125 TraceLog* tracelog = TraceLog::GetInstance(); | |
126 ASSERT_TRUE(tracelog); | |
127 ASSERT_FALSE(tracelog->IsEnabled()); | |
128 tracelog->SetNotificationCallback( | |
129 base::Bind(&TraceEventTestFixture::OnTraceNotification, | |
130 base::Unretained(this))); | |
131 trace_buffer_.SetOutputCallback(json_output_.GetCallback()); | |
132 } | |
133 | |
134 void TraceEventTestFixture::OnTraceDataCollected( | 130 void TraceEventTestFixture::OnTraceDataCollected( |
135 const scoped_refptr<base::RefCountedString>& events_str) { | 131 const scoped_refptr<base::RefCountedString>& events_str) { |
136 AutoLock lock(lock_); | 132 AutoLock lock(lock_); |
137 json_output_.json_output.clear(); | 133 json_output_.json_output.clear(); |
138 trace_buffer_.Start(); | 134 trace_buffer_.Start(); |
139 trace_buffer_.AddFragment(events_str->data()); | 135 trace_buffer_.AddFragment(events_str->data()); |
140 trace_buffer_.Finish(); | 136 trace_buffer_.Finish(); |
141 | 137 |
142 scoped_ptr<Value> root; | 138 scoped_ptr<Value> root; |
143 root.reset(base::JSONReader::Read(json_output_.json_output, | 139 root.reset(base::JSONReader::Read(json_output_.json_output, |
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 | 796 |
801 void HighResSleepForTraceTest(base::TimeDelta elapsed) { | 797 void HighResSleepForTraceTest(base::TimeDelta elapsed) { |
802 base::TimeTicks end_time = base::TimeTicks::HighResNow() + elapsed; | 798 base::TimeTicks end_time = base::TimeTicks::HighResNow() + elapsed; |
803 do { | 799 do { |
804 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); | 800 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); |
805 } while (base::TimeTicks::HighResNow() < end_time); | 801 } while (base::TimeTicks::HighResNow() < end_time); |
806 } | 802 } |
807 | 803 |
808 // Simple Test for emitting data and validating it was received. | 804 // Simple Test for emitting data and validating it was received. |
809 TEST_F(TraceEventTestFixture, DataCaptured) { | 805 TEST_F(TraceEventTestFixture, DataCaptured) { |
810 ManualTestSetUp(); | |
811 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 806 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
812 TraceLog::RECORD_UNTIL_FULL); | 807 TraceLog::RECORD_UNTIL_FULL); |
813 | 808 |
814 TraceWithAllMacroVariants(NULL); | 809 TraceWithAllMacroVariants(NULL); |
815 | 810 |
816 EndTraceAndFlush(); | 811 EndTraceAndFlush(); |
817 | 812 |
818 ValidateAllTraceMacrosCreatedData(trace_parsed_); | 813 ValidateAllTraceMacrosCreatedData(trace_parsed_); |
819 } | 814 } |
820 | 815 |
821 class MockEnabledStateChangedObserver : | 816 class MockEnabledStateChangedObserver : |
822 public base::debug::TraceLog::EnabledStateObserver { | 817 public base::debug::TraceLog::EnabledStateObserver { |
823 public: | 818 public: |
824 MOCK_METHOD0(OnTraceLogEnabled, void()); | 819 MOCK_METHOD0(OnTraceLogEnabled, void()); |
825 MOCK_METHOD0(OnTraceLogDisabled, void()); | 820 MOCK_METHOD0(OnTraceLogDisabled, void()); |
826 }; | 821 }; |
827 | 822 |
828 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { | 823 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { |
829 ManualTestSetUp(); | |
830 | |
831 MockEnabledStateChangedObserver observer; | 824 MockEnabledStateChangedObserver observer; |
832 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 825 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
833 | 826 |
834 EXPECT_CALL(observer, OnTraceLogEnabled()) | 827 EXPECT_CALL(observer, OnTraceLogEnabled()) |
835 .Times(1); | 828 .Times(1); |
836 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 829 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
837 TraceLog::RECORD_UNTIL_FULL); | 830 TraceLog::RECORD_UNTIL_FULL); |
838 testing::Mock::VerifyAndClear(&observer); | 831 testing::Mock::VerifyAndClear(&observer); |
839 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 832 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
840 | 833 |
841 // Cleanup. | 834 // Cleanup. |
842 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 835 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
843 TraceLog::GetInstance()->SetDisabled(); | 836 TraceLog::GetInstance()->SetDisabled(); |
844 } | 837 } |
845 | 838 |
846 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { | 839 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { |
847 ManualTestSetUp(); | |
848 | |
849 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 840 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
850 TraceLog::RECORD_UNTIL_FULL); | 841 TraceLog::RECORD_UNTIL_FULL); |
851 | 842 |
852 testing::StrictMock<MockEnabledStateChangedObserver> observer; | 843 testing::StrictMock<MockEnabledStateChangedObserver> observer; |
853 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 844 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
854 | 845 |
855 EXPECT_CALL(observer, OnTraceLogEnabled()) | 846 EXPECT_CALL(observer, OnTraceLogEnabled()) |
856 .Times(0); | 847 .Times(0); |
857 EXPECT_CALL(observer, OnTraceLogDisabled()) | 848 EXPECT_CALL(observer, OnTraceLogDisabled()) |
858 .Times(0); | 849 .Times(0); |
859 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 850 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
860 TraceLog::RECORD_UNTIL_FULL); | 851 TraceLog::RECORD_UNTIL_FULL); |
861 testing::Mock::VerifyAndClear(&observer); | 852 testing::Mock::VerifyAndClear(&observer); |
862 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 853 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
863 | 854 |
864 // Cleanup. | 855 // Cleanup. |
865 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 856 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
866 TraceLog::GetInstance()->SetDisabled(); | 857 TraceLog::GetInstance()->SetDisabled(); |
867 TraceLog::GetInstance()->SetDisabled(); | 858 TraceLog::GetInstance()->SetDisabled(); |
868 } | 859 } |
869 | 860 |
870 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnNestedDisable) { | 861 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnNestedDisable) { |
871 ManualTestSetUp(); | |
872 | |
873 CategoryFilter cf_inc_all("*"); | 862 CategoryFilter cf_inc_all("*"); |
874 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); | 863 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); |
875 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); | 864 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); |
876 | 865 |
877 testing::StrictMock<MockEnabledStateChangedObserver> observer; | 866 testing::StrictMock<MockEnabledStateChangedObserver> observer; |
878 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 867 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
879 | 868 |
880 EXPECT_CALL(observer, OnTraceLogEnabled()) | 869 EXPECT_CALL(observer, OnTraceLogEnabled()) |
881 .Times(0); | 870 .Times(0); |
882 EXPECT_CALL(observer, OnTraceLogDisabled()) | 871 EXPECT_CALL(observer, OnTraceLogDisabled()) |
883 .Times(0); | 872 .Times(0); |
884 TraceLog::GetInstance()->SetDisabled(); | 873 TraceLog::GetInstance()->SetDisabled(); |
885 testing::Mock::VerifyAndClear(&observer); | 874 testing::Mock::VerifyAndClear(&observer); |
886 | 875 |
887 // Cleanup. | 876 // Cleanup. |
888 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 877 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
889 TraceLog::GetInstance()->SetDisabled(); | 878 TraceLog::GetInstance()->SetDisabled(); |
890 } | 879 } |
891 | 880 |
892 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { | 881 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { |
893 ManualTestSetUp(); | |
894 | |
895 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 882 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
896 TraceLog::RECORD_UNTIL_FULL); | 883 TraceLog::RECORD_UNTIL_FULL); |
897 | 884 |
898 MockEnabledStateChangedObserver observer; | 885 MockEnabledStateChangedObserver observer; |
899 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 886 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
900 | 887 |
901 EXPECT_CALL(observer, OnTraceLogDisabled()) | 888 EXPECT_CALL(observer, OnTraceLogDisabled()) |
902 .Times(1); | 889 .Times(1); |
903 TraceLog::GetInstance()->SetDisabled(); | 890 TraceLog::GetInstance()->SetDisabled(); |
904 testing::Mock::VerifyAndClear(&observer); | 891 testing::Mock::VerifyAndClear(&observer); |
(...skipping 13 matching lines...) Expand all Loading... |
918 virtual void OnTraceLogEnabled() OVERRIDE { | 905 virtual void OnTraceLogEnabled() OVERRIDE { |
919 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 906 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
920 } | 907 } |
921 | 908 |
922 virtual void OnTraceLogDisabled() OVERRIDE { | 909 virtual void OnTraceLogDisabled() OVERRIDE { |
923 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); | 910 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); |
924 } | 911 } |
925 }; | 912 }; |
926 | 913 |
927 TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) { | 914 TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) { |
928 ManualTestSetUp(); | |
929 | |
930 AfterStateChangeEnabledStateObserver observer; | 915 AfterStateChangeEnabledStateObserver observer; |
931 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 916 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
932 | 917 |
933 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 918 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
934 TraceLog::RECORD_UNTIL_FULL); | 919 TraceLog::RECORD_UNTIL_FULL); |
935 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 920 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
936 | 921 |
937 TraceLog::GetInstance()->SetDisabled(); | 922 TraceLog::GetInstance()->SetDisabled(); |
938 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); | 923 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); |
939 | 924 |
940 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 925 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
941 } | 926 } |
942 | 927 |
943 // Tests that a state observer can remove itself during a callback. | 928 // Tests that a state observer can remove itself during a callback. |
944 class SelfRemovingEnabledStateObserver | 929 class SelfRemovingEnabledStateObserver |
945 : public base::debug::TraceLog::EnabledStateObserver { | 930 : public base::debug::TraceLog::EnabledStateObserver { |
946 public: | 931 public: |
947 SelfRemovingEnabledStateObserver() {} | 932 SelfRemovingEnabledStateObserver() {} |
948 virtual ~SelfRemovingEnabledStateObserver() {} | 933 virtual ~SelfRemovingEnabledStateObserver() {} |
949 | 934 |
950 // base::debug::TraceLog::EnabledStateObserver overrides: | 935 // base::debug::TraceLog::EnabledStateObserver overrides: |
951 virtual void OnTraceLogEnabled() OVERRIDE {} | 936 virtual void OnTraceLogEnabled() OVERRIDE {} |
952 | 937 |
953 virtual void OnTraceLogDisabled() OVERRIDE { | 938 virtual void OnTraceLogDisabled() OVERRIDE { |
954 TraceLog::GetInstance()->RemoveEnabledStateObserver(this); | 939 TraceLog::GetInstance()->RemoveEnabledStateObserver(this); |
955 } | 940 } |
956 }; | 941 }; |
957 | 942 |
958 TEST_F(TraceEventTestFixture, SelfRemovingObserver) { | 943 TEST_F(TraceEventTestFixture, SelfRemovingObserver) { |
959 ManualTestSetUp(); | |
960 ASSERT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); | 944 ASSERT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); |
961 | 945 |
962 SelfRemovingEnabledStateObserver observer; | 946 SelfRemovingEnabledStateObserver observer; |
963 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 947 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
964 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest()); | 948 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest()); |
965 | 949 |
966 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 950 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
967 TraceLog::RECORD_UNTIL_FULL); | 951 TraceLog::RECORD_UNTIL_FULL); |
968 TraceLog::GetInstance()->SetDisabled(); | 952 TraceLog::GetInstance()->SetDisabled(); |
969 // The observer removed itself on disable. | 953 // The observer removed itself on disable. |
970 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); | 954 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); |
971 } | 955 } |
972 | 956 |
973 bool IsNewTrace() { | 957 bool IsNewTrace() { |
974 bool is_new_trace; | 958 bool is_new_trace; |
975 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); | 959 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); |
976 return is_new_trace; | 960 return is_new_trace; |
977 } | 961 } |
978 | 962 |
979 TEST_F(TraceEventTestFixture, NewTraceRecording) { | 963 TEST_F(TraceEventTestFixture, NewTraceRecording) { |
980 ManualTestSetUp(); | |
981 ASSERT_FALSE(IsNewTrace()); | 964 ASSERT_FALSE(IsNewTrace()); |
982 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 965 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
983 TraceLog::RECORD_UNTIL_FULL); | 966 TraceLog::RECORD_UNTIL_FULL); |
984 // First call to IsNewTrace() should succeed. But, the second shouldn't. | 967 // First call to IsNewTrace() should succeed. But, the second shouldn't. |
985 ASSERT_TRUE(IsNewTrace()); | 968 ASSERT_TRUE(IsNewTrace()); |
986 ASSERT_FALSE(IsNewTrace()); | 969 ASSERT_FALSE(IsNewTrace()); |
987 EndTraceAndFlush(); | 970 EndTraceAndFlush(); |
988 | 971 |
989 // IsNewTrace() should definitely be false now. | 972 // IsNewTrace() should definitely be false now. |
990 ASSERT_FALSE(IsNewTrace()); | 973 ASSERT_FALSE(IsNewTrace()); |
991 | 974 |
992 // Start another trace. IsNewTrace() should become true again, briefly, as | 975 // Start another trace. IsNewTrace() should become true again, briefly, as |
993 // before. | 976 // before. |
994 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 977 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
995 TraceLog::RECORD_UNTIL_FULL); | 978 TraceLog::RECORD_UNTIL_FULL); |
996 ASSERT_TRUE(IsNewTrace()); | 979 ASSERT_TRUE(IsNewTrace()); |
997 ASSERT_FALSE(IsNewTrace()); | 980 ASSERT_FALSE(IsNewTrace()); |
998 | 981 |
999 // Cleanup. | 982 // Cleanup. |
1000 EndTraceAndFlush(); | 983 EndTraceAndFlush(); |
1001 } | 984 } |
1002 | 985 |
1003 | 986 |
1004 // Test that categories work. | 987 // Test that categories work. |
1005 TEST_F(TraceEventTestFixture, Categories) { | 988 TEST_F(TraceEventTestFixture, Categories) { |
1006 ManualTestSetUp(); | |
1007 | |
1008 // Test that categories that are used can be retrieved whether trace was | 989 // Test that categories that are used can be retrieved whether trace was |
1009 // enabled or disabled when the trace event was encountered. | 990 // enabled or disabled when the trace event was encountered. |
1010 TRACE_EVENT_INSTANT0("c1", "name", TRACE_EVENT_SCOPE_THREAD); | 991 TRACE_EVENT_INSTANT0("c1", "name", TRACE_EVENT_SCOPE_THREAD); |
1011 TRACE_EVENT_INSTANT0("c2", "name", TRACE_EVENT_SCOPE_THREAD); | 992 TRACE_EVENT_INSTANT0("c2", "name", TRACE_EVENT_SCOPE_THREAD); |
1012 BeginTrace(); | 993 BeginTrace(); |
1013 TRACE_EVENT_INSTANT0("c3", "name", TRACE_EVENT_SCOPE_THREAD); | 994 TRACE_EVENT_INSTANT0("c3", "name", TRACE_EVENT_SCOPE_THREAD); |
1014 TRACE_EVENT_INSTANT0("c4", "name", TRACE_EVENT_SCOPE_THREAD); | 995 TRACE_EVENT_INSTANT0("c4", "name", TRACE_EVENT_SCOPE_THREAD); |
1015 // Category groups containing more than one category. | 996 // Category groups containing more than one category. |
1016 TRACE_EVENT_INSTANT0("c5,c6", "name", TRACE_EVENT_SCOPE_THREAD); | 997 TRACE_EVENT_INSTANT0("c5,c6", "name", TRACE_EVENT_SCOPE_THREAD); |
1017 TRACE_EVENT_INSTANT0("c7,c8", "name", TRACE_EVENT_SCOPE_THREAD); | 998 TRACE_EVENT_INSTANT0("c7,c8", "name", TRACE_EVENT_SCOPE_THREAD); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1142 EndTraceAndFlush(); | 1123 EndTraceAndFlush(); |
1143 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_bla_end")); | 1124 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_bla_end")); |
1144 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); | 1125 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); |
1145 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); | 1126 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); |
1146 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); | 1127 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); |
1147 } | 1128 } |
1148 | 1129 |
1149 | 1130 |
1150 // Test EVENT_WATCH_NOTIFICATION | 1131 // Test EVENT_WATCH_NOTIFICATION |
1151 TEST_F(TraceEventTestFixture, EventWatchNotification) { | 1132 TEST_F(TraceEventTestFixture, EventWatchNotification) { |
1152 ManualTestSetUp(); | |
1153 | |
1154 // Basic one occurrence. | 1133 // Basic one occurrence. |
1155 BeginTrace(); | 1134 BeginTrace(); |
1156 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); | 1135 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); |
1157 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); | 1136 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); |
1158 EndTraceAndFlush(); | 1137 EndTraceAndFlush(); |
1159 EXPECT_EQ(event_watch_notification_, 1); | 1138 EXPECT_EQ(event_watch_notification_, 1); |
1160 | 1139 |
1161 // Basic one occurrence before Set. | 1140 // Basic one occurrence before Set. |
1162 BeginTrace(); | 1141 BeginTrace(); |
1163 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); | 1142 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1201 BeginTrace(); | 1180 BeginTrace(); |
1202 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); | 1181 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); |
1203 TraceLog::GetInstance()->CancelWatchEvent(); | 1182 TraceLog::GetInstance()->CancelWatchEvent(); |
1204 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); | 1183 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); |
1205 EndTraceAndFlush(); | 1184 EndTraceAndFlush(); |
1206 EXPECT_EQ(event_watch_notification_, 0); | 1185 EXPECT_EQ(event_watch_notification_, 0); |
1207 } | 1186 } |
1208 | 1187 |
1209 // Test ASYNC_BEGIN/END events | 1188 // Test ASYNC_BEGIN/END events |
1210 TEST_F(TraceEventTestFixture, AsyncBeginEndEvents) { | 1189 TEST_F(TraceEventTestFixture, AsyncBeginEndEvents) { |
1211 ManualTestSetUp(); | |
1212 BeginTrace(); | 1190 BeginTrace(); |
1213 | 1191 |
1214 unsigned long long id = 0xfeedbeeffeedbeefull; | 1192 unsigned long long id = 0xfeedbeeffeedbeefull; |
1215 TRACE_EVENT_ASYNC_BEGIN0( "cat", "name1", id); | 1193 TRACE_EVENT_ASYNC_BEGIN0( "cat", "name1", id); |
1216 TRACE_EVENT_ASYNC_STEP0( "cat", "name1", id, "step1"); | 1194 TRACE_EVENT_ASYNC_STEP0( "cat", "name1", id, "step1"); |
1217 TRACE_EVENT_ASYNC_END0("cat", "name1", id); | 1195 TRACE_EVENT_ASYNC_END0("cat", "name1", id); |
1218 TRACE_EVENT_BEGIN0( "cat", "name2"); | 1196 TRACE_EVENT_BEGIN0( "cat", "name2"); |
1219 TRACE_EVENT_ASYNC_BEGIN0( "cat", "name3", 0); | 1197 TRACE_EVENT_ASYNC_BEGIN0( "cat", "name3", 0); |
1220 | 1198 |
1221 EndTraceAndFlush(); | 1199 EndTraceAndFlush(); |
1222 | 1200 |
1223 EXPECT_TRUE(FindNamePhase("name1", "S")); | 1201 EXPECT_TRUE(FindNamePhase("name1", "S")); |
1224 EXPECT_TRUE(FindNamePhase("name1", "T")); | 1202 EXPECT_TRUE(FindNamePhase("name1", "T")); |
1225 EXPECT_TRUE(FindNamePhase("name1", "F")); | 1203 EXPECT_TRUE(FindNamePhase("name1", "F")); |
1226 | 1204 |
1227 std::string id_str; | 1205 std::string id_str; |
1228 StringAppendF(&id_str, "0x%llx", id); | 1206 StringAppendF(&id_str, "0x%llx", id); |
1229 | 1207 |
1230 EXPECT_TRUE(FindNamePhaseKeyValue("name1", "S", "id", id_str.c_str())); | 1208 EXPECT_TRUE(FindNamePhaseKeyValue("name1", "S", "id", id_str.c_str())); |
1231 EXPECT_TRUE(FindNamePhaseKeyValue("name1", "T", "id", id_str.c_str())); | 1209 EXPECT_TRUE(FindNamePhaseKeyValue("name1", "T", "id", id_str.c_str())); |
1232 EXPECT_TRUE(FindNamePhaseKeyValue("name1", "F", "id", id_str.c_str())); | 1210 EXPECT_TRUE(FindNamePhaseKeyValue("name1", "F", "id", id_str.c_str())); |
1233 EXPECT_TRUE(FindNamePhaseKeyValue("name3", "S", "id", "0x0")); | 1211 EXPECT_TRUE(FindNamePhaseKeyValue("name3", "S", "id", "0x0")); |
1234 | 1212 |
1235 // BEGIN events should not have id | 1213 // BEGIN events should not have id |
1236 EXPECT_FALSE(FindNamePhaseKeyValue("name2", "B", "id", "0")); | 1214 EXPECT_FALSE(FindNamePhaseKeyValue("name2", "B", "id", "0")); |
1237 } | 1215 } |
1238 | 1216 |
1239 // Test ASYNC_BEGIN/END events | 1217 // Test ASYNC_BEGIN/END events |
1240 TEST_F(TraceEventTestFixture, AsyncBeginEndPointerMangling) { | 1218 TEST_F(TraceEventTestFixture, AsyncBeginEndPointerMangling) { |
1241 ManualTestSetUp(); | |
1242 | |
1243 void* ptr = this; | 1219 void* ptr = this; |
1244 | 1220 |
1245 TraceLog::GetInstance()->SetProcessID(100); | 1221 TraceLog::GetInstance()->SetProcessID(100); |
1246 BeginTrace(); | 1222 BeginTrace(); |
1247 TRACE_EVENT_ASYNC_BEGIN0( "cat", "name1", ptr); | 1223 TRACE_EVENT_ASYNC_BEGIN0( "cat", "name1", ptr); |
1248 TRACE_EVENT_ASYNC_BEGIN0( "cat", "name2", ptr); | 1224 TRACE_EVENT_ASYNC_BEGIN0( "cat", "name2", ptr); |
1249 EndTraceAndFlush(); | 1225 EndTraceAndFlush(); |
1250 | 1226 |
1251 TraceLog::GetInstance()->SetProcessID(200); | 1227 TraceLog::GetInstance()->SetProcessID(200); |
1252 BeginTrace(); | 1228 BeginTrace(); |
(...skipping 17 matching lines...) Expand all Loading... |
1270 ASSERT_TRUE(value->GetAsString(&async_begin2_id_str)); | 1246 ASSERT_TRUE(value->GetAsString(&async_begin2_id_str)); |
1271 ASSERT_TRUE(async_end->Get("id", &value)); | 1247 ASSERT_TRUE(async_end->Get("id", &value)); |
1272 ASSERT_TRUE(value->GetAsString(&async_end_id_str)); | 1248 ASSERT_TRUE(value->GetAsString(&async_end_id_str)); |
1273 | 1249 |
1274 EXPECT_STREQ(async_begin_id_str.c_str(), async_begin2_id_str.c_str()); | 1250 EXPECT_STREQ(async_begin_id_str.c_str(), async_begin2_id_str.c_str()); |
1275 EXPECT_STRNE(async_begin_id_str.c_str(), async_end_id_str.c_str()); | 1251 EXPECT_STRNE(async_begin_id_str.c_str(), async_end_id_str.c_str()); |
1276 } | 1252 } |
1277 | 1253 |
1278 // Test that static strings are not copied. | 1254 // Test that static strings are not copied. |
1279 TEST_F(TraceEventTestFixture, StaticStringVsString) { | 1255 TEST_F(TraceEventTestFixture, StaticStringVsString) { |
1280 ManualTestSetUp(); | |
1281 TraceLog* tracer = TraceLog::GetInstance(); | 1256 TraceLog* tracer = TraceLog::GetInstance(); |
1282 // Make sure old events are flushed: | 1257 // Make sure old events are flushed: |
1283 EndTraceAndFlush(); | 1258 EndTraceAndFlush(); |
1284 EXPECT_EQ(0u, tracer->GetEventsSize()); | 1259 EXPECT_EQ(0u, tracer->GetEventsSize()); |
1285 | 1260 |
1286 { | 1261 { |
1287 BeginTrace(); | 1262 BeginTrace(); |
1288 // Test that string arguments are copied. | 1263 // Test that string arguments are copied. |
1289 TRACE_EVENT2("cat", "name1", | 1264 TRACE_EVENT2("cat", "name1", |
1290 "arg1", std::string("argval"), "arg2", std::string("argval")); | 1265 "arg1", std::string("argval"), "arg2", std::string("argval")); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1323 EXPECT_STREQ("name1", event1.name()); | 1298 EXPECT_STREQ("name1", event1.name()); |
1324 EXPECT_STREQ("name2", event2.name()); | 1299 EXPECT_STREQ("name2", event2.name()); |
1325 EXPECT_TRUE(event1.parameter_copy_storage() == NULL); | 1300 EXPECT_TRUE(event1.parameter_copy_storage() == NULL); |
1326 EXPECT_TRUE(event2.parameter_copy_storage() == NULL); | 1301 EXPECT_TRUE(event2.parameter_copy_storage() == NULL); |
1327 EndTraceAndFlush(); | 1302 EndTraceAndFlush(); |
1328 } | 1303 } |
1329 } | 1304 } |
1330 | 1305 |
1331 // Test that data sent from other threads is gathered | 1306 // Test that data sent from other threads is gathered |
1332 TEST_F(TraceEventTestFixture, DataCapturedOnThread) { | 1307 TEST_F(TraceEventTestFixture, DataCapturedOnThread) { |
1333 ManualTestSetUp(); | |
1334 BeginTrace(); | 1308 BeginTrace(); |
1335 | 1309 |
1336 Thread thread("1"); | 1310 Thread thread("1"); |
1337 WaitableEvent task_complete_event(false, false); | 1311 WaitableEvent task_complete_event(false, false); |
1338 thread.Start(); | 1312 thread.Start(); |
1339 | 1313 |
1340 thread.message_loop()->PostTask( | 1314 thread.message_loop()->PostTask( |
1341 FROM_HERE, base::Bind(&TraceWithAllMacroVariants, &task_complete_event)); | 1315 FROM_HERE, base::Bind(&TraceWithAllMacroVariants, &task_complete_event)); |
1342 task_complete_event.Wait(); | 1316 task_complete_event.Wait(); |
1343 thread.Stop(); | 1317 thread.Stop(); |
1344 | 1318 |
1345 EndTraceAndFlush(); | 1319 EndTraceAndFlush(); |
1346 ValidateAllTraceMacrosCreatedData(trace_parsed_); | 1320 ValidateAllTraceMacrosCreatedData(trace_parsed_); |
1347 } | 1321 } |
1348 | 1322 |
1349 // Test that data sent from multiple threads is gathered | 1323 // Test that data sent from multiple threads is gathered |
1350 TEST_F(TraceEventTestFixture, DataCapturedManyThreads) { | 1324 TEST_F(TraceEventTestFixture, DataCapturedManyThreads) { |
1351 ManualTestSetUp(); | |
1352 BeginTrace(); | 1325 BeginTrace(); |
1353 | 1326 |
1354 const int num_threads = 4; | 1327 const int num_threads = 4; |
1355 const int num_events = 4000; | 1328 const int num_events = 4000; |
1356 Thread* threads[num_threads]; | 1329 Thread* threads[num_threads]; |
1357 WaitableEvent* task_complete_events[num_threads]; | 1330 WaitableEvent* task_complete_events[num_threads]; |
1358 for (int i = 0; i < num_threads; i++) { | 1331 for (int i = 0; i < num_threads; i++) { |
1359 threads[i] = new Thread(StringPrintf("Thread %d", i).c_str()); | 1332 threads[i] = new Thread(StringPrintf("Thread %d", i).c_str()); |
1360 task_complete_events[i] = new WaitableEvent(false, false); | 1333 task_complete_events[i] = new WaitableEvent(false, false); |
1361 threads[i]->Start(); | 1334 threads[i]->Start(); |
(...skipping 13 matching lines...) Expand all Loading... |
1375 } | 1348 } |
1376 | 1349 |
1377 EndTraceAndFlush(); | 1350 EndTraceAndFlush(); |
1378 | 1351 |
1379 ValidateInstantEventPresentOnEveryThread(trace_parsed_, | 1352 ValidateInstantEventPresentOnEveryThread(trace_parsed_, |
1380 num_threads, num_events); | 1353 num_threads, num_events); |
1381 } | 1354 } |
1382 | 1355 |
1383 // Test that thread and process names show up in the trace | 1356 // Test that thread and process names show up in the trace |
1384 TEST_F(TraceEventTestFixture, ThreadNames) { | 1357 TEST_F(TraceEventTestFixture, ThreadNames) { |
1385 ManualTestSetUp(); | |
1386 | |
1387 // Create threads before we enable tracing to make sure | 1358 // Create threads before we enable tracing to make sure |
1388 // that tracelog still captures them. | 1359 // that tracelog still captures them. |
1389 const int num_threads = 4; | 1360 const int num_threads = 4; |
1390 const int num_events = 10; | 1361 const int num_events = 10; |
1391 Thread* threads[num_threads]; | 1362 Thread* threads[num_threads]; |
1392 PlatformThreadId thread_ids[num_threads]; | 1363 PlatformThreadId thread_ids[num_threads]; |
1393 for (int i = 0; i < num_threads; i++) | 1364 for (int i = 0; i < num_threads; i++) |
1394 threads[i] = new Thread(StringPrintf("Thread %d", i).c_str()); | 1365 threads[i] = new Thread(StringPrintf("Thread %d", i).c_str()); |
1395 | 1366 |
1396 // Enable tracing. | 1367 // Enable tracing. |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1444 tmp_int == static_cast<int>(base::GetCurrentProcId())); | 1415 tmp_int == static_cast<int>(base::GetCurrentProcId())); |
1445 // If the thread name changes or the tid gets reused, the name will be | 1416 // If the thread name changes or the tid gets reused, the name will be |
1446 // a comma-separated list of thread names, so look for a substring. | 1417 // a comma-separated list of thread names, so look for a substring. |
1447 EXPECT_TRUE(item->GetString("args.name", &tmp) && | 1418 EXPECT_TRUE(item->GetString("args.name", &tmp) && |
1448 tmp.find(expected_name) != std::string::npos); | 1419 tmp.find(expected_name) != std::string::npos); |
1449 } | 1420 } |
1450 } | 1421 } |
1451 } | 1422 } |
1452 | 1423 |
1453 TEST_F(TraceEventTestFixture, ThreadNameChanges) { | 1424 TEST_F(TraceEventTestFixture, ThreadNameChanges) { |
1454 ManualTestSetUp(); | |
1455 | |
1456 BeginTrace(); | 1425 BeginTrace(); |
1457 | 1426 |
1458 PlatformThread::SetName(""); | 1427 PlatformThread::SetName(""); |
1459 TRACE_EVENT_INSTANT0("drink", "water", TRACE_EVENT_SCOPE_THREAD); | 1428 TRACE_EVENT_INSTANT0("drink", "water", TRACE_EVENT_SCOPE_THREAD); |
1460 | 1429 |
1461 PlatformThread::SetName("cafe"); | 1430 PlatformThread::SetName("cafe"); |
1462 TRACE_EVENT_INSTANT0("drink", "coffee", TRACE_EVENT_SCOPE_THREAD); | 1431 TRACE_EVENT_INSTANT0("drink", "coffee", TRACE_EVENT_SCOPE_THREAD); |
1463 | 1432 |
1464 PlatformThread::SetName("shop"); | 1433 PlatformThread::SetName("shop"); |
1465 // No event here, so won't appear in combined name. | 1434 // No event here, so won't appear in combined name. |
(...skipping 19 matching lines...) Expand all Loading... |
1485 | 1454 |
1486 std::string expected_name = "cafe,pub, bar"; | 1455 std::string expected_name = "cafe,pub, bar"; |
1487 std::string tmp; | 1456 std::string tmp; |
1488 EXPECT_TRUE(item->GetString("args.name", &tmp)); | 1457 EXPECT_TRUE(item->GetString("args.name", &tmp)); |
1489 EXPECT_EQ(expected_name, tmp); | 1458 EXPECT_EQ(expected_name, tmp); |
1490 } | 1459 } |
1491 | 1460 |
1492 // Test that the disabled trace categories are included/excluded from the | 1461 // Test that the disabled trace categories are included/excluded from the |
1493 // trace output correctly. | 1462 // trace output correctly. |
1494 TEST_F(TraceEventTestFixture, DisabledCategories) { | 1463 TEST_F(TraceEventTestFixture, DisabledCategories) { |
1495 ManualTestSetUp(); | |
1496 | |
1497 BeginTrace(); | 1464 BeginTrace(); |
1498 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("cc"), "first", | 1465 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("cc"), "first", |
1499 TRACE_EVENT_SCOPE_THREAD); | 1466 TRACE_EVENT_SCOPE_THREAD); |
1500 TRACE_EVENT_INSTANT0("included", "first", TRACE_EVENT_SCOPE_THREAD); | 1467 TRACE_EVENT_INSTANT0("included", "first", TRACE_EVENT_SCOPE_THREAD); |
1501 EndTraceAndFlush(); | 1468 EndTraceAndFlush(); |
1502 { | 1469 { |
1503 const DictionaryValue* item = NULL; | 1470 const DictionaryValue* item = NULL; |
1504 ListValue& trace_parsed = trace_parsed_; | 1471 ListValue& trace_parsed = trace_parsed_; |
1505 EXPECT_NOT_FIND_("disabled-by-default-cc"); | 1472 EXPECT_NOT_FIND_("disabled-by-default-cc"); |
1506 EXPECT_FIND_("included"); | 1473 EXPECT_FIND_("included"); |
1507 } | 1474 } |
1508 Clear(); | 1475 Clear(); |
1509 | 1476 |
1510 BeginSpecificTrace("disabled-by-default-cc"); | 1477 BeginSpecificTrace("disabled-by-default-cc"); |
1511 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("cc"), "second", | 1478 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("cc"), "second", |
1512 TRACE_EVENT_SCOPE_THREAD); | 1479 TRACE_EVENT_SCOPE_THREAD); |
1513 TRACE_EVENT_INSTANT0("other_included", "second", TRACE_EVENT_SCOPE_THREAD); | 1480 TRACE_EVENT_INSTANT0("other_included", "second", TRACE_EVENT_SCOPE_THREAD); |
1514 EndTraceAndFlush(); | 1481 EndTraceAndFlush(); |
1515 | 1482 |
1516 { | 1483 { |
1517 const DictionaryValue* item = NULL; | 1484 const DictionaryValue* item = NULL; |
1518 ListValue& trace_parsed = trace_parsed_; | 1485 ListValue& trace_parsed = trace_parsed_; |
1519 EXPECT_FIND_("disabled-by-default-cc"); | 1486 EXPECT_FIND_("disabled-by-default-cc"); |
1520 EXPECT_FIND_("other_included"); | 1487 EXPECT_FIND_("other_included"); |
1521 } | 1488 } |
1522 } | 1489 } |
1523 | 1490 |
1524 // Test trace calls made after tracing singleton shut down. | |
1525 // | |
1526 // The singleton is destroyed by our base::AtExitManager, but there can be | |
1527 // code still executing as the C++ static objects are destroyed. This test | |
1528 // forces the singleton to destroy early, and intentinally makes trace calls | |
1529 // afterwards. | |
1530 TEST_F(TraceEventTestFixture, AtExit) { | |
1531 // Repeat this test a few times. Besides just showing robustness, it also | |
1532 // allows us to test that events at shutdown do not appear with valid events | |
1533 // recorded after the system is started again. | |
1534 for (int i = 0; i < 4; i++) { | |
1535 // Scope to contain the then destroy the TraceLog singleton. | |
1536 { | |
1537 base::ShadowingAtExitManager exit_manager_will_destroy_singletons; | |
1538 | |
1539 // Setup TraceLog singleton inside this test's exit manager scope | |
1540 // so that it will be destroyed when this scope closes. | |
1541 ManualTestSetUp(); | |
1542 | |
1543 TRACE_EVENT_INSTANT0("all", "not recorded; system not enabled", | |
1544 TRACE_EVENT_SCOPE_THREAD); | |
1545 | |
1546 BeginTrace(); | |
1547 | |
1548 TRACE_EVENT_INSTANT0("all", "is recorded 1; system has been enabled", | |
1549 TRACE_EVENT_SCOPE_THREAD); | |
1550 // Trace calls that will cache pointers to categories; they're valid here | |
1551 TraceCallsWithCachedCategoryPointersPointers( | |
1552 "is recorded 2; system has been enabled"); | |
1553 | |
1554 EndTraceAndFlush(); | |
1555 } // scope to destroy singleton | |
1556 ASSERT_FALSE(TraceLog::GetInstance()); | |
1557 | |
1558 // Now that singleton is destroyed, check what trace events were recorded | |
1559 const DictionaryValue* item = NULL; | |
1560 ListValue& trace_parsed = trace_parsed_; | |
1561 EXPECT_FIND_("is recorded 1"); | |
1562 EXPECT_FIND_("is recorded 2"); | |
1563 EXPECT_NOT_FIND_("not recorded"); | |
1564 | |
1565 // Make additional trace event calls on the shutdown system. They should | |
1566 // all pass cleanly, but the data not be recorded. We'll verify that next | |
1567 // time around the loop (the only way to flush the trace buffers). | |
1568 TRACE_EVENT_BEGIN_ETW("not recorded; system shutdown", 0, NULL); | |
1569 TRACE_EVENT_END_ETW("not recorded; system shutdown", 0, NULL); | |
1570 TRACE_EVENT_INSTANT_ETW("not recorded; system shutdown", 0, NULL); | |
1571 TRACE_EVENT0("all", "not recorded; system shutdown"); | |
1572 TRACE_EVENT_INSTANT0("all", "not recorded; system shutdown", | |
1573 TRACE_EVENT_SCOPE_THREAD); | |
1574 TRACE_EVENT_BEGIN0("all", "not recorded; system shutdown"); | |
1575 TRACE_EVENT_END0("all", "not recorded; system shutdown"); | |
1576 | |
1577 TRACE_EVENT0("new category 0!", "not recorded; system shutdown"); | |
1578 TRACE_EVENT_INSTANT0("new category 1!", "not recorded; system shutdown", | |
1579 TRACE_EVENT_SCOPE_THREAD); | |
1580 TRACE_EVENT_BEGIN0("new category 2!", "not recorded; system shutdown"); | |
1581 TRACE_EVENT_END0("new category 3!", "not recorded; system shutdown"); | |
1582 | |
1583 // Cached categories should be safe to check, and still disable traces | |
1584 TraceCallsWithCachedCategoryPointersPointers( | |
1585 "not recorded; system shutdown"); | |
1586 } | |
1587 } | |
1588 | |
1589 TEST_F(TraceEventTestFixture, NormallyNoDeepCopy) { | 1491 TEST_F(TraceEventTestFixture, NormallyNoDeepCopy) { |
1590 // Test that the TRACE_EVENT macros do not deep-copy their string. If they | 1492 // Test that the TRACE_EVENT macros do not deep-copy their string. If they |
1591 // do so it may indicate a performance regression, but more-over it would | 1493 // do so it may indicate a performance regression, but more-over it would |
1592 // make the DEEP_COPY overloads redundant. | 1494 // make the DEEP_COPY overloads redundant. |
1593 ManualTestSetUp(); | |
1594 | |
1595 std::string name_string("event name"); | 1495 std::string name_string("event name"); |
1596 | 1496 |
1597 BeginTrace(); | 1497 BeginTrace(); |
1598 TRACE_EVENT_INSTANT0("category", name_string.c_str(), | 1498 TRACE_EVENT_INSTANT0("category", name_string.c_str(), |
1599 TRACE_EVENT_SCOPE_THREAD); | 1499 TRACE_EVENT_SCOPE_THREAD); |
1600 | 1500 |
1601 // Modify the string in place (a wholesale reassignment may leave the old | 1501 // Modify the string in place (a wholesale reassignment may leave the old |
1602 // string intact on the heap). | 1502 // string intact on the heap). |
1603 name_string[0] = '@'; | 1503 name_string[0] = '@'; |
1604 | 1504 |
1605 EndTraceAndFlush(); | 1505 EndTraceAndFlush(); |
1606 | 1506 |
1607 EXPECT_FALSE(FindTraceEntry(trace_parsed_, "event name")); | 1507 EXPECT_FALSE(FindTraceEntry(trace_parsed_, "event name")); |
1608 EXPECT_TRUE(FindTraceEntry(trace_parsed_, name_string.c_str())); | 1508 EXPECT_TRUE(FindTraceEntry(trace_parsed_, name_string.c_str())); |
1609 } | 1509 } |
1610 | 1510 |
1611 TEST_F(TraceEventTestFixture, DeepCopy) { | 1511 TEST_F(TraceEventTestFixture, DeepCopy) { |
1612 ManualTestSetUp(); | |
1613 | |
1614 static const char kOriginalName1[] = "name1"; | 1512 static const char kOriginalName1[] = "name1"; |
1615 static const char kOriginalName2[] = "name2"; | 1513 static const char kOriginalName2[] = "name2"; |
1616 static const char kOriginalName3[] = "name3"; | 1514 static const char kOriginalName3[] = "name3"; |
1617 std::string name1(kOriginalName1); | 1515 std::string name1(kOriginalName1); |
1618 std::string name2(kOriginalName2); | 1516 std::string name2(kOriginalName2); |
1619 std::string name3(kOriginalName3); | 1517 std::string name3(kOriginalName3); |
1620 std::string arg1("arg1"); | 1518 std::string arg1("arg1"); |
1621 std::string arg2("arg2"); | 1519 std::string arg2("arg2"); |
1622 std::string val1("val1"); | 1520 std::string val1("val1"); |
1623 std::string val2("val2"); | 1521 std::string val2("val2"); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1655 std::string s; | 1553 std::string s; |
1656 EXPECT_TRUE(entry3->GetString("args.arg1", &s)); | 1554 EXPECT_TRUE(entry3->GetString("args.arg1", &s)); |
1657 EXPECT_EQ("val1", s); | 1555 EXPECT_EQ("val1", s); |
1658 EXPECT_TRUE(entry3->GetString("args.arg2", &s)); | 1556 EXPECT_TRUE(entry3->GetString("args.arg2", &s)); |
1659 EXPECT_EQ("val2", s); | 1557 EXPECT_EQ("val2", s); |
1660 } | 1558 } |
1661 | 1559 |
1662 // Test that TraceResultBuffer outputs the correct result whether it is added | 1560 // Test that TraceResultBuffer outputs the correct result whether it is added |
1663 // in chunks or added all at once. | 1561 // in chunks or added all at once. |
1664 TEST_F(TraceEventTestFixture, TraceResultBuffer) { | 1562 TEST_F(TraceEventTestFixture, TraceResultBuffer) { |
1665 ManualTestSetUp(); | |
1666 | |
1667 Clear(); | 1563 Clear(); |
1668 | 1564 |
1669 trace_buffer_.Start(); | 1565 trace_buffer_.Start(); |
1670 trace_buffer_.AddFragment("bla1"); | 1566 trace_buffer_.AddFragment("bla1"); |
1671 trace_buffer_.AddFragment("bla2"); | 1567 trace_buffer_.AddFragment("bla2"); |
1672 trace_buffer_.AddFragment("bla3,bla4"); | 1568 trace_buffer_.AddFragment("bla3,bla4"); |
1673 trace_buffer_.Finish(); | 1569 trace_buffer_.Finish(); |
1674 EXPECT_STREQ(json_output_.json_output.c_str(), "[bla1,bla2,bla3,bla4]"); | 1570 EXPECT_STREQ(json_output_.json_output.c_str(), "[bla1,bla2,bla3,bla4]"); |
1675 | 1571 |
1676 Clear(); | 1572 Clear(); |
1677 | 1573 |
1678 trace_buffer_.Start(); | 1574 trace_buffer_.Start(); |
1679 trace_buffer_.AddFragment("bla1,bla2,bla3,bla4"); | 1575 trace_buffer_.AddFragment("bla1,bla2,bla3,bla4"); |
1680 trace_buffer_.Finish(); | 1576 trace_buffer_.Finish(); |
1681 EXPECT_STREQ(json_output_.json_output.c_str(), "[bla1,bla2,bla3,bla4]"); | 1577 EXPECT_STREQ(json_output_.json_output.c_str(), "[bla1,bla2,bla3,bla4]"); |
1682 } | 1578 } |
1683 | 1579 |
1684 // Test that trace_event parameters are not evaluated if the tracing | 1580 // Test that trace_event parameters are not evaluated if the tracing |
1685 // system is disabled. | 1581 // system is disabled. |
1686 TEST_F(TraceEventTestFixture, TracingIsLazy) { | 1582 TEST_F(TraceEventTestFixture, TracingIsLazy) { |
1687 ManualTestSetUp(); | |
1688 BeginTrace(); | 1583 BeginTrace(); |
1689 | 1584 |
1690 int a = 0; | 1585 int a = 0; |
1691 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); | 1586 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); |
1692 EXPECT_EQ(1, a); | 1587 EXPECT_EQ(1, a); |
1693 | 1588 |
1694 TraceLog::GetInstance()->SetDisabled(); | 1589 TraceLog::GetInstance()->SetDisabled(); |
1695 | 1590 |
1696 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); | 1591 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); |
1697 EXPECT_EQ(1, a); | 1592 EXPECT_EQ(1, a); |
1698 | 1593 |
1699 EndTraceAndFlush(); | 1594 EndTraceAndFlush(); |
1700 } | 1595 } |
1701 | 1596 |
1702 TEST_F(TraceEventTestFixture, TraceEnableDisable) { | 1597 TEST_F(TraceEventTestFixture, TraceEnableDisable) { |
1703 ManualTestSetUp(); | |
1704 | |
1705 TraceLog* trace_log = TraceLog::GetInstance(); | 1598 TraceLog* trace_log = TraceLog::GetInstance(); |
1706 CategoryFilter cf_inc_all("*"); | 1599 CategoryFilter cf_inc_all("*"); |
1707 trace_log->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); | 1600 trace_log->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); |
1708 EXPECT_TRUE(trace_log->IsEnabled()); | 1601 EXPECT_TRUE(trace_log->IsEnabled()); |
1709 trace_log->SetDisabled(); | 1602 trace_log->SetDisabled(); |
1710 EXPECT_FALSE(trace_log->IsEnabled()); | 1603 EXPECT_FALSE(trace_log->IsEnabled()); |
1711 | 1604 |
1712 trace_log->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); | 1605 trace_log->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL); |
1713 EXPECT_TRUE(trace_log->IsEnabled()); | 1606 EXPECT_TRUE(trace_log->IsEnabled()); |
1714 const std::vector<std::string> empty; | 1607 const std::vector<std::string> empty; |
1715 trace_log->SetEnabled(CategoryFilter(""), TraceLog::RECORD_UNTIL_FULL); | 1608 trace_log->SetEnabled(CategoryFilter(""), TraceLog::RECORD_UNTIL_FULL); |
1716 EXPECT_TRUE(trace_log->IsEnabled()); | 1609 EXPECT_TRUE(trace_log->IsEnabled()); |
1717 trace_log->SetDisabled(); | 1610 trace_log->SetDisabled(); |
1718 EXPECT_TRUE(trace_log->IsEnabled()); | 1611 EXPECT_TRUE(trace_log->IsEnabled()); |
1719 trace_log->SetDisabled(); | 1612 trace_log->SetDisabled(); |
1720 EXPECT_FALSE(trace_log->IsEnabled()); | 1613 EXPECT_FALSE(trace_log->IsEnabled()); |
1721 } | 1614 } |
1722 | 1615 |
1723 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) { | 1616 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) { |
1724 ManualTestSetUp(); | |
1725 | |
1726 TraceLog* trace_log = TraceLog::GetInstance(); | 1617 TraceLog* trace_log = TraceLog::GetInstance(); |
1727 trace_log->SetEnabled(CategoryFilter("foo,bar"), TraceLog::RECORD_UNTIL_FULL); | 1618 trace_log->SetEnabled(CategoryFilter("foo,bar"), TraceLog::RECORD_UNTIL_FULL); |
1728 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo")); | 1619 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo")); |
1729 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); | 1620 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); |
1730 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); | 1621 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); |
1731 trace_log->SetEnabled(CategoryFilter("foo2"), TraceLog::RECORD_UNTIL_FULL); | 1622 trace_log->SetEnabled(CategoryFilter("foo2"), TraceLog::RECORD_UNTIL_FULL); |
1732 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo2")); | 1623 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo2")); |
1733 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); | 1624 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); |
1734 // The "" becomes the default catergory set when applied. | 1625 // The "" becomes the default catergory set when applied. |
1735 trace_log->SetEnabled(CategoryFilter(""), TraceLog::RECORD_UNTIL_FULL); | 1626 trace_log->SetEnabled(CategoryFilter(""), TraceLog::RECORD_UNTIL_FULL); |
(...skipping 29 matching lines...) Expand all Loading... |
1765 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-cc")); | 1656 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-cc")); |
1766 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-gpu")); | 1657 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-gpu")); |
1767 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); | 1658 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); |
1768 EXPECT_STREQ("disabled-by-default-cc,disabled-by-default-gpu", | 1659 EXPECT_STREQ("disabled-by-default-cc,disabled-by-default-gpu", |
1769 trace_log->GetCurrentCategoryFilter().ToString().c_str()); | 1660 trace_log->GetCurrentCategoryFilter().ToString().c_str()); |
1770 trace_log->SetDisabled(); | 1661 trace_log->SetDisabled(); |
1771 trace_log->SetDisabled(); | 1662 trace_log->SetDisabled(); |
1772 } | 1663 } |
1773 | 1664 |
1774 TEST_F(TraceEventTestFixture, TraceOptionsParsing) { | 1665 TEST_F(TraceEventTestFixture, TraceOptionsParsing) { |
1775 ManualTestSetUp(); | |
1776 | |
1777 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL, | 1666 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL, |
1778 TraceLog::TraceOptionsFromString(std::string())); | 1667 TraceLog::TraceOptionsFromString(std::string())); |
1779 | 1668 |
1780 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL, | 1669 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL, |
1781 TraceLog::TraceOptionsFromString("record-until-full")); | 1670 TraceLog::TraceOptionsFromString("record-until-full")); |
1782 EXPECT_EQ(TraceLog::RECORD_CONTINUOUSLY, | 1671 EXPECT_EQ(TraceLog::RECORD_CONTINUOUSLY, |
1783 TraceLog::TraceOptionsFromString("record-continuously")); | 1672 TraceLog::TraceOptionsFromString("record-continuously")); |
1784 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL | TraceLog::ENABLE_SAMPLING, | 1673 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL | TraceLog::ENABLE_SAMPLING, |
1785 TraceLog::TraceOptionsFromString("enable-sampling")); | 1674 TraceLog::TraceOptionsFromString("enable-sampling")); |
1786 EXPECT_EQ(TraceLog::RECORD_CONTINUOUSLY | TraceLog::ENABLE_SAMPLING, | 1675 EXPECT_EQ(TraceLog::RECORD_CONTINUOUSLY | TraceLog::ENABLE_SAMPLING, |
1787 TraceLog::TraceOptionsFromString( | 1676 TraceLog::TraceOptionsFromString( |
1788 "record-continuously,enable-sampling")); | 1677 "record-continuously,enable-sampling")); |
1789 } | 1678 } |
1790 | 1679 |
1791 // Not supported in split dll build. http://crbug.com/256965 | 1680 // Not supported in split dll build. http://crbug.com/256965 |
1792 #if !defined(CHROME_SPLIT_DLL) | 1681 #if !defined(CHROME_SPLIT_DLL) |
1793 TEST_F(TraceEventTestFixture, TraceSampling) { | 1682 TEST_F(TraceEventTestFixture, TraceSampling) { |
1794 ManualTestSetUp(); | |
1795 | |
1796 event_watch_notification_ = 0; | 1683 event_watch_notification_ = 0; |
1797 TraceLog::GetInstance()->SetEnabled( | 1684 TraceLog::GetInstance()->SetEnabled( |
1798 CategoryFilter("*"), | 1685 CategoryFilter("*"), |
1799 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL | | 1686 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL | |
1800 TraceLog::ENABLE_SAMPLING)); | 1687 TraceLog::ENABLE_SAMPLING)); |
1801 | 1688 |
1802 WaitableEvent* sampled = new WaitableEvent(false, false); | 1689 WaitableEvent* sampled = new WaitableEvent(false, false); |
1803 TraceLog::GetInstance()->InstallWaitableEventForSamplingTesting(sampled); | 1690 TraceLog::GetInstance()->InstallWaitableEventForSamplingTesting(sampled); |
1804 | 1691 |
1805 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Stuff"); | 1692 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Stuff"); |
1806 sampled->Wait(); | 1693 sampled->Wait(); |
1807 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Things"); | 1694 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Things"); |
1808 sampled->Wait(); | 1695 sampled->Wait(); |
1809 | 1696 |
1810 EndTraceAndFlush(); | 1697 EndTraceAndFlush(); |
1811 | 1698 |
1812 // Make sure we hit at least once. | 1699 // Make sure we hit at least once. |
1813 EXPECT_TRUE(FindNamePhase("Stuff", "P")); | 1700 EXPECT_TRUE(FindNamePhase("Stuff", "P")); |
1814 EXPECT_TRUE(FindNamePhase("Things", "P")); | 1701 EXPECT_TRUE(FindNamePhase("Things", "P")); |
1815 } | 1702 } |
1816 | 1703 |
1817 TEST_F(TraceEventTestFixture, TraceSamplingScope) { | 1704 TEST_F(TraceEventTestFixture, TraceSamplingScope) { |
1818 ManualTestSetUp(); | |
1819 | |
1820 event_watch_notification_ = 0; | 1705 event_watch_notification_ = 0; |
1821 TraceLog::GetInstance()->SetEnabled( | 1706 TraceLog::GetInstance()->SetEnabled( |
1822 CategoryFilter("*"), | 1707 CategoryFilter("*"), |
1823 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL | | 1708 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL | |
1824 TraceLog::ENABLE_SAMPLING)); | 1709 TraceLog::ENABLE_SAMPLING)); |
1825 | 1710 |
1826 WaitableEvent* sampled = new WaitableEvent(false, false); | 1711 WaitableEvent* sampled = new WaitableEvent(false, false); |
1827 TraceLog::GetInstance()->InstallWaitableEventForSamplingTesting(sampled); | 1712 TraceLog::GetInstance()->InstallWaitableEventForSamplingTesting(sampled); |
1828 | 1713 |
1829 TRACE_EVENT_SCOPED_SAMPLING_STATE("AAA", "name"); | 1714 TRACE_EVENT_SCOPED_SAMPLING_STATE("AAA", "name"); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1862 | 1747 |
1863 virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE { | 1748 virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE { |
1864 out->append("{\"foo\":1}"); | 1749 out->append("{\"foo\":1}"); |
1865 } | 1750 } |
1866 | 1751 |
1867 private: | 1752 private: |
1868 DISALLOW_COPY_AND_ASSIGN(MyData); | 1753 DISALLOW_COPY_AND_ASSIGN(MyData); |
1869 }; | 1754 }; |
1870 | 1755 |
1871 TEST_F(TraceEventTestFixture, ConvertableTypes) { | 1756 TEST_F(TraceEventTestFixture, ConvertableTypes) { |
1872 ManualTestSetUp(); | |
1873 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 1757 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
1874 TraceLog::RECORD_UNTIL_FULL); | 1758 TraceLog::RECORD_UNTIL_FULL); |
1875 | 1759 |
1876 scoped_ptr<MyData> data(new MyData()); | 1760 scoped_ptr<MyData> data(new MyData()); |
1877 scoped_ptr<MyData> data1(new MyData()); | 1761 scoped_ptr<MyData> data1(new MyData()); |
1878 scoped_ptr<MyData> data2(new MyData()); | 1762 scoped_ptr<MyData> data2(new MyData()); |
1879 TRACE_EVENT1("foo", "bar", "data", | 1763 TRACE_EVENT1("foo", "bar", "data", |
1880 data.PassAs<base::debug::ConvertableToTraceFormat>()); | 1764 data.PassAs<base::debug::ConvertableToTraceFormat>()); |
1881 TRACE_EVENT2("foo", "baz", | 1765 TRACE_EVENT2("foo", "baz", |
1882 "data1", data1.PassAs<base::debug::ConvertableToTraceFormat>(), | 1766 "data1", data1.PassAs<base::debug::ConvertableToTraceFormat>(), |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1972 EXPECT_TRUE(args_dict->Get("convert", &value)); | 1856 EXPECT_TRUE(args_dict->Get("convert", &value)); |
1973 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict)); | 1857 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict)); |
1974 EXPECT_TRUE(convertable_dict->GetInteger("foo", &foo_val)); | 1858 EXPECT_TRUE(convertable_dict->GetInteger("foo", &foo_val)); |
1975 EXPECT_EQ(1, foo_val); | 1859 EXPECT_EQ(1, foo_val); |
1976 } | 1860 } |
1977 | 1861 |
1978 class TraceEventCallbackTest : public TraceEventTestFixture { | 1862 class TraceEventCallbackTest : public TraceEventTestFixture { |
1979 public: | 1863 public: |
1980 virtual void SetUp() OVERRIDE { | 1864 virtual void SetUp() OVERRIDE { |
1981 TraceEventTestFixture::SetUp(); | 1865 TraceEventTestFixture::SetUp(); |
1982 ManualTestSetUp(); | |
1983 ASSERT_EQ(NULL, s_instance); | 1866 ASSERT_EQ(NULL, s_instance); |
1984 s_instance = this; | 1867 s_instance = this; |
1985 } | 1868 } |
1986 virtual void TearDown() OVERRIDE { | 1869 virtual void TearDown() OVERRIDE { |
1987 while (TraceLog::GetInstance()->IsEnabled()) | 1870 while (TraceLog::GetInstance()->IsEnabled()) |
1988 TraceLog::GetInstance()->SetDisabled(); | 1871 TraceLog::GetInstance()->SetDisabled(); |
1989 ASSERT_TRUE(!!s_instance); | 1872 ASSERT_TRUE(!!s_instance); |
1990 s_instance = NULL; | 1873 s_instance = NULL; |
1991 TraceEventTestFixture::TearDown(); | 1874 TraceEventTestFixture::TearDown(); |
1992 } | 1875 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2036 TRACE_EVENT_INSTANT0("all", "a snake", TRACE_EVENT_SCOPE_GLOBAL); | 1919 TRACE_EVENT_INSTANT0("all", "a snake", TRACE_EVENT_SCOPE_GLOBAL); |
2037 TraceLog::GetInstance()->SetEventCallback(NULL); | 1920 TraceLog::GetInstance()->SetEventCallback(NULL); |
2038 ASSERT_EQ(1u, collected_events_.size()); | 1921 ASSERT_EQ(1u, collected_events_.size()); |
2039 EXPECT_EQ("a snake", collected_events_[0]); | 1922 EXPECT_EQ("a snake", collected_events_[0]); |
2040 } | 1923 } |
2041 | 1924 |
2042 // TODO(dsinclair): Continuous Tracing unit test. | 1925 // TODO(dsinclair): Continuous Tracing unit test. |
2043 | 1926 |
2044 // Test the category filter. | 1927 // Test the category filter. |
2045 TEST_F(TraceEventTestFixture, CategoryFilter) { | 1928 TEST_F(TraceEventTestFixture, CategoryFilter) { |
2046 ManualTestSetUp(); | |
2047 | |
2048 // Using the default filter. | 1929 // Using the default filter. |
2049 CategoryFilter default_cf = CategoryFilter( | 1930 CategoryFilter default_cf = CategoryFilter( |
2050 CategoryFilter::kDefaultCategoryFilterString); | 1931 CategoryFilter::kDefaultCategoryFilterString); |
2051 std::string category_filter_str = default_cf.ToString(); | 1932 std::string category_filter_str = default_cf.ToString(); |
2052 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str()); | 1933 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str()); |
2053 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category")); | 1934 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category")); |
2054 EXPECT_FALSE( | 1935 EXPECT_FALSE( |
2055 default_cf.IsCategoryGroupEnabled("disabled-by-default-category")); | 1936 default_cf.IsCategoryGroupEnabled("disabled-by-default-category")); |
2056 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); | 1937 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); |
2057 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); | 1938 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2137 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | 2018 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
2138 " bad_category ")); | 2019 " bad_category ")); |
2139 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | 2020 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
2140 "")); | 2021 "")); |
2141 EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | 2022 EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( |
2142 "good_category")); | 2023 "good_category")); |
2143 } | 2024 } |
2144 | 2025 |
2145 } // namespace debug | 2026 } // namespace debug |
2146 } // namespace base | 2027 } // namespace base |
OLD | NEW |