| 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 <math.h> | 5 #include <math.h> |
| 6 #include <cstdlib> | 6 #include <cstdlib> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 const char* value; | 41 const char* value; |
| 42 CompareOp op; | 42 CompareOp op; |
| 43 }; | 43 }; |
| 44 | 44 |
| 45 const int kThreadId = 42; | 45 const int kThreadId = 42; |
| 46 const int kAsyncId = 5; | 46 const int kAsyncId = 5; |
| 47 const char kAsyncIdStr[] = "0x5"; | 47 const char kAsyncIdStr[] = "0x5"; |
| 48 const int kAsyncId2 = 6; | 48 const int kAsyncId2 = 6; |
| 49 const char kAsyncId2Str[] = "0x6"; | 49 const char kAsyncId2Str[] = "0x6"; |
| 50 | 50 |
| 51 const char kRecordAllCategoryFilter[] = "*"; |
| 52 |
| 51 class TraceEventTestFixture : public testing::Test { | 53 class TraceEventTestFixture : public testing::Test { |
| 52 public: | 54 public: |
| 53 void OnTraceDataCollected( | 55 void OnTraceDataCollected( |
| 54 WaitableEvent* flush_complete_event, | 56 WaitableEvent* flush_complete_event, |
| 55 const scoped_refptr<base::RefCountedString>& events_str, | 57 const scoped_refptr<base::RefCountedString>& events_str, |
| 56 bool has_more_events); | 58 bool has_more_events); |
| 57 void OnWatchEventMatched() { | 59 void OnWatchEventMatched() { |
| 58 ++event_watch_notification_; | 60 ++event_watch_notification_; |
| 59 } | 61 } |
| 60 DictionaryValue* FindMatchingTraceEntry(const JsonKeyValue* key_values); | 62 DictionaryValue* FindMatchingTraceEntry(const JsonKeyValue* key_values); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 72 trace_parsed_.Clear(); | 74 trace_parsed_.Clear(); |
| 73 json_output_.json_output.clear(); | 75 json_output_.json_output.clear(); |
| 74 } | 76 } |
| 75 | 77 |
| 76 void BeginTrace() { | 78 void BeginTrace() { |
| 77 BeginSpecificTrace("*"); | 79 BeginSpecificTrace("*"); |
| 78 } | 80 } |
| 79 | 81 |
| 80 void BeginSpecificTrace(const std::string& filter) { | 82 void BeginSpecificTrace(const std::string& filter) { |
| 81 event_watch_notification_ = 0; | 83 event_watch_notification_ = 0; |
| 82 TraceLog::GetInstance()->SetEnabled( | 84 TraceLog::GetInstance()->SetEnabled(TraceConfig(filter, ""), |
| 83 CategoryFilter(filter), | 85 TraceLog::RECORDING_MODE); |
| 84 TraceLog::RECORDING_MODE, | |
| 85 TraceOptions()); | |
| 86 } | 86 } |
| 87 | 87 |
| 88 void EndTraceAndFlush() { | 88 void EndTraceAndFlush() { |
| 89 WaitableEvent flush_complete_event(false, false); | 89 WaitableEvent flush_complete_event(false, false); |
| 90 EndTraceAndFlushAsync(&flush_complete_event); | 90 EndTraceAndFlushAsync(&flush_complete_event); |
| 91 flush_complete_event.Wait(); | 91 flush_complete_event.Wait(); |
| 92 } | 92 } |
| 93 | 93 |
| 94 // Used when testing thread-local buffers which requires the thread initiating | 94 // Used when testing thread-local buffers which requires the thread initiating |
| 95 // flush to have a message loop. | 95 // flush to have a message loop. |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 WaitableEvent* flush_complete_event, | 161 WaitableEvent* flush_complete_event, |
| 162 const scoped_refptr<base::RefCountedString>& events_str, | 162 const scoped_refptr<base::RefCountedString>& events_str, |
| 163 bool has_more_events) { | 163 bool has_more_events) { |
| 164 AutoLock lock(lock_); | 164 AutoLock lock(lock_); |
| 165 json_output_.json_output.clear(); | 165 json_output_.json_output.clear(); |
| 166 trace_buffer_.Start(); | 166 trace_buffer_.Start(); |
| 167 trace_buffer_.AddFragment(events_str->data()); | 167 trace_buffer_.AddFragment(events_str->data()); |
| 168 trace_buffer_.Finish(); | 168 trace_buffer_.Finish(); |
| 169 | 169 |
| 170 scoped_ptr<Value> root; | 170 scoped_ptr<Value> root; |
| 171 root.reset(base::JSONReader::Read(json_output_.json_output, | 171 root.reset(base::JSONReader::DeprecatedRead( |
| 172 JSON_PARSE_RFC | JSON_DETACHABLE_CHILDREN)); | 172 json_output_.json_output, JSON_PARSE_RFC | JSON_DETACHABLE_CHILDREN)); |
| 173 | 173 |
| 174 if (!root.get()) { | 174 if (!root.get()) { |
| 175 LOG(ERROR) << json_output_.json_output; | 175 LOG(ERROR) << json_output_.json_output; |
| 176 } | 176 } |
| 177 | 177 |
| 178 ListValue* root_list = NULL; | 178 ListValue* root_list = NULL; |
| 179 ASSERT_TRUE(root.get()); | 179 ASSERT_TRUE(root.get()); |
| 180 ASSERT_TRUE(root->GetAsList(&root_list)); | 180 ASSERT_TRUE(root->GetAsList(&root_list)); |
| 181 | 181 |
| 182 // Move items into our aggregate collection | 182 // Move items into our aggregate collection |
| (...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 for (int event = 0; event < num_events; event++) { | 865 for (int event = 0; event < num_events; event++) { |
| 866 EXPECT_TRUE(results[thread][event]); | 866 EXPECT_TRUE(results[thread][event]); |
| 867 } | 867 } |
| 868 } | 868 } |
| 869 } | 869 } |
| 870 | 870 |
| 871 } // namespace | 871 } // namespace |
| 872 | 872 |
| 873 // Simple Test for emitting data and validating it was received. | 873 // Simple Test for emitting data and validating it was received. |
| 874 TEST_F(TraceEventTestFixture, DataCaptured) { | 874 TEST_F(TraceEventTestFixture, DataCaptured) { |
| 875 TraceLog::GetInstance()->SetEnabled( | 875 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 876 CategoryFilter("*"), | 876 TraceLog::RECORDING_MODE); |
| 877 TraceLog::RECORDING_MODE, | |
| 878 TraceOptions()); | |
| 879 | 877 |
| 880 TraceWithAllMacroVariants(NULL); | 878 TraceWithAllMacroVariants(NULL); |
| 881 | 879 |
| 882 EndTraceAndFlush(); | 880 EndTraceAndFlush(); |
| 883 | 881 |
| 884 ValidateAllTraceMacrosCreatedData(trace_parsed_); | 882 ValidateAllTraceMacrosCreatedData(trace_parsed_); |
| 885 } | 883 } |
| 886 | 884 |
| 887 class MockEnabledStateChangedObserver : | 885 class MockEnabledStateChangedObserver : |
| 888 public TraceLog::EnabledStateObserver { | 886 public TraceLog::EnabledStateObserver { |
| 889 public: | 887 public: |
| 890 MOCK_METHOD0(OnTraceLogEnabled, void()); | 888 MOCK_METHOD0(OnTraceLogEnabled, void()); |
| 891 MOCK_METHOD0(OnTraceLogDisabled, void()); | 889 MOCK_METHOD0(OnTraceLogDisabled, void()); |
| 892 }; | 890 }; |
| 893 | 891 |
| 894 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { | 892 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { |
| 895 MockEnabledStateChangedObserver observer; | 893 MockEnabledStateChangedObserver observer; |
| 896 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 894 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
| 897 | 895 |
| 898 EXPECT_CALL(observer, OnTraceLogEnabled()) | 896 EXPECT_CALL(observer, OnTraceLogEnabled()) |
| 899 .Times(1); | 897 .Times(1); |
| 900 TraceLog::GetInstance()->SetEnabled( | 898 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 901 CategoryFilter("*"), | 899 TraceLog::RECORDING_MODE); |
| 902 TraceLog::RECORDING_MODE, | |
| 903 TraceOptions()); | |
| 904 testing::Mock::VerifyAndClear(&observer); | 900 testing::Mock::VerifyAndClear(&observer); |
| 905 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 901 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
| 906 | 902 |
| 907 // Cleanup. | 903 // Cleanup. |
| 908 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 904 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
| 909 TraceLog::GetInstance()->SetDisabled(); | 905 TraceLog::GetInstance()->SetDisabled(); |
| 910 } | 906 } |
| 911 | 907 |
| 912 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { | 908 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { |
| 913 TraceLog::GetInstance()->SetEnabled( | 909 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 914 CategoryFilter("*"), | 910 TraceLog::RECORDING_MODE); |
| 915 TraceLog::RECORDING_MODE, | |
| 916 TraceOptions()); | |
| 917 | 911 |
| 918 testing::StrictMock<MockEnabledStateChangedObserver> observer; | 912 testing::StrictMock<MockEnabledStateChangedObserver> observer; |
| 919 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 913 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
| 920 | 914 |
| 921 EXPECT_CALL(observer, OnTraceLogEnabled()) | 915 EXPECT_CALL(observer, OnTraceLogEnabled()) |
| 922 .Times(0); | 916 .Times(0); |
| 923 EXPECT_CALL(observer, OnTraceLogDisabled()) | 917 EXPECT_CALL(observer, OnTraceLogDisabled()) |
| 924 .Times(0); | 918 .Times(0); |
| 925 TraceLog::GetInstance()->SetEnabled( | 919 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 926 CategoryFilter("*"), | 920 TraceLog::RECORDING_MODE); |
| 927 TraceLog::RECORDING_MODE, | |
| 928 TraceOptions()); | |
| 929 testing::Mock::VerifyAndClear(&observer); | 921 testing::Mock::VerifyAndClear(&observer); |
| 930 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 922 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
| 931 | 923 |
| 932 // Cleanup. | 924 // Cleanup. |
| 933 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 925 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
| 934 TraceLog::GetInstance()->SetDisabled(); | 926 TraceLog::GetInstance()->SetDisabled(); |
| 935 TraceLog::GetInstance()->SetDisabled(); | 927 TraceLog::GetInstance()->SetDisabled(); |
| 936 } | 928 } |
| 937 | 929 |
| 938 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnFirstDisable) { | 930 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnFirstDisable) { |
| 939 CategoryFilter cf_inc_all("*"); | 931 TraceConfig tc_inc_all("*", ""); |
| 940 TraceLog::GetInstance()->SetEnabled( | 932 TraceLog::GetInstance()->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE); |
| 941 cf_inc_all, | 933 TraceLog::GetInstance()->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE); |
| 942 TraceLog::RECORDING_MODE, | |
| 943 TraceOptions()); | |
| 944 TraceLog::GetInstance()->SetEnabled( | |
| 945 cf_inc_all, | |
| 946 TraceLog::RECORDING_MODE, | |
| 947 TraceOptions()); | |
| 948 | 934 |
| 949 testing::StrictMock<MockEnabledStateChangedObserver> observer; | 935 testing::StrictMock<MockEnabledStateChangedObserver> observer; |
| 950 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 936 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
| 951 | 937 |
| 952 EXPECT_CALL(observer, OnTraceLogEnabled()) | 938 EXPECT_CALL(observer, OnTraceLogEnabled()) |
| 953 .Times(0); | 939 .Times(0); |
| 954 EXPECT_CALL(observer, OnTraceLogDisabled()) | 940 EXPECT_CALL(observer, OnTraceLogDisabled()) |
| 955 .Times(1); | 941 .Times(1); |
| 956 TraceLog::GetInstance()->SetDisabled(); | 942 TraceLog::GetInstance()->SetDisabled(); |
| 957 testing::Mock::VerifyAndClear(&observer); | 943 testing::Mock::VerifyAndClear(&observer); |
| 958 | 944 |
| 959 // Cleanup. | 945 // Cleanup. |
| 960 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 946 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
| 961 TraceLog::GetInstance()->SetDisabled(); | 947 TraceLog::GetInstance()->SetDisabled(); |
| 962 } | 948 } |
| 963 | 949 |
| 964 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { | 950 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { |
| 965 TraceLog::GetInstance()->SetEnabled( | 951 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 966 CategoryFilter("*"), | 952 TraceLog::RECORDING_MODE); |
| 967 TraceLog::RECORDING_MODE, | |
| 968 TraceOptions()); | |
| 969 | 953 |
| 970 MockEnabledStateChangedObserver observer; | 954 MockEnabledStateChangedObserver observer; |
| 971 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 955 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
| 972 | 956 |
| 973 EXPECT_CALL(observer, OnTraceLogDisabled()) | 957 EXPECT_CALL(observer, OnTraceLogDisabled()) |
| 974 .Times(1); | 958 .Times(1); |
| 975 TraceLog::GetInstance()->SetDisabled(); | 959 TraceLog::GetInstance()->SetDisabled(); |
| 976 testing::Mock::VerifyAndClear(&observer); | 960 testing::Mock::VerifyAndClear(&observer); |
| 977 | 961 |
| 978 // Cleanup. | 962 // Cleanup. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 993 | 977 |
| 994 void OnTraceLogDisabled() override { | 978 void OnTraceLogDisabled() override { |
| 995 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); | 979 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); |
| 996 } | 980 } |
| 997 }; | 981 }; |
| 998 | 982 |
| 999 TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) { | 983 TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) { |
| 1000 AfterStateChangeEnabledStateObserver observer; | 984 AfterStateChangeEnabledStateObserver observer; |
| 1001 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 985 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
| 1002 | 986 |
| 1003 TraceLog::GetInstance()->SetEnabled( | 987 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 1004 CategoryFilter("*"), | 988 TraceLog::RECORDING_MODE); |
| 1005 TraceLog::RECORDING_MODE, | |
| 1006 TraceOptions()); | |
| 1007 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 989 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
| 1008 | 990 |
| 1009 TraceLog::GetInstance()->SetDisabled(); | 991 TraceLog::GetInstance()->SetDisabled(); |
| 1010 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); | 992 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); |
| 1011 | 993 |
| 1012 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 994 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
| 1013 } | 995 } |
| 1014 | 996 |
| 1015 // Tests that a state observer can remove itself during a callback. | 997 // Tests that a state observer can remove itself during a callback. |
| 1016 class SelfRemovingEnabledStateObserver | 998 class SelfRemovingEnabledStateObserver |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1027 } | 1009 } |
| 1028 }; | 1010 }; |
| 1029 | 1011 |
| 1030 TEST_F(TraceEventTestFixture, SelfRemovingObserver) { | 1012 TEST_F(TraceEventTestFixture, SelfRemovingObserver) { |
| 1031 ASSERT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); | 1013 ASSERT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); |
| 1032 | 1014 |
| 1033 SelfRemovingEnabledStateObserver observer; | 1015 SelfRemovingEnabledStateObserver observer; |
| 1034 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 1016 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
| 1035 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest()); | 1017 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest()); |
| 1036 | 1018 |
| 1037 TraceLog::GetInstance()->SetEnabled( | 1019 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 1038 CategoryFilter("*"), | 1020 TraceLog::RECORDING_MODE); |
| 1039 TraceLog::RECORDING_MODE, | |
| 1040 TraceOptions()); | |
| 1041 TraceLog::GetInstance()->SetDisabled(); | 1021 TraceLog::GetInstance()->SetDisabled(); |
| 1042 // The observer removed itself on disable. | 1022 // The observer removed itself on disable. |
| 1043 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); | 1023 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); |
| 1044 } | 1024 } |
| 1045 | 1025 |
| 1046 bool IsNewTrace() { | 1026 bool IsNewTrace() { |
| 1047 bool is_new_trace; | 1027 bool is_new_trace; |
| 1048 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); | 1028 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); |
| 1049 return is_new_trace; | 1029 return is_new_trace; |
| 1050 } | 1030 } |
| 1051 | 1031 |
| 1052 TEST_F(TraceEventTestFixture, NewTraceRecording) { | 1032 TEST_F(TraceEventTestFixture, NewTraceRecording) { |
| 1053 ASSERT_FALSE(IsNewTrace()); | 1033 ASSERT_FALSE(IsNewTrace()); |
| 1054 TraceLog::GetInstance()->SetEnabled( | 1034 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 1055 CategoryFilter("*"), | 1035 TraceLog::RECORDING_MODE); |
| 1056 TraceLog::RECORDING_MODE, | |
| 1057 TraceOptions()); | |
| 1058 // First call to IsNewTrace() should succeed. But, the second shouldn't. | 1036 // First call to IsNewTrace() should succeed. But, the second shouldn't. |
| 1059 ASSERT_TRUE(IsNewTrace()); | 1037 ASSERT_TRUE(IsNewTrace()); |
| 1060 ASSERT_FALSE(IsNewTrace()); | 1038 ASSERT_FALSE(IsNewTrace()); |
| 1061 EndTraceAndFlush(); | 1039 EndTraceAndFlush(); |
| 1062 | 1040 |
| 1063 // IsNewTrace() should definitely be false now. | 1041 // IsNewTrace() should definitely be false now. |
| 1064 ASSERT_FALSE(IsNewTrace()); | 1042 ASSERT_FALSE(IsNewTrace()); |
| 1065 | 1043 |
| 1066 // Start another trace. IsNewTrace() should become true again, briefly, as | 1044 // Start another trace. IsNewTrace() should become true again, briefly, as |
| 1067 // before. | 1045 // before. |
| 1068 TraceLog::GetInstance()->SetEnabled( | 1046 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 1069 CategoryFilter("*"), | 1047 TraceLog::RECORDING_MODE); |
| 1070 TraceLog::RECORDING_MODE, | |
| 1071 TraceOptions()); | |
| 1072 ASSERT_TRUE(IsNewTrace()); | 1048 ASSERT_TRUE(IsNewTrace()); |
| 1073 ASSERT_FALSE(IsNewTrace()); | 1049 ASSERT_FALSE(IsNewTrace()); |
| 1074 | 1050 |
| 1075 // Cleanup. | 1051 // Cleanup. |
| 1076 EndTraceAndFlush(); | 1052 EndTraceAndFlush(); |
| 1077 } | 1053 } |
| 1078 | 1054 |
| 1079 | 1055 |
| 1080 // Test that categories work. | 1056 // Test that categories work. |
| 1081 TEST_F(TraceEventTestFixture, Categories) { | 1057 TEST_F(TraceEventTestFixture, Categories) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1116 | 1092 |
| 1117 const std::vector<std::string> empty_categories; | 1093 const std::vector<std::string> empty_categories; |
| 1118 std::vector<std::string> included_categories; | 1094 std::vector<std::string> included_categories; |
| 1119 std::vector<std::string> excluded_categories; | 1095 std::vector<std::string> excluded_categories; |
| 1120 | 1096 |
| 1121 // Test that category filtering works. | 1097 // Test that category filtering works. |
| 1122 | 1098 |
| 1123 // Include nonexistent category -> no events | 1099 // Include nonexistent category -> no events |
| 1124 Clear(); | 1100 Clear(); |
| 1125 included_categories.clear(); | 1101 included_categories.clear(); |
| 1126 TraceLog::GetInstance()->SetEnabled( | 1102 TraceLog::GetInstance()->SetEnabled(TraceConfig("not_found823564786", ""), |
| 1127 CategoryFilter("not_found823564786"), | 1103 TraceLog::RECORDING_MODE); |
| 1128 TraceLog::RECORDING_MODE, | |
| 1129 TraceOptions()); | |
| 1130 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); | 1104 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1131 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); | 1105 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1132 EndTraceAndFlush(); | 1106 EndTraceAndFlush(); |
| 1133 DropTracedMetadataRecords(); | 1107 DropTracedMetadataRecords(); |
| 1134 EXPECT_TRUE(trace_parsed_.empty()); | 1108 EXPECT_TRUE(trace_parsed_.empty()); |
| 1135 | 1109 |
| 1136 // Include existent category -> only events of that category | 1110 // Include existent category -> only events of that category |
| 1137 Clear(); | 1111 Clear(); |
| 1138 included_categories.clear(); | 1112 included_categories.clear(); |
| 1139 TraceLog::GetInstance()->SetEnabled( | 1113 TraceLog::GetInstance()->SetEnabled(TraceConfig("inc", ""), |
| 1140 CategoryFilter("inc"), | 1114 TraceLog::RECORDING_MODE); |
| 1141 TraceLog::RECORDING_MODE, | |
| 1142 TraceOptions()); | |
| 1143 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); | 1115 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1144 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); | 1116 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1145 EndTraceAndFlush(); | 1117 EndTraceAndFlush(); |
| 1146 DropTracedMetadataRecords(); | 1118 DropTracedMetadataRecords(); |
| 1147 EXPECT_TRUE(FindMatchingValue("cat", "inc")); | 1119 EXPECT_TRUE(FindMatchingValue("cat", "inc")); |
| 1148 EXPECT_FALSE(FindNonMatchingValue("cat", "inc")); | 1120 EXPECT_FALSE(FindNonMatchingValue("cat", "inc")); |
| 1149 | 1121 |
| 1150 // Include existent wildcard -> all categories matching wildcard | 1122 // Include existent wildcard -> all categories matching wildcard |
| 1151 Clear(); | 1123 Clear(); |
| 1152 included_categories.clear(); | 1124 included_categories.clear(); |
| 1153 TraceLog::GetInstance()->SetEnabled( | 1125 TraceLog::GetInstance()->SetEnabled( |
| 1154 CategoryFilter("inc_wildcard_*,inc_wildchar_?_end"), | 1126 TraceConfig("inc_wildcard_*,inc_wildchar_?_end", ""), |
| 1155 TraceLog::RECORDING_MODE, | 1127 TraceLog::RECORDING_MODE); |
| 1156 TraceOptions()); | |
| 1157 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included", | 1128 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included", |
| 1158 TRACE_EVENT_SCOPE_THREAD); | 1129 TRACE_EVENT_SCOPE_THREAD); |
| 1159 TRACE_EVENT_INSTANT0("inc_wildcard_", "included", TRACE_EVENT_SCOPE_THREAD); | 1130 TRACE_EVENT_INSTANT0("inc_wildcard_", "included", TRACE_EVENT_SCOPE_THREAD); |
| 1160 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included", | 1131 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included", |
| 1161 TRACE_EVENT_SCOPE_THREAD); | 1132 TRACE_EVENT_SCOPE_THREAD); |
| 1162 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc", | 1133 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc", |
| 1163 TRACE_EVENT_SCOPE_THREAD); | 1134 TRACE_EVENT_SCOPE_THREAD); |
| 1164 TRACE_EVENT_INSTANT0("cat1", "not_inc", TRACE_EVENT_SCOPE_THREAD); | 1135 TRACE_EVENT_INSTANT0("cat1", "not_inc", TRACE_EVENT_SCOPE_THREAD); |
| 1165 TRACE_EVENT_INSTANT0("cat2", "not_inc", TRACE_EVENT_SCOPE_THREAD); | 1136 TRACE_EVENT_INSTANT0("cat2", "not_inc", TRACE_EVENT_SCOPE_THREAD); |
| 1166 TRACE_EVENT_INSTANT0("inc_wildcard_category,other_category", "included", | 1137 TRACE_EVENT_INSTANT0("inc_wildcard_category,other_category", "included", |
| 1167 TRACE_EVENT_SCOPE_THREAD); | 1138 TRACE_EVENT_SCOPE_THREAD); |
| 1168 TRACE_EVENT_INSTANT0( | 1139 TRACE_EVENT_INSTANT0( |
| 1169 "non_included_category,inc_wildcard_category", "included", | 1140 "non_included_category,inc_wildcard_category", "included", |
| 1170 TRACE_EVENT_SCOPE_THREAD); | 1141 TRACE_EVENT_SCOPE_THREAD); |
| 1171 EndTraceAndFlush(); | 1142 EndTraceAndFlush(); |
| 1172 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc")); | 1143 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc")); |
| 1173 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_")); | 1144 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_")); |
| 1174 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end")); | 1145 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end")); |
| 1175 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); | 1146 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); |
| 1176 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_category,other_category")); | 1147 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_category,other_category")); |
| 1177 EXPECT_TRUE(FindMatchingValue("cat", | 1148 EXPECT_TRUE(FindMatchingValue("cat", |
| 1178 "non_included_category,inc_wildcard_category")); | 1149 "non_included_category,inc_wildcard_category")); |
| 1179 | 1150 |
| 1180 included_categories.clear(); | 1151 included_categories.clear(); |
| 1181 | 1152 |
| 1182 // Exclude nonexistent category -> all events | 1153 // Exclude nonexistent category -> all events |
| 1183 Clear(); | 1154 Clear(); |
| 1184 TraceLog::GetInstance()->SetEnabled( | 1155 TraceLog::GetInstance()->SetEnabled(TraceConfig("-not_found823564786", ""), |
| 1185 CategoryFilter("-not_found823564786"), | 1156 TraceLog::RECORDING_MODE); |
| 1186 TraceLog::RECORDING_MODE, | |
| 1187 TraceOptions()); | |
| 1188 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); | 1157 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1189 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); | 1158 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1190 TRACE_EVENT_INSTANT0("category1,category2", "name", TRACE_EVENT_SCOPE_THREAD); | 1159 TRACE_EVENT_INSTANT0("category1,category2", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1191 EndTraceAndFlush(); | 1160 EndTraceAndFlush(); |
| 1192 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); | 1161 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); |
| 1193 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); | 1162 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); |
| 1194 EXPECT_TRUE(FindMatchingValue("cat", "category1,category2")); | 1163 EXPECT_TRUE(FindMatchingValue("cat", "category1,category2")); |
| 1195 | 1164 |
| 1196 // Exclude existent category -> only events of other categories | 1165 // Exclude existent category -> only events of other categories |
| 1197 Clear(); | 1166 Clear(); |
| 1198 TraceLog::GetInstance()->SetEnabled( | 1167 TraceLog::GetInstance()->SetEnabled(TraceConfig("-inc", ""), |
| 1199 CategoryFilter("-inc"), | 1168 TraceLog::RECORDING_MODE); |
| 1200 TraceLog::RECORDING_MODE, | |
| 1201 TraceOptions()); | |
| 1202 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); | 1169 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1203 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); | 1170 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1204 TRACE_EVENT_INSTANT0("inc2,inc", "name", TRACE_EVENT_SCOPE_THREAD); | 1171 TRACE_EVENT_INSTANT0("inc2,inc", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1205 TRACE_EVENT_INSTANT0("inc,inc2", "name", TRACE_EVENT_SCOPE_THREAD); | 1172 TRACE_EVENT_INSTANT0("inc,inc2", "name", TRACE_EVENT_SCOPE_THREAD); |
| 1206 EndTraceAndFlush(); | 1173 EndTraceAndFlush(); |
| 1207 EXPECT_TRUE(FindMatchingValue("cat", "inc2")); | 1174 EXPECT_TRUE(FindMatchingValue("cat", "inc2")); |
| 1208 EXPECT_FALSE(FindMatchingValue("cat", "inc")); | 1175 EXPECT_FALSE(FindMatchingValue("cat", "inc")); |
| 1209 EXPECT_TRUE(FindMatchingValue("cat", "inc2,inc")); | 1176 EXPECT_TRUE(FindMatchingValue("cat", "inc2,inc")); |
| 1210 EXPECT_TRUE(FindMatchingValue("cat", "inc,inc2")); | 1177 EXPECT_TRUE(FindMatchingValue("cat", "inc,inc2")); |
| 1211 | 1178 |
| 1212 // Exclude existent wildcard -> all categories not matching wildcard | 1179 // Exclude existent wildcard -> all categories not matching wildcard |
| 1213 Clear(); | 1180 Clear(); |
| 1214 TraceLog::GetInstance()->SetEnabled( | 1181 TraceLog::GetInstance()->SetEnabled( |
| 1215 CategoryFilter("-inc_wildcard_*,-inc_wildchar_?_end"), | 1182 TraceConfig("-inc_wildcard_*,-inc_wildchar_?_end", ""), |
| 1216 TraceLog::RECORDING_MODE, | 1183 TraceLog::RECORDING_MODE); |
| 1217 TraceOptions()); | |
| 1218 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc", | 1184 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc", |
| 1219 TRACE_EVENT_SCOPE_THREAD); | 1185 TRACE_EVENT_SCOPE_THREAD); |
| 1220 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc", | 1186 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc", |
| 1221 TRACE_EVENT_SCOPE_THREAD); | 1187 TRACE_EVENT_SCOPE_THREAD); |
| 1222 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc", | 1188 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc", |
| 1223 TRACE_EVENT_SCOPE_THREAD); | 1189 TRACE_EVENT_SCOPE_THREAD); |
| 1224 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included", | 1190 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included", |
| 1225 TRACE_EVENT_SCOPE_THREAD); | 1191 TRACE_EVENT_SCOPE_THREAD); |
| 1226 TRACE_EVENT_INSTANT0("cat1", "included", TRACE_EVENT_SCOPE_THREAD); | 1192 TRACE_EVENT_INSTANT0("cat1", "included", TRACE_EVENT_SCOPE_THREAD); |
| 1227 TRACE_EVENT_INSTANT0("cat2", "included", TRACE_EVENT_SCOPE_THREAD); | 1193 TRACE_EVENT_INSTANT0("cat2", "included", TRACE_EVENT_SCOPE_THREAD); |
| (...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1726 TraceLog::GetInstance()->SetDisabled(); | 1692 TraceLog::GetInstance()->SetDisabled(); |
| 1727 | 1693 |
| 1728 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); | 1694 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); |
| 1729 EXPECT_EQ(1, a); | 1695 EXPECT_EQ(1, a); |
| 1730 | 1696 |
| 1731 EndTraceAndFlush(); | 1697 EndTraceAndFlush(); |
| 1732 } | 1698 } |
| 1733 | 1699 |
| 1734 TEST_F(TraceEventTestFixture, TraceEnableDisable) { | 1700 TEST_F(TraceEventTestFixture, TraceEnableDisable) { |
| 1735 TraceLog* trace_log = TraceLog::GetInstance(); | 1701 TraceLog* trace_log = TraceLog::GetInstance(); |
| 1736 CategoryFilter cf_inc_all("*"); | 1702 TraceConfig tc_inc_all("*", ""); |
| 1737 trace_log->SetEnabled(cf_inc_all, | 1703 trace_log->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE); |
| 1738 TraceLog::RECORDING_MODE, | |
| 1739 TraceOptions()); | |
| 1740 EXPECT_TRUE(trace_log->IsEnabled()); | 1704 EXPECT_TRUE(trace_log->IsEnabled()); |
| 1741 trace_log->SetDisabled(); | 1705 trace_log->SetDisabled(); |
| 1742 EXPECT_FALSE(trace_log->IsEnabled()); | 1706 EXPECT_FALSE(trace_log->IsEnabled()); |
| 1743 | 1707 |
| 1744 trace_log->SetEnabled(cf_inc_all, | 1708 trace_log->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE); |
| 1745 TraceLog::RECORDING_MODE, | |
| 1746 TraceOptions()); | |
| 1747 EXPECT_TRUE(trace_log->IsEnabled()); | 1709 EXPECT_TRUE(trace_log->IsEnabled()); |
| 1748 const std::vector<std::string> empty; | 1710 const std::vector<std::string> empty; |
| 1749 trace_log->SetEnabled(CategoryFilter(), | 1711 trace_log->SetEnabled(TraceConfig(), TraceLog::RECORDING_MODE); |
| 1750 TraceLog::RECORDING_MODE, | |
| 1751 TraceOptions()); | |
| 1752 EXPECT_TRUE(trace_log->IsEnabled()); | 1712 EXPECT_TRUE(trace_log->IsEnabled()); |
| 1753 trace_log->SetDisabled(); | 1713 trace_log->SetDisabled(); |
| 1754 EXPECT_FALSE(trace_log->IsEnabled()); | 1714 EXPECT_FALSE(trace_log->IsEnabled()); |
| 1755 trace_log->SetDisabled(); | 1715 trace_log->SetDisabled(); |
| 1756 EXPECT_FALSE(trace_log->IsEnabled()); | 1716 EXPECT_FALSE(trace_log->IsEnabled()); |
| 1757 } | 1717 } |
| 1758 | 1718 |
| 1759 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) { | 1719 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) { |
| 1760 TraceLog* trace_log = TraceLog::GetInstance(); | 1720 TraceLog* trace_log = TraceLog::GetInstance(); |
| 1761 trace_log->SetEnabled(CategoryFilter("foo,bar"), | 1721 trace_log->SetEnabled(TraceConfig("foo,bar", ""), TraceLog::RECORDING_MODE); |
| 1762 TraceLog::RECORDING_MODE, | |
| 1763 TraceOptions()); | |
| 1764 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo")); | 1722 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo")); |
| 1765 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); | 1723 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); |
| 1766 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); | 1724 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); |
| 1767 trace_log->SetEnabled(CategoryFilter("foo2"), | 1725 trace_log->SetEnabled(TraceConfig("foo2", ""), TraceLog::RECORDING_MODE); |
| 1768 TraceLog::RECORDING_MODE, | |
| 1769 TraceOptions()); | |
| 1770 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo2")); | 1726 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo2")); |
| 1771 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); | 1727 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); |
| 1772 // The "" becomes the default catergory set when applied. | 1728 // The "" becomes the default catergory set when applied. |
| 1773 trace_log->SetEnabled(CategoryFilter(), | 1729 trace_log->SetEnabled(TraceConfig(), TraceLog::RECORDING_MODE); |
| 1774 TraceLog::RECORDING_MODE, | |
| 1775 TraceOptions()); | |
| 1776 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo")); | 1730 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo")); |
| 1777 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz")); | 1731 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz")); |
| 1778 EXPECT_STREQ("-*Debug,-*Test", | 1732 EXPECT_STREQ( |
| 1779 trace_log->GetCurrentCategoryFilter().ToString().c_str()); | 1733 "-*Debug,-*Test", |
| 1734 trace_log->GetCurrentTraceConfig().ToCategoryFilterString().c_str()); |
| 1780 trace_log->SetDisabled(); | 1735 trace_log->SetDisabled(); |
| 1781 trace_log->SetDisabled(); | 1736 trace_log->SetDisabled(); |
| 1782 trace_log->SetDisabled(); | 1737 trace_log->SetDisabled(); |
| 1783 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo")); | 1738 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo")); |
| 1784 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); | 1739 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); |
| 1785 | 1740 |
| 1786 trace_log->SetEnabled(CategoryFilter("-foo,-bar"), | 1741 trace_log->SetEnabled(TraceConfig("-foo,-bar", ""), TraceLog::RECORDING_MODE); |
| 1787 TraceLog::RECORDING_MODE, | |
| 1788 TraceOptions()); | |
| 1789 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo")); | 1742 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo")); |
| 1790 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz")); | 1743 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz")); |
| 1791 trace_log->SetEnabled(CategoryFilter("moo"), | 1744 trace_log->SetEnabled(TraceConfig("moo", ""), TraceLog::RECORDING_MODE); |
| 1792 TraceLog::RECORDING_MODE, | |
| 1793 TraceOptions()); | |
| 1794 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz")); | 1745 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz")); |
| 1795 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("moo")); | 1746 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("moo")); |
| 1796 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo")); | 1747 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo")); |
| 1797 EXPECT_STREQ("-foo,-bar", | 1748 EXPECT_STREQ( |
| 1798 trace_log->GetCurrentCategoryFilter().ToString().c_str()); | 1749 "-foo,-bar", |
| 1750 trace_log->GetCurrentTraceConfig().ToCategoryFilterString().c_str()); |
| 1799 trace_log->SetDisabled(); | 1751 trace_log->SetDisabled(); |
| 1800 trace_log->SetDisabled(); | 1752 trace_log->SetDisabled(); |
| 1801 | 1753 |
| 1802 // Make sure disabled categories aren't cleared if we set in the second. | 1754 // Make sure disabled categories aren't cleared if we set in the second. |
| 1803 trace_log->SetEnabled(CategoryFilter("disabled-by-default-cc,foo"), | 1755 trace_log->SetEnabled(TraceConfig("disabled-by-default-cc,foo", ""), |
| 1804 TraceLog::RECORDING_MODE, | 1756 TraceLog::RECORDING_MODE); |
| 1805 TraceOptions()); | |
| 1806 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("bar")); | 1757 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("bar")); |
| 1807 trace_log->SetEnabled(CategoryFilter("disabled-by-default-gpu"), | 1758 trace_log->SetEnabled(TraceConfig("disabled-by-default-gpu", ""), |
| 1808 TraceLog::RECORDING_MODE, | 1759 TraceLog::RECORDING_MODE); |
| 1809 TraceOptions()); | |
| 1810 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-cc")); | 1760 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-cc")); |
| 1811 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-gpu")); | 1761 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-gpu")); |
| 1812 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); | 1762 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); |
| 1813 EXPECT_STREQ("disabled-by-default-cc,disabled-by-default-gpu", | 1763 EXPECT_STREQ( |
| 1814 trace_log->GetCurrentCategoryFilter().ToString().c_str()); | 1764 "disabled-by-default-cc,disabled-by-default-gpu", |
| 1765 trace_log->GetCurrentTraceConfig().ToCategoryFilterString().c_str()); |
| 1815 trace_log->SetDisabled(); | 1766 trace_log->SetDisabled(); |
| 1816 trace_log->SetDisabled(); | 1767 trace_log->SetDisabled(); |
| 1817 } | 1768 } |
| 1818 | 1769 |
| 1819 TEST_F(TraceEventTestFixture, TraceSampling) { | 1770 TEST_F(TraceEventTestFixture, TraceSampling) { |
| 1820 TraceOptions trace_options(RECORD_UNTIL_FULL); | 1771 TraceLog::GetInstance()->SetEnabled( |
| 1821 trace_options.enable_sampling = true; | 1772 TraceConfig(kRecordAllCategoryFilter, "record-until-full,enable-sampling"), |
| 1822 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 1773 TraceLog::RECORDING_MODE); |
| 1823 TraceLog::RECORDING_MODE, | |
| 1824 trace_options); | |
| 1825 | 1774 |
| 1826 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Stuff"); | 1775 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Stuff"); |
| 1827 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 1776 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| 1828 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Things"); | 1777 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Things"); |
| 1829 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 1778 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| 1830 | 1779 |
| 1831 EndTraceAndFlush(); | 1780 EndTraceAndFlush(); |
| 1832 | 1781 |
| 1833 // Make sure we hit at least once. | 1782 // Make sure we hit at least once. |
| 1834 EXPECT_TRUE(FindNamePhase("Stuff", "P")); | 1783 EXPECT_TRUE(FindNamePhase("Stuff", "P")); |
| 1835 EXPECT_TRUE(FindNamePhase("Things", "P")); | 1784 EXPECT_TRUE(FindNamePhase("Things", "P")); |
| 1836 } | 1785 } |
| 1837 | 1786 |
| 1838 TEST_F(TraceEventTestFixture, TraceSamplingScope) { | 1787 TEST_F(TraceEventTestFixture, TraceSamplingScope) { |
| 1839 TraceOptions trace_options(RECORD_UNTIL_FULL); | 1788 TraceLog::GetInstance()->SetEnabled( |
| 1840 trace_options.enable_sampling = true; | 1789 TraceConfig(kRecordAllCategoryFilter, "record-until-full,enable-sampling"), |
| 1841 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 1790 TraceLog::RECORDING_MODE); |
| 1842 TraceLog::RECORDING_MODE, | |
| 1843 trace_options); | |
| 1844 | 1791 |
| 1845 TRACE_EVENT_SCOPED_SAMPLING_STATE("AAA", "name"); | 1792 TRACE_EVENT_SCOPED_SAMPLING_STATE("AAA", "name"); |
| 1846 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 1793 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| 1847 { | 1794 { |
| 1848 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA"); | 1795 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA"); |
| 1849 TRACE_EVENT_SCOPED_SAMPLING_STATE("BBB", "name"); | 1796 TRACE_EVENT_SCOPED_SAMPLING_STATE("BBB", "name"); |
| 1850 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 1797 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| 1851 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "BBB"); | 1798 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "BBB"); |
| 1852 } | 1799 } |
| 1853 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 1800 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1864 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 1811 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| 1865 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); | 1812 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); |
| 1866 } | 1813 } |
| 1867 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 1814 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| 1868 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); | 1815 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); |
| 1869 | 1816 |
| 1870 EndTraceAndFlush(); | 1817 EndTraceAndFlush(); |
| 1871 } | 1818 } |
| 1872 | 1819 |
| 1873 TEST_F(TraceEventTestFixture, TraceContinuousSampling) { | 1820 TEST_F(TraceEventTestFixture, TraceContinuousSampling) { |
| 1874 TraceOptions trace_options(RECORD_UNTIL_FULL); | 1821 TraceLog::GetInstance()->SetEnabled( |
| 1875 trace_options.enable_sampling = true; | 1822 TraceConfig(kRecordAllCategoryFilter, "record-until-full,enable-sampling"), |
| 1876 | 1823 TraceLog::MONITORING_MODE); |
| 1877 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | |
| 1878 TraceLog::MONITORING_MODE, | |
| 1879 trace_options); | |
| 1880 | 1824 |
| 1881 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "AAA"); | 1825 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "AAA"); |
| 1882 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 1826 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| 1883 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "BBB"); | 1827 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "BBB"); |
| 1884 TraceLog::GetInstance()->WaitSamplingEventForTesting(); | 1828 TraceLog::GetInstance()->WaitSamplingEventForTesting(); |
| 1885 | 1829 |
| 1886 FlushMonitoring(); | 1830 FlushMonitoring(); |
| 1887 | 1831 |
| 1888 // Make sure we can get the profiled data. | 1832 // Make sure we can get the profiled data. |
| 1889 EXPECT_TRUE(FindNamePhase("AAA", "P")); | 1833 EXPECT_TRUE(FindNamePhase("AAA", "P")); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1926 void AppendAsTraceFormat(std::string* out) const override { | 1870 void AppendAsTraceFormat(std::string* out) const override { |
| 1927 out->append("{\"foo\":1}"); | 1871 out->append("{\"foo\":1}"); |
| 1928 } | 1872 } |
| 1929 | 1873 |
| 1930 private: | 1874 private: |
| 1931 ~MyData() override {} | 1875 ~MyData() override {} |
| 1932 DISALLOW_COPY_AND_ASSIGN(MyData); | 1876 DISALLOW_COPY_AND_ASSIGN(MyData); |
| 1933 }; | 1877 }; |
| 1934 | 1878 |
| 1935 TEST_F(TraceEventTestFixture, ConvertableTypes) { | 1879 TEST_F(TraceEventTestFixture, ConvertableTypes) { |
| 1936 TraceLog::GetInstance()->SetEnabled( | 1880 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 1937 CategoryFilter("*"), | 1881 TraceLog::RECORDING_MODE); |
| 1938 TraceLog::RECORDING_MODE, | |
| 1939 TraceOptions()); | |
| 1940 | 1882 |
| 1941 scoped_refptr<ConvertableToTraceFormat> data(new MyData()); | 1883 scoped_refptr<ConvertableToTraceFormat> data(new MyData()); |
| 1942 scoped_refptr<ConvertableToTraceFormat> data1(new MyData()); | 1884 scoped_refptr<ConvertableToTraceFormat> data1(new MyData()); |
| 1943 scoped_refptr<ConvertableToTraceFormat> data2(new MyData()); | 1885 scoped_refptr<ConvertableToTraceFormat> data2(new MyData()); |
| 1944 TRACE_EVENT1("foo", "bar", "data", data); | 1886 TRACE_EVENT1("foo", "bar", "data", data); |
| 1945 TRACE_EVENT2("foo", "baz", | 1887 TRACE_EVENT2("foo", "baz", |
| 1946 "data1", data1, | 1888 "data1", data1, |
| 1947 "data2", data2); | 1889 "data2", data2); |
| 1948 | 1890 |
| 1949 | 1891 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2033 value = NULL; | 1975 value = NULL; |
| 2034 convertable_dict = NULL; | 1976 convertable_dict = NULL; |
| 2035 foo_val = 0; | 1977 foo_val = 0; |
| 2036 EXPECT_TRUE(args_dict->Get("convert", &value)); | 1978 EXPECT_TRUE(args_dict->Get("convert", &value)); |
| 2037 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict)); | 1979 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict)); |
| 2038 EXPECT_TRUE(convertable_dict->GetInteger("foo", &foo_val)); | 1980 EXPECT_TRUE(convertable_dict->GetInteger("foo", &foo_val)); |
| 2039 EXPECT_EQ(1, foo_val); | 1981 EXPECT_EQ(1, foo_val); |
| 2040 } | 1982 } |
| 2041 | 1983 |
| 2042 TEST_F(TraceEventTestFixture, PrimitiveArgs) { | 1984 TEST_F(TraceEventTestFixture, PrimitiveArgs) { |
| 2043 TraceLog::GetInstance()->SetEnabled( | 1985 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 2044 CategoryFilter("*"), | 1986 TraceLog::RECORDING_MODE); |
| 2045 TraceLog::RECORDING_MODE, | |
| 2046 TraceOptions()); | |
| 2047 | 1987 |
| 2048 TRACE_EVENT1("foo", "event1", "int_one", 1); | 1988 TRACE_EVENT1("foo", "event1", "int_one", 1); |
| 2049 TRACE_EVENT1("foo", "event2", "int_neg_ten", -10); | 1989 TRACE_EVENT1("foo", "event2", "int_neg_ten", -10); |
| 2050 TRACE_EVENT1("foo", "event3", "float_one", 1.0f); | 1990 TRACE_EVENT1("foo", "event3", "float_one", 1.0f); |
| 2051 TRACE_EVENT1("foo", "event4", "float_half", .5f); | 1991 TRACE_EVENT1("foo", "event4", "float_half", .5f); |
| 2052 TRACE_EVENT1("foo", "event5", "float_neghalf", -.5f); | 1992 TRACE_EVENT1("foo", "event5", "float_neghalf", -.5f); |
| 2053 TRACE_EVENT1("foo", "event6", "float_infinity", | 1993 TRACE_EVENT1("foo", "event6", "float_infinity", |
| 2054 std::numeric_limits<float>::infinity()); | 1994 std::numeric_limits<float>::infinity()); |
| 2055 TRACE_EVENT1("foo", "event6b", "float_neg_infinity", | 1995 TRACE_EVENT1("foo", "event6b", "float_neg_infinity", |
| 2056 -std::numeric_limits<float>::infinity()); | 1996 -std::numeric_limits<float>::infinity()); |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2198 EXPECT_EQ(0, int_value); | 2138 EXPECT_EQ(0, int_value); |
| 2199 | 2139 |
| 2200 dict = FindNamePhase("event15", "X"); | 2140 dict = FindNamePhase("event15", "X"); |
| 2201 ASSERT_TRUE(dict); | 2141 ASSERT_TRUE(dict); |
| 2202 dict->GetDictionary("args", &args_dict); | 2142 dict->GetDictionary("args", &args_dict); |
| 2203 ASSERT_TRUE(args_dict); | 2143 ASSERT_TRUE(args_dict); |
| 2204 EXPECT_TRUE(args_dict->GetInteger("timeticks_one", &int_value)); | 2144 EXPECT_TRUE(args_dict->GetInteger("timeticks_one", &int_value)); |
| 2205 EXPECT_EQ(1, int_value); | 2145 EXPECT_EQ(1, int_value); |
| 2206 } | 2146 } |
| 2207 | 2147 |
| 2148 namespace { |
| 2149 |
| 2150 bool IsTraceEventArgsWhitelisted(const char* category_group_name, |
| 2151 const char* event_name) { |
| 2152 if (MatchPattern(category_group_name, "toplevel") && |
| 2153 MatchPattern(event_name, "*")) { |
| 2154 return true; |
| 2155 } |
| 2156 |
| 2157 return false; |
| 2158 } |
| 2159 |
| 2160 } // namespace |
| 2161 |
| 2162 TEST_F(TraceEventTestFixture, ArgsWhitelisting) { |
| 2163 TraceLog::GetInstance()->SetArgumentFilterPredicate( |
| 2164 base::Bind(&IsTraceEventArgsWhitelisted)); |
| 2165 |
| 2166 TraceLog::GetInstance()->SetEnabled( |
| 2167 TraceConfig(kRecordAllCategoryFilter, "enable-argument-filter"), |
| 2168 TraceLog::RECORDING_MODE); |
| 2169 |
| 2170 TRACE_EVENT1("toplevel", "event1", "int_one", 1); |
| 2171 TRACE_EVENT1("whitewashed", "event2", "int_two", 1); |
| 2172 EndTraceAndFlush(); |
| 2173 |
| 2174 const DictionaryValue* args_dict = NULL; |
| 2175 DictionaryValue* dict = NULL; |
| 2176 int int_value; |
| 2177 |
| 2178 dict = FindNamePhase("event1", "X"); |
| 2179 ASSERT_TRUE(dict); |
| 2180 dict->GetDictionary("args", &args_dict); |
| 2181 ASSERT_TRUE(args_dict); |
| 2182 EXPECT_TRUE(args_dict->GetInteger("int_one", &int_value)); |
| 2183 EXPECT_EQ(1, int_value); |
| 2184 |
| 2185 dict = FindNamePhase("event2", "X"); |
| 2186 ASSERT_TRUE(dict); |
| 2187 dict->GetDictionary("args", &args_dict); |
| 2188 ASSERT_TRUE(args_dict); |
| 2189 EXPECT_FALSE(args_dict->GetInteger("int_two", &int_value)); |
| 2190 EXPECT_TRUE(args_dict->GetInteger("stripped", &int_value)); |
| 2191 } |
| 2192 |
| 2208 class TraceEventCallbackTest : public TraceEventTestFixture { | 2193 class TraceEventCallbackTest : public TraceEventTestFixture { |
| 2209 public: | 2194 public: |
| 2210 void SetUp() override { | 2195 void SetUp() override { |
| 2211 TraceEventTestFixture::SetUp(); | 2196 TraceEventTestFixture::SetUp(); |
| 2212 ASSERT_EQ(NULL, s_instance); | 2197 ASSERT_EQ(NULL, s_instance); |
| 2213 s_instance = this; | 2198 s_instance = this; |
| 2214 } | 2199 } |
| 2215 void TearDown() override { | 2200 void TearDown() override { |
| 2216 TraceLog::GetInstance()->SetDisabled(); | 2201 TraceLog::GetInstance()->SetDisabled(); |
| 2217 ASSERT_TRUE(s_instance); | 2202 ASSERT_TRUE(s_instance); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2243 const std::string& category, | 2228 const std::string& category, |
| 2244 const std::string& name) { | 2229 const std::string& name) { |
| 2245 EXPECT_EQ(phase, collected_events_phases_[i]); | 2230 EXPECT_EQ(phase, collected_events_phases_[i]); |
| 2246 EXPECT_EQ(category, collected_events_categories_[i]); | 2231 EXPECT_EQ(category, collected_events_categories_[i]); |
| 2247 EXPECT_EQ(name, collected_events_names_[i]); | 2232 EXPECT_EQ(name, collected_events_names_[i]); |
| 2248 } | 2233 } |
| 2249 | 2234 |
| 2250 std::vector<std::string> collected_events_categories_; | 2235 std::vector<std::string> collected_events_categories_; |
| 2251 std::vector<std::string> collected_events_names_; | 2236 std::vector<std::string> collected_events_names_; |
| 2252 std::vector<unsigned char> collected_events_phases_; | 2237 std::vector<unsigned char> collected_events_phases_; |
| 2253 std::vector<TimeTicks> collected_events_timestamps_; | 2238 std::vector<TraceTicks> collected_events_timestamps_; |
| 2254 | 2239 |
| 2255 static TraceEventCallbackTest* s_instance; | 2240 static TraceEventCallbackTest* s_instance; |
| 2256 static void Callback(TimeTicks timestamp, | 2241 static void Callback(TraceTicks timestamp, |
| 2257 char phase, | 2242 char phase, |
| 2258 const unsigned char* category_group_enabled, | 2243 const unsigned char* category_group_enabled, |
| 2259 const char* name, | 2244 const char* name, |
| 2260 unsigned long long id, | 2245 unsigned long long id, |
| 2261 int num_args, | 2246 int num_args, |
| 2262 const char* const arg_names[], | 2247 const char* const arg_names[], |
| 2263 const unsigned char arg_types[], | 2248 const unsigned char arg_types[], |
| 2264 const unsigned long long arg_values[], | 2249 const unsigned long long arg_values[], |
| 2265 unsigned char flags) { | 2250 unsigned char flags) { |
| 2266 s_instance->collected_events_phases_.push_back(phase); | 2251 s_instance->collected_events_phases_.push_back(phase); |
| 2267 s_instance->collected_events_categories_.push_back( | 2252 s_instance->collected_events_categories_.push_back( |
| 2268 TraceLog::GetCategoryGroupName(category_group_enabled)); | 2253 TraceLog::GetCategoryGroupName(category_group_enabled)); |
| 2269 s_instance->collected_events_names_.push_back(name); | 2254 s_instance->collected_events_names_.push_back(name); |
| 2270 s_instance->collected_events_timestamps_.push_back(timestamp); | 2255 s_instance->collected_events_timestamps_.push_back(timestamp); |
| 2271 } | 2256 } |
| 2272 }; | 2257 }; |
| 2273 | 2258 |
| 2274 TraceEventCallbackTest* TraceEventCallbackTest::s_instance; | 2259 TraceEventCallbackTest* TraceEventCallbackTest::s_instance; |
| 2275 | 2260 |
| 2276 TEST_F(TraceEventCallbackTest, TraceEventCallback) { | 2261 TEST_F(TraceEventCallbackTest, TraceEventCallback) { |
| 2277 TRACE_EVENT_INSTANT0("all", "before enable", TRACE_EVENT_SCOPE_THREAD); | 2262 TRACE_EVENT_INSTANT0("all", "before enable", TRACE_EVENT_SCOPE_THREAD); |
| 2278 TraceLog::GetInstance()->SetEventCallbackEnabled( | 2263 TraceLog::GetInstance()->SetEventCallbackEnabled( |
| 2279 CategoryFilter("*"), Callback); | 2264 TraceConfig(kRecordAllCategoryFilter, ""), Callback); |
| 2280 TRACE_EVENT_INSTANT0("all", "event1", TRACE_EVENT_SCOPE_GLOBAL); | 2265 TRACE_EVENT_INSTANT0("all", "event1", TRACE_EVENT_SCOPE_GLOBAL); |
| 2281 TRACE_EVENT_INSTANT0("all", "event2", TRACE_EVENT_SCOPE_GLOBAL); | 2266 TRACE_EVENT_INSTANT0("all", "event2", TRACE_EVENT_SCOPE_GLOBAL); |
| 2282 { | 2267 { |
| 2283 TRACE_EVENT0("all", "duration"); | 2268 TRACE_EVENT0("all", "duration"); |
| 2284 TRACE_EVENT_INSTANT0("all", "event3", TRACE_EVENT_SCOPE_GLOBAL); | 2269 TRACE_EVENT_INSTANT0("all", "event3", TRACE_EVENT_SCOPE_GLOBAL); |
| 2285 } | 2270 } |
| 2286 TraceLog::GetInstance()->SetEventCallbackDisabled(); | 2271 TraceLog::GetInstance()->SetEventCallbackDisabled(); |
| 2287 TRACE_EVENT_INSTANT0("all", "after callback removed", | 2272 TRACE_EVENT_INSTANT0("all", "after callback removed", |
| 2288 TRACE_EVENT_SCOPE_GLOBAL); | 2273 TRACE_EVENT_SCOPE_GLOBAL); |
| 2289 ASSERT_EQ(5u, collected_events_names_.size()); | 2274 ASSERT_EQ(5u, collected_events_names_.size()); |
| 2290 EXPECT_EQ("event1", collected_events_names_[0]); | 2275 EXPECT_EQ("event1", collected_events_names_[0]); |
| 2291 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[0]); | 2276 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[0]); |
| 2292 EXPECT_EQ("event2", collected_events_names_[1]); | 2277 EXPECT_EQ("event2", collected_events_names_[1]); |
| 2293 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[1]); | 2278 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[1]); |
| 2294 EXPECT_EQ("duration", collected_events_names_[2]); | 2279 EXPECT_EQ("duration", collected_events_names_[2]); |
| 2295 EXPECT_EQ(TRACE_EVENT_PHASE_BEGIN, collected_events_phases_[2]); | 2280 EXPECT_EQ(TRACE_EVENT_PHASE_BEGIN, collected_events_phases_[2]); |
| 2296 EXPECT_EQ("event3", collected_events_names_[3]); | 2281 EXPECT_EQ("event3", collected_events_names_[3]); |
| 2297 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[3]); | 2282 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[3]); |
| 2298 EXPECT_EQ("duration", collected_events_names_[4]); | 2283 EXPECT_EQ("duration", collected_events_names_[4]); |
| 2299 EXPECT_EQ(TRACE_EVENT_PHASE_END, collected_events_phases_[4]); | 2284 EXPECT_EQ(TRACE_EVENT_PHASE_END, collected_events_phases_[4]); |
| 2300 for (size_t i = 1; i < collected_events_timestamps_.size(); i++) { | 2285 for (size_t i = 1; i < collected_events_timestamps_.size(); i++) { |
| 2301 EXPECT_LE(collected_events_timestamps_[i - 1], | 2286 EXPECT_LE(collected_events_timestamps_[i - 1], |
| 2302 collected_events_timestamps_[i]); | 2287 collected_events_timestamps_[i]); |
| 2303 } | 2288 } |
| 2304 } | 2289 } |
| 2305 | 2290 |
| 2306 TEST_F(TraceEventCallbackTest, TraceEventCallbackWhileFull) { | 2291 TEST_F(TraceEventCallbackTest, TraceEventCallbackWhileFull) { |
| 2307 TraceLog::GetInstance()->SetEnabled( | 2292 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 2308 CategoryFilter("*"), | 2293 TraceLog::RECORDING_MODE); |
| 2309 TraceLog::RECORDING_MODE, | |
| 2310 TraceOptions()); | |
| 2311 do { | 2294 do { |
| 2312 TRACE_EVENT_INSTANT0("all", "badger badger", TRACE_EVENT_SCOPE_GLOBAL); | 2295 TRACE_EVENT_INSTANT0("all", "badger badger", TRACE_EVENT_SCOPE_GLOBAL); |
| 2313 } while (!TraceLog::GetInstance()->BufferIsFull()); | 2296 } while (!TraceLog::GetInstance()->BufferIsFull()); |
| 2314 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("*"), | 2297 TraceLog::GetInstance()->SetEventCallbackEnabled( |
| 2315 Callback); | 2298 TraceConfig(kRecordAllCategoryFilter, ""), Callback); |
| 2316 TRACE_EVENT_INSTANT0("all", "a snake", TRACE_EVENT_SCOPE_GLOBAL); | 2299 TRACE_EVENT_INSTANT0("all", "a snake", TRACE_EVENT_SCOPE_GLOBAL); |
| 2317 TraceLog::GetInstance()->SetEventCallbackDisabled(); | 2300 TraceLog::GetInstance()->SetEventCallbackDisabled(); |
| 2318 ASSERT_EQ(1u, collected_events_names_.size()); | 2301 ASSERT_EQ(1u, collected_events_names_.size()); |
| 2319 EXPECT_EQ("a snake", collected_events_names_[0]); | 2302 EXPECT_EQ("a snake", collected_events_names_[0]); |
| 2320 } | 2303 } |
| 2321 | 2304 |
| 2322 // 1: Enable callback, enable recording, disable callback, disable recording. | 2305 // 1: Enable callback, enable recording, disable callback, disable recording. |
| 2323 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording1) { | 2306 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording1) { |
| 2324 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2307 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2325 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2308 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2326 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"), | 2309 TraceLog::GetInstance()->SetEventCallbackEnabled(TraceConfig("callback", ""), |
| 2327 Callback); | 2310 Callback); |
| 2328 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2311 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2329 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2312 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2330 TraceLog::GetInstance()->SetEnabled( | 2313 TraceLog::GetInstance()->SetEnabled(TraceConfig("recording", ""), |
| 2331 CategoryFilter("recording"), | 2314 TraceLog::RECORDING_MODE); |
| 2332 TraceLog::RECORDING_MODE, | |
| 2333 TraceOptions()); | |
| 2334 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2315 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2335 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2316 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2336 TraceLog::GetInstance()->SetEventCallbackDisabled(); | 2317 TraceLog::GetInstance()->SetEventCallbackDisabled(); |
| 2337 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2318 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2338 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2319 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2339 EndTraceAndFlush(); | 2320 EndTraceAndFlush(); |
| 2340 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2321 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2341 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2322 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2342 | 2323 |
| 2343 DropTracedMetadataRecords(); | 2324 DropTracedMetadataRecords(); |
| 2344 VerifyCallbackAndRecordedEvents(2, 2); | 2325 VerifyCallbackAndRecordedEvents(2, 2); |
| 2345 } | 2326 } |
| 2346 | 2327 |
| 2347 // 2: Enable callback, enable recording, disable recording, disable callback. | 2328 // 2: Enable callback, enable recording, disable recording, disable callback. |
| 2348 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording2) { | 2329 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording2) { |
| 2349 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2330 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2350 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2331 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2351 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"), | 2332 TraceLog::GetInstance()->SetEventCallbackEnabled(TraceConfig("callback", ""), |
| 2352 Callback); | 2333 Callback); |
| 2353 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2334 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2354 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2335 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2355 TraceLog::GetInstance()->SetEnabled( | 2336 TraceLog::GetInstance()->SetEnabled(TraceConfig("recording", ""), |
| 2356 CategoryFilter("recording"), | 2337 TraceLog::RECORDING_MODE); |
| 2357 TraceLog::RECORDING_MODE, | |
| 2358 TraceOptions()); | |
| 2359 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2338 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2360 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2339 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2361 EndTraceAndFlush(); | 2340 EndTraceAndFlush(); |
| 2362 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2341 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2363 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2342 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2364 TraceLog::GetInstance()->SetEventCallbackDisabled(); | 2343 TraceLog::GetInstance()->SetEventCallbackDisabled(); |
| 2365 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2344 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2366 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2345 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2367 | 2346 |
| 2368 DropTracedMetadataRecords(); | 2347 DropTracedMetadataRecords(); |
| 2369 VerifyCallbackAndRecordedEvents(3, 1); | 2348 VerifyCallbackAndRecordedEvents(3, 1); |
| 2370 } | 2349 } |
| 2371 | 2350 |
| 2372 // 3: Enable recording, enable callback, disable callback, disable recording. | 2351 // 3: Enable recording, enable callback, disable callback, disable recording. |
| 2373 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording3) { | 2352 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording3) { |
| 2374 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2353 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2375 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2354 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2376 TraceLog::GetInstance()->SetEnabled( | 2355 TraceLog::GetInstance()->SetEnabled(TraceConfig("recording", ""), |
| 2377 CategoryFilter("recording"), | 2356 TraceLog::RECORDING_MODE); |
| 2378 TraceLog::RECORDING_MODE, | |
| 2379 TraceOptions()); | |
| 2380 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2357 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2381 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2358 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2382 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"), | 2359 TraceLog::GetInstance()->SetEventCallbackEnabled(TraceConfig("callback", ""), |
| 2383 Callback); | 2360 Callback); |
| 2384 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2361 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2385 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2362 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2386 TraceLog::GetInstance()->SetEventCallbackDisabled(); | 2363 TraceLog::GetInstance()->SetEventCallbackDisabled(); |
| 2387 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2364 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2388 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2365 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2389 EndTraceAndFlush(); | 2366 EndTraceAndFlush(); |
| 2390 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2367 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2391 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2368 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2392 | 2369 |
| 2393 DropTracedMetadataRecords(); | 2370 DropTracedMetadataRecords(); |
| 2394 VerifyCallbackAndRecordedEvents(1, 3); | 2371 VerifyCallbackAndRecordedEvents(1, 3); |
| 2395 } | 2372 } |
| 2396 | 2373 |
| 2397 // 4: Enable recording, enable callback, disable recording, disable callback. | 2374 // 4: Enable recording, enable callback, disable recording, disable callback. |
| 2398 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording4) { | 2375 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording4) { |
| 2399 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2376 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2400 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2377 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2401 TraceLog::GetInstance()->SetEnabled( | 2378 TraceLog::GetInstance()->SetEnabled(TraceConfig("recording", ""), |
| 2402 CategoryFilter("recording"), | 2379 TraceLog::RECORDING_MODE); |
| 2403 TraceLog::RECORDING_MODE, | |
| 2404 TraceOptions()); | |
| 2405 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2380 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2406 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2381 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2407 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"), | 2382 TraceLog::GetInstance()->SetEventCallbackEnabled(TraceConfig("callback", ""), |
| 2408 Callback); | 2383 Callback); |
| 2409 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2384 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2410 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2385 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2411 EndTraceAndFlush(); | 2386 EndTraceAndFlush(); |
| 2412 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2387 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2413 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); | 2388 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); |
| 2414 TraceLog::GetInstance()->SetEventCallbackDisabled(); | 2389 TraceLog::GetInstance()->SetEventCallbackDisabled(); |
| 2415 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2390 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2416 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); | 2391 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); |
| 2417 | 2392 |
| 2418 DropTracedMetadataRecords(); | 2393 DropTracedMetadataRecords(); |
| 2419 VerifyCallbackAndRecordedEvents(2, 2); | 2394 VerifyCallbackAndRecordedEvents(2, 2); |
| 2420 } | 2395 } |
| 2421 | 2396 |
| 2422 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecordingDuration) { | 2397 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecordingDuration) { |
| 2423 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("*"), | 2398 TraceLog::GetInstance()->SetEventCallbackEnabled( |
| 2424 Callback); | 2399 TraceConfig(kRecordAllCategoryFilter, ""), Callback); |
| 2425 { | 2400 { |
| 2426 TRACE_EVENT0("callback", "duration1"); | 2401 TRACE_EVENT0("callback", "duration1"); |
| 2427 TraceLog::GetInstance()->SetEnabled( | 2402 TraceLog::GetInstance()->SetEnabled( |
| 2428 CategoryFilter("*"), | 2403 TraceConfig(kRecordAllCategoryFilter, ""), TraceLog::RECORDING_MODE); |
| 2429 TraceLog::RECORDING_MODE, | |
| 2430 TraceOptions()); | |
| 2431 TRACE_EVENT0("callback", "duration2"); | 2404 TRACE_EVENT0("callback", "duration2"); |
| 2432 EndTraceAndFlush(); | 2405 EndTraceAndFlush(); |
| 2433 TRACE_EVENT0("callback", "duration3"); | 2406 TRACE_EVENT0("callback", "duration3"); |
| 2434 } | 2407 } |
| 2435 TraceLog::GetInstance()->SetEventCallbackDisabled(); | 2408 TraceLog::GetInstance()->SetEventCallbackDisabled(); |
| 2436 | 2409 |
| 2437 ASSERT_EQ(6u, collected_events_names_.size()); | 2410 ASSERT_EQ(6u, collected_events_names_.size()); |
| 2438 VerifyCollectedEvent(0, TRACE_EVENT_PHASE_BEGIN, "callback", "duration1"); | 2411 VerifyCollectedEvent(0, TRACE_EVENT_PHASE_BEGIN, "callback", "duration1"); |
| 2439 VerifyCollectedEvent(1, TRACE_EVENT_PHASE_BEGIN, "callback", "duration2"); | 2412 VerifyCollectedEvent(1, TRACE_EVENT_PHASE_BEGIN, "callback", "duration2"); |
| 2440 VerifyCollectedEvent(2, TRACE_EVENT_PHASE_BEGIN, "callback", "duration3"); | 2413 VerifyCollectedEvent(2, TRACE_EVENT_PHASE_BEGIN, "callback", "duration3"); |
| 2441 VerifyCollectedEvent(3, TRACE_EVENT_PHASE_END, "callback", "duration3"); | 2414 VerifyCollectedEvent(3, TRACE_EVENT_PHASE_END, "callback", "duration3"); |
| 2442 VerifyCollectedEvent(4, TRACE_EVENT_PHASE_END, "callback", "duration2"); | 2415 VerifyCollectedEvent(4, TRACE_EVENT_PHASE_END, "callback", "duration2"); |
| 2443 VerifyCollectedEvent(5, TRACE_EVENT_PHASE_END, "callback", "duration1"); | 2416 VerifyCollectedEvent(5, TRACE_EVENT_PHASE_END, "callback", "duration1"); |
| 2444 } | 2417 } |
| 2445 | 2418 |
| 2446 TEST_F(TraceEventTestFixture, TraceBufferVectorReportFull) { | 2419 TEST_F(TraceEventTestFixture, TraceBufferVectorReportFull) { |
| 2447 TraceLog* trace_log = TraceLog::GetInstance(); | 2420 TraceLog* trace_log = TraceLog::GetInstance(); |
| 2448 trace_log->SetEnabled(CategoryFilter("*"), | 2421 trace_log->SetEnabled( |
| 2449 TraceLog::RECORDING_MODE, | 2422 TraceConfig(kRecordAllCategoryFilter, ""), TraceLog::RECORDING_MODE); |
| 2450 TraceOptions()); | |
| 2451 trace_log->logged_events_.reset( | 2423 trace_log->logged_events_.reset( |
| 2452 trace_log->CreateTraceBufferVectorOfSize(100)); | 2424 trace_log->CreateTraceBufferVectorOfSize(100)); |
| 2453 do { | 2425 do { |
| 2454 TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( | 2426 TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( |
| 2455 "all", "with_timestamp", 0, 0, | 2427 "all", "with_timestamp", 0, 0, TraceTicks::Now().ToInternalValue()); |
| 2456 TimeTicks::NowFromSystemTraceTime().ToInternalValue()); | |
| 2457 TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0( | 2428 TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0( |
| 2458 "all", "with_timestamp", 0, 0, | 2429 "all", "with_timestamp", 0, 0, TraceTicks::Now().ToInternalValue()); |
| 2459 TimeTicks::NowFromSystemTraceTime().ToInternalValue()); | |
| 2460 } while (!trace_log->BufferIsFull()); | 2430 } while (!trace_log->BufferIsFull()); |
| 2461 | 2431 |
| 2462 EndTraceAndFlush(); | 2432 EndTraceAndFlush(); |
| 2463 | 2433 |
| 2464 const DictionaryValue* trace_full_metadata = NULL; | 2434 const DictionaryValue* trace_full_metadata = NULL; |
| 2465 | 2435 |
| 2466 trace_full_metadata = FindTraceEntry(trace_parsed_, | 2436 trace_full_metadata = FindTraceEntry(trace_parsed_, |
| 2467 "overflowed_at_ts"); | 2437 "overflowed_at_ts"); |
| 2468 std::string phase; | 2438 std::string phase; |
| 2469 double buffer_limit_reached_timestamp = 0; | 2439 double buffer_limit_reached_timestamp = 0; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2485 double last_trace_event_timestamp = 0; | 2455 double last_trace_event_timestamp = 0; |
| 2486 EXPECT_TRUE(trace_parsed_.GetDictionary(trace_parsed_.GetSize() - 1, | 2456 EXPECT_TRUE(trace_parsed_.GetDictionary(trace_parsed_.GetSize() - 1, |
| 2487 &last_trace_event)); | 2457 &last_trace_event)); |
| 2488 EXPECT_TRUE(last_trace_event->GetDouble("ts", &last_trace_event_timestamp)); | 2458 EXPECT_TRUE(last_trace_event->GetDouble("ts", &last_trace_event_timestamp)); |
| 2489 EXPECT_LE(last_trace_event_timestamp, buffer_limit_reached_timestamp); | 2459 EXPECT_LE(last_trace_event_timestamp, buffer_limit_reached_timestamp); |
| 2490 EXPECT_LE(buffer_limit_reached_timestamp, | 2460 EXPECT_LE(buffer_limit_reached_timestamp, |
| 2491 trace_log->OffsetNow().ToInternalValue()); | 2461 trace_log->OffsetNow().ToInternalValue()); |
| 2492 } | 2462 } |
| 2493 | 2463 |
| 2494 TEST_F(TraceEventTestFixture, TraceBufferRingBufferGetReturnChunk) { | 2464 TEST_F(TraceEventTestFixture, TraceBufferRingBufferGetReturnChunk) { |
| 2495 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 2465 TraceLog::GetInstance()->SetEnabled( |
| 2496 TraceLog::RECORDING_MODE, | 2466 TraceConfig(kRecordAllCategoryFilter, RECORD_CONTINUOUSLY), |
| 2497 TraceOptions(RECORD_CONTINUOUSLY)); | 2467 TraceLog::RECORDING_MODE); |
| 2498 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); | 2468 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); |
| 2499 size_t capacity = buffer->Capacity(); | 2469 size_t capacity = buffer->Capacity(); |
| 2500 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; | 2470 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; |
| 2501 uint32 last_seq = 0; | 2471 uint32 last_seq = 0; |
| 2502 size_t chunk_index; | 2472 size_t chunk_index; |
| 2503 EXPECT_EQ(0u, buffer->Size()); | 2473 EXPECT_EQ(0u, buffer->Size()); |
| 2504 | 2474 |
| 2505 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[num_chunks]); | 2475 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[num_chunks]); |
| 2506 for (size_t i = 0; i < num_chunks; ++i) { | 2476 for (size_t i = 0; i < num_chunks; ++i) { |
| 2507 chunks[i] = buffer->GetChunk(&chunk_index).release(); | 2477 chunks[i] = buffer->GetChunk(&chunk_index).release(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2545 last_seq = chunks[i]->seq(); | 2515 last_seq = chunks[i]->seq(); |
| 2546 } | 2516 } |
| 2547 | 2517 |
| 2548 for (size_t i = 0; i < num_chunks; ++i) | 2518 for (size_t i = 0; i < num_chunks; ++i) |
| 2549 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i])); | 2519 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i])); |
| 2550 | 2520 |
| 2551 TraceLog::GetInstance()->SetDisabled(); | 2521 TraceLog::GetInstance()->SetDisabled(); |
| 2552 } | 2522 } |
| 2553 | 2523 |
| 2554 TEST_F(TraceEventTestFixture, TraceBufferRingBufferHalfIteration) { | 2524 TEST_F(TraceEventTestFixture, TraceBufferRingBufferHalfIteration) { |
| 2555 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 2525 TraceLog::GetInstance()->SetEnabled( |
| 2556 TraceLog::RECORDING_MODE, | 2526 TraceConfig(kRecordAllCategoryFilter, RECORD_CONTINUOUSLY), |
| 2557 TraceOptions(RECORD_CONTINUOUSLY)); | 2527 TraceLog::RECORDING_MODE); |
| 2558 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); | 2528 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); |
| 2559 size_t capacity = buffer->Capacity(); | 2529 size_t capacity = buffer->Capacity(); |
| 2560 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; | 2530 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; |
| 2561 size_t chunk_index; | 2531 size_t chunk_index; |
| 2562 EXPECT_EQ(0u, buffer->Size()); | 2532 EXPECT_EQ(0u, buffer->Size()); |
| 2563 EXPECT_FALSE(buffer->NextChunk()); | 2533 EXPECT_FALSE(buffer->NextChunk()); |
| 2564 | 2534 |
| 2565 size_t half_chunks = num_chunks / 2; | 2535 size_t half_chunks = num_chunks / 2; |
| 2566 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[half_chunks]); | 2536 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[half_chunks]); |
| 2567 | 2537 |
| 2568 for (size_t i = 0; i < half_chunks; ++i) { | 2538 for (size_t i = 0; i < half_chunks; ++i) { |
| 2569 chunks[i] = buffer->GetChunk(&chunk_index).release(); | 2539 chunks[i] = buffer->GetChunk(&chunk_index).release(); |
| 2570 EXPECT_TRUE(chunks[i]); | 2540 EXPECT_TRUE(chunks[i]); |
| 2571 EXPECT_EQ(i, chunk_index); | 2541 EXPECT_EQ(i, chunk_index); |
| 2572 } | 2542 } |
| 2573 for (size_t i = 0; i < half_chunks; ++i) | 2543 for (size_t i = 0; i < half_chunks; ++i) |
| 2574 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i])); | 2544 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i])); |
| 2575 | 2545 |
| 2576 for (size_t i = 0; i < half_chunks; ++i) | 2546 for (size_t i = 0; i < half_chunks; ++i) |
| 2577 EXPECT_EQ(chunks[i], buffer->NextChunk()); | 2547 EXPECT_EQ(chunks[i], buffer->NextChunk()); |
| 2578 EXPECT_FALSE(buffer->NextChunk()); | 2548 EXPECT_FALSE(buffer->NextChunk()); |
| 2579 TraceLog::GetInstance()->SetDisabled(); | 2549 TraceLog::GetInstance()->SetDisabled(); |
| 2580 } | 2550 } |
| 2581 | 2551 |
| 2582 TEST_F(TraceEventTestFixture, TraceBufferRingBufferFullIteration) { | 2552 TEST_F(TraceEventTestFixture, TraceBufferRingBufferFullIteration) { |
| 2583 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 2553 TraceLog::GetInstance()->SetEnabled( |
| 2584 TraceLog::RECORDING_MODE, | 2554 TraceConfig(kRecordAllCategoryFilter, RECORD_CONTINUOUSLY), |
| 2585 TraceOptions(RECORD_CONTINUOUSLY)); | 2555 TraceLog::RECORDING_MODE); |
| 2586 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); | 2556 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); |
| 2587 size_t capacity = buffer->Capacity(); | 2557 size_t capacity = buffer->Capacity(); |
| 2588 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; | 2558 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; |
| 2589 size_t chunk_index; | 2559 size_t chunk_index; |
| 2590 EXPECT_EQ(0u, buffer->Size()); | 2560 EXPECT_EQ(0u, buffer->Size()); |
| 2591 EXPECT_FALSE(buffer->NextChunk()); | 2561 EXPECT_FALSE(buffer->NextChunk()); |
| 2592 | 2562 |
| 2593 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[num_chunks]); | 2563 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[num_chunks]); |
| 2594 | 2564 |
| 2595 for (size_t i = 0; i < num_chunks; ++i) { | 2565 for (size_t i = 0; i < num_chunks; ++i) { |
| 2596 chunks[i] = buffer->GetChunk(&chunk_index).release(); | 2566 chunks[i] = buffer->GetChunk(&chunk_index).release(); |
| 2597 EXPECT_TRUE(chunks[i]); | 2567 EXPECT_TRUE(chunks[i]); |
| 2598 EXPECT_EQ(i, chunk_index); | 2568 EXPECT_EQ(i, chunk_index); |
| 2599 } | 2569 } |
| 2600 for (size_t i = 0; i < num_chunks; ++i) | 2570 for (size_t i = 0; i < num_chunks; ++i) |
| 2601 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i])); | 2571 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i])); |
| 2602 | 2572 |
| 2603 for (size_t i = 0; i < num_chunks; ++i) | 2573 for (size_t i = 0; i < num_chunks; ++i) |
| 2604 EXPECT_TRUE(chunks[i] == buffer->NextChunk()); | 2574 EXPECT_TRUE(chunks[i] == buffer->NextChunk()); |
| 2605 EXPECT_FALSE(buffer->NextChunk()); | 2575 EXPECT_FALSE(buffer->NextChunk()); |
| 2606 TraceLog::GetInstance()->SetDisabled(); | 2576 TraceLog::GetInstance()->SetDisabled(); |
| 2607 } | 2577 } |
| 2608 | 2578 |
| 2609 TEST_F(TraceEventTestFixture, TraceRecordAsMuchAsPossibleMode) { | 2579 TEST_F(TraceEventTestFixture, TraceRecordAsMuchAsPossibleMode) { |
| 2610 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 2580 TraceLog::GetInstance()->SetEnabled( |
| 2611 TraceLog::RECORDING_MODE, | 2581 TraceConfig(kRecordAllCategoryFilter, RECORD_AS_MUCH_AS_POSSIBLE), |
| 2612 TraceOptions(RECORD_AS_MUCH_AS_POSSIBLE)); | 2582 TraceLog::RECORDING_MODE); |
| 2613 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); | 2583 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); |
| 2614 EXPECT_EQ(512000000UL, buffer->Capacity()); | 2584 EXPECT_EQ(512000000UL, buffer->Capacity()); |
| 2615 TraceLog::GetInstance()->SetDisabled(); | 2585 TraceLog::GetInstance()->SetDisabled(); |
| 2616 } | 2586 } |
| 2617 | 2587 |
| 2618 // Test the category filter. | |
| 2619 TEST_F(TraceEventTestFixture, CategoryFilter) { | |
| 2620 // Using the default filter. | |
| 2621 CategoryFilter default_cf = CategoryFilter( | |
| 2622 CategoryFilter::kDefaultCategoryFilterString); | |
| 2623 std::string category_filter_str = default_cf.ToString(); | |
| 2624 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str()); | |
| 2625 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category")); | |
| 2626 EXPECT_FALSE( | |
| 2627 default_cf.IsCategoryGroupEnabled("disabled-by-default-category")); | |
| 2628 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); | |
| 2629 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); | |
| 2630 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2")); | |
| 2631 | |
| 2632 // Make sure that upon an empty string, we fall back to the default filter. | |
| 2633 default_cf = CategoryFilter(); | |
| 2634 category_filter_str = default_cf.ToString(); | |
| 2635 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str()); | |
| 2636 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category")); | |
| 2637 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); | |
| 2638 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); | |
| 2639 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2")); | |
| 2640 | |
| 2641 // Using an arbitrary non-empty filter. | |
| 2642 CategoryFilter cf("included,-excluded,inc_pattern*,-exc_pattern*"); | |
| 2643 category_filter_str = cf.ToString(); | |
| 2644 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*", | |
| 2645 category_filter_str.c_str()); | |
| 2646 EXPECT_TRUE(cf.IsCategoryGroupEnabled("included")); | |
| 2647 EXPECT_TRUE(cf.IsCategoryGroupEnabled("inc_pattern_category")); | |
| 2648 EXPECT_FALSE(cf.IsCategoryGroupEnabled("exc_pattern_category")); | |
| 2649 EXPECT_FALSE(cf.IsCategoryGroupEnabled("excluded")); | |
| 2650 EXPECT_FALSE(cf.IsCategoryGroupEnabled("not-excluded-nor-included")); | |
| 2651 EXPECT_FALSE(cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); | |
| 2652 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); | |
| 2653 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryTest,Category2")); | |
| 2654 | |
| 2655 cf.Merge(default_cf); | |
| 2656 category_filter_str = cf.ToString(); | |
| 2657 EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test", | |
| 2658 category_filter_str.c_str()); | |
| 2659 cf.Clear(); | |
| 2660 | |
| 2661 CategoryFilter reconstructed_cf(category_filter_str); | |
| 2662 category_filter_str = reconstructed_cf.ToString(); | |
| 2663 EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test", | |
| 2664 category_filter_str.c_str()); | |
| 2665 | |
| 2666 // One included category. | |
| 2667 CategoryFilter one_inc_cf("only_inc_cat"); | |
| 2668 category_filter_str = one_inc_cf.ToString(); | |
| 2669 EXPECT_STREQ("only_inc_cat", category_filter_str.c_str()); | |
| 2670 | |
| 2671 // One excluded category. | |
| 2672 CategoryFilter one_exc_cf("-only_exc_cat"); | |
| 2673 category_filter_str = one_exc_cf.ToString(); | |
| 2674 EXPECT_STREQ("-only_exc_cat", category_filter_str.c_str()); | |
| 2675 | |
| 2676 // Enabling a disabled- category does not require all categories to be traced | |
| 2677 // to be included. | |
| 2678 CategoryFilter disabled_cat("disabled-by-default-cc,-excluded"); | |
| 2679 EXPECT_STREQ("disabled-by-default-cc,-excluded", | |
| 2680 disabled_cat.ToString().c_str()); | |
| 2681 EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("disabled-by-default-cc")); | |
| 2682 EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("some_other_group")); | |
| 2683 EXPECT_FALSE(disabled_cat.IsCategoryGroupEnabled("excluded")); | |
| 2684 | |
| 2685 // Enabled a disabled- category and also including makes all categories to | |
| 2686 // be traced require including. | |
| 2687 CategoryFilter disabled_inc_cat("disabled-by-default-cc,included"); | |
| 2688 EXPECT_STREQ("included,disabled-by-default-cc", | |
| 2689 disabled_inc_cat.ToString().c_str()); | |
| 2690 EXPECT_TRUE( | |
| 2691 disabled_inc_cat.IsCategoryGroupEnabled("disabled-by-default-cc")); | |
| 2692 EXPECT_TRUE(disabled_inc_cat.IsCategoryGroupEnabled("included")); | |
| 2693 EXPECT_FALSE(disabled_inc_cat.IsCategoryGroupEnabled("other_included")); | |
| 2694 | |
| 2695 // Test that IsEmptyOrContainsLeadingOrTrailingWhitespace actually catches | |
| 2696 // categories that are explicitly forbiden. | |
| 2697 // This method is called in a DCHECK to assert that we don't have these types | |
| 2698 // of strings as categories. | |
| 2699 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2700 " bad_category ")); | |
| 2701 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2702 " bad_category")); | |
| 2703 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2704 "bad_category ")); | |
| 2705 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2706 " bad_category")); | |
| 2707 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2708 "bad_category ")); | |
| 2709 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2710 " bad_category ")); | |
| 2711 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2712 "")); | |
| 2713 EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2714 "good_category")); | |
| 2715 } | |
| 2716 | |
| 2717 void BlockUntilStopped(WaitableEvent* task_start_event, | 2588 void BlockUntilStopped(WaitableEvent* task_start_event, |
| 2718 WaitableEvent* task_stop_event) { | 2589 WaitableEvent* task_stop_event) { |
| 2719 task_start_event->Signal(); | 2590 task_start_event->Signal(); |
| 2720 task_stop_event->Wait(); | 2591 task_stop_event->Wait(); |
| 2721 } | 2592 } |
| 2722 | 2593 |
| 2723 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopBeforeTracing) { | 2594 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopBeforeTracing) { |
| 2724 BeginTrace(); | 2595 BeginTrace(); |
| 2725 | 2596 |
| 2726 Thread thread("1"); | 2597 Thread thread("1"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2740 FROM_HERE, Bind(&BlockUntilStopped, &task_start_event, &task_stop_event)); | 2611 FROM_HERE, Bind(&BlockUntilStopped, &task_start_event, &task_stop_event)); |
| 2741 task_start_event.Wait(); | 2612 task_start_event.Wait(); |
| 2742 | 2613 |
| 2743 EndTraceAndFlush(); | 2614 EndTraceAndFlush(); |
| 2744 ValidateAllTraceMacrosCreatedData(trace_parsed_); | 2615 ValidateAllTraceMacrosCreatedData(trace_parsed_); |
| 2745 | 2616 |
| 2746 task_stop_event.Signal(); | 2617 task_stop_event.Signal(); |
| 2747 thread.Stop(); | 2618 thread.Stop(); |
| 2748 } | 2619 } |
| 2749 | 2620 |
| 2750 TEST_F(TraceEventTestFixture, ConvertTraceOptionsToInternalOptions) { | 2621 TEST_F(TraceEventTestFixture, ConvertTraceConfigToInternalOptions) { |
| 2751 TraceLog* trace_log = TraceLog::GetInstance(); | 2622 TraceLog* trace_log = TraceLog::GetInstance(); |
| 2752 TraceOptions options(RECORD_UNTIL_FULL); | |
| 2753 EXPECT_EQ(TraceLog::kInternalRecordUntilFull, | 2623 EXPECT_EQ(TraceLog::kInternalRecordUntilFull, |
| 2754 trace_log->GetInternalOptionsFromTraceOptions(options)); | 2624 trace_log->GetInternalOptionsFromTraceConfig( |
| 2625 TraceConfig(kRecordAllCategoryFilter, RECORD_UNTIL_FULL))); |
| 2755 | 2626 |
| 2756 options.record_mode = RECORD_CONTINUOUSLY; | |
| 2757 EXPECT_EQ(TraceLog::kInternalRecordContinuously, | 2627 EXPECT_EQ(TraceLog::kInternalRecordContinuously, |
| 2758 trace_log->GetInternalOptionsFromTraceOptions(options)); | 2628 trace_log->GetInternalOptionsFromTraceConfig( |
| 2629 TraceConfig(kRecordAllCategoryFilter, RECORD_CONTINUOUSLY))); |
| 2759 | 2630 |
| 2760 options.record_mode = ECHO_TO_CONSOLE; | |
| 2761 EXPECT_EQ(TraceLog::kInternalEchoToConsole, | 2631 EXPECT_EQ(TraceLog::kInternalEchoToConsole, |
| 2762 trace_log->GetInternalOptionsFromTraceOptions(options)); | 2632 trace_log->GetInternalOptionsFromTraceConfig( |
| 2633 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE))); |
| 2763 | 2634 |
| 2764 options.enable_sampling = true; | |
| 2765 | |
| 2766 options.record_mode = RECORD_UNTIL_FULL; | |
| 2767 EXPECT_EQ( | 2635 EXPECT_EQ( |
| 2768 TraceLog::kInternalRecordUntilFull | TraceLog::kInternalEnableSampling, | 2636 TraceLog::kInternalRecordUntilFull | TraceLog::kInternalEnableSampling, |
| 2769 trace_log->GetInternalOptionsFromTraceOptions(options)); | 2637 trace_log->GetInternalOptionsFromTraceConfig( |
| 2638 TraceConfig(kRecordAllCategoryFilter, |
| 2639 "record-until-full,enable-sampling"))); |
| 2770 | 2640 |
| 2771 options.record_mode = RECORD_CONTINUOUSLY; | |
| 2772 EXPECT_EQ( | 2641 EXPECT_EQ( |
| 2773 TraceLog::kInternalRecordContinuously | TraceLog::kInternalEnableSampling, | 2642 TraceLog::kInternalRecordContinuously | TraceLog::kInternalEnableSampling, |
| 2774 trace_log->GetInternalOptionsFromTraceOptions(options)); | 2643 trace_log->GetInternalOptionsFromTraceConfig( |
| 2644 TraceConfig(kRecordAllCategoryFilter, |
| 2645 "record-continuously,enable-sampling"))); |
| 2775 | 2646 |
| 2776 options.record_mode = ECHO_TO_CONSOLE; | |
| 2777 EXPECT_EQ( | 2647 EXPECT_EQ( |
| 2778 TraceLog::kInternalEchoToConsole | TraceLog::kInternalEnableSampling, | 2648 TraceLog::kInternalEchoToConsole | TraceLog::kInternalEnableSampling, |
| 2779 trace_log->GetInternalOptionsFromTraceOptions(options)); | 2649 trace_log->GetInternalOptionsFromTraceConfig( |
| 2650 TraceConfig(kRecordAllCategoryFilter, |
| 2651 "trace-to-console,enable-sampling"))); |
| 2780 | 2652 |
| 2781 options.enable_systrace = true; | |
| 2782 EXPECT_EQ( | 2653 EXPECT_EQ( |
| 2783 TraceLog::kInternalEchoToConsole | TraceLog::kInternalEnableSampling, | 2654 TraceLog::kInternalEchoToConsole | TraceLog::kInternalEnableSampling, |
| 2784 trace_log->GetInternalOptionsFromTraceOptions(options)); | 2655 trace_log->GetInternalOptionsFromTraceConfig( |
| 2656 TraceConfig("*", |
| 2657 "trace-to-console,enable-sampling,enable-systrace"))); |
| 2785 } | 2658 } |
| 2786 | 2659 |
| 2787 void SetBlockingFlagAndBlockUntilStopped(WaitableEvent* task_start_event, | 2660 void SetBlockingFlagAndBlockUntilStopped(WaitableEvent* task_start_event, |
| 2788 WaitableEvent* task_stop_event) { | 2661 WaitableEvent* task_stop_event) { |
| 2789 TraceLog::GetInstance()->SetCurrentThreadBlocksMessageLoop(); | 2662 TraceLog::GetInstance()->SetCurrentThreadBlocksMessageLoop(); |
| 2790 BlockUntilStopped(task_start_event, task_stop_event); | 2663 BlockUntilStopped(task_start_event, task_stop_event); |
| 2791 } | 2664 } |
| 2792 | 2665 |
| 2793 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopAfterTracing) { | 2666 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopAfterTracing) { |
| 2794 BeginTrace(); | 2667 BeginTrace(); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2869 g_log_buffer->append(str); | 2742 g_log_buffer->append(str); |
| 2870 return false; | 2743 return false; |
| 2871 } | 2744 } |
| 2872 | 2745 |
| 2873 TEST_F(TraceEventTestFixture, EchoToConsole) { | 2746 TEST_F(TraceEventTestFixture, EchoToConsole) { |
| 2874 logging::LogMessageHandlerFunction old_log_message_handler = | 2747 logging::LogMessageHandlerFunction old_log_message_handler = |
| 2875 logging::GetLogMessageHandler(); | 2748 logging::GetLogMessageHandler(); |
| 2876 logging::SetLogMessageHandler(MockLogMessageHandler); | 2749 logging::SetLogMessageHandler(MockLogMessageHandler); |
| 2877 | 2750 |
| 2878 TraceLog::GetInstance()->SetEnabled( | 2751 TraceLog::GetInstance()->SetEnabled( |
| 2879 CategoryFilter("*"), | 2752 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE), |
| 2880 TraceLog::RECORDING_MODE, | 2753 TraceLog::RECORDING_MODE); |
| 2881 TraceOptions(ECHO_TO_CONSOLE)); | |
| 2882 TRACE_EVENT_BEGIN0("a", "begin_end"); | 2754 TRACE_EVENT_BEGIN0("a", "begin_end"); |
| 2883 { | 2755 { |
| 2884 TRACE_EVENT0("b", "duration"); | 2756 TRACE_EVENT0("b", "duration"); |
| 2885 TRACE_EVENT0("b1", "duration1"); | 2757 TRACE_EVENT0("b1", "duration1"); |
| 2886 } | 2758 } |
| 2887 TRACE_EVENT_INSTANT0("c", "instant", TRACE_EVENT_SCOPE_GLOBAL); | 2759 TRACE_EVENT_INSTANT0("c", "instant", TRACE_EVENT_SCOPE_GLOBAL); |
| 2888 TRACE_EVENT_END0("a", "begin_end"); | 2760 TRACE_EVENT_END0("a", "begin_end"); |
| 2889 | 2761 |
| 2890 EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a]\x1b")); | 2762 EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a]\x1b")); |
| 2891 EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b]\x1b")); | 2763 EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b]\x1b")); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2906 TRACE_EVENT0("log", "trace_event"); | 2778 TRACE_EVENT0("log", "trace_event"); |
| 2907 return false; | 2779 return false; |
| 2908 } | 2780 } |
| 2909 | 2781 |
| 2910 TEST_F(TraceEventTestFixture, EchoToConsoleTraceEventRecursion) { | 2782 TEST_F(TraceEventTestFixture, EchoToConsoleTraceEventRecursion) { |
| 2911 logging::LogMessageHandlerFunction old_log_message_handler = | 2783 logging::LogMessageHandlerFunction old_log_message_handler = |
| 2912 logging::GetLogMessageHandler(); | 2784 logging::GetLogMessageHandler(); |
| 2913 logging::SetLogMessageHandler(LogMessageHandlerWithTraceEvent); | 2785 logging::SetLogMessageHandler(LogMessageHandlerWithTraceEvent); |
| 2914 | 2786 |
| 2915 TraceLog::GetInstance()->SetEnabled( | 2787 TraceLog::GetInstance()->SetEnabled( |
| 2916 CategoryFilter("*"), | 2788 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE), |
| 2917 TraceLog::RECORDING_MODE, | 2789 TraceLog::RECORDING_MODE); |
| 2918 TraceOptions(ECHO_TO_CONSOLE)); | |
| 2919 { | 2790 { |
| 2920 // This should not cause deadlock or infinite recursion. | 2791 // This should not cause deadlock or infinite recursion. |
| 2921 TRACE_EVENT0("b", "duration"); | 2792 TRACE_EVENT0("b", "duration"); |
| 2922 } | 2793 } |
| 2923 | 2794 |
| 2924 EndTraceAndFlush(); | 2795 EndTraceAndFlush(); |
| 2925 logging::SetLogMessageHandler(old_log_message_handler); | 2796 logging::SetLogMessageHandler(old_log_message_handler); |
| 2926 } | 2797 } |
| 2927 | 2798 |
| 2928 TEST_F(TraceEventTestFixture, TimeOffset) { | 2799 TEST_F(TraceEventTestFixture, TimeOffset) { |
| 2929 BeginTrace(); | 2800 BeginTrace(); |
| 2930 // Let TraceLog timer start from 0. | 2801 // Let TraceLog timer start from 0. |
| 2931 TimeDelta time_offset = TimeTicks::NowFromSystemTraceTime() - TimeTicks(); | 2802 TimeDelta time_offset = TraceTicks::Now() - TraceTicks(); |
| 2932 TraceLog::GetInstance()->SetTimeOffset(time_offset); | 2803 TraceLog::GetInstance()->SetTimeOffset(time_offset); |
| 2933 | 2804 |
| 2934 { | 2805 { |
| 2935 TRACE_EVENT0("all", "duration1"); | 2806 TRACE_EVENT0("all", "duration1"); |
| 2936 TRACE_EVENT0("all", "duration2"); | 2807 TRACE_EVENT0("all", "duration2"); |
| 2937 } | 2808 } |
| 2938 TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( | 2809 TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( |
| 2939 "all", "with_timestamp", 0, 0, | 2810 "all", "with_timestamp", 0, 0, TraceTicks::Now().ToInternalValue()); |
| 2940 TimeTicks::NowFromSystemTraceTime().ToInternalValue()); | |
| 2941 TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0( | 2811 TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0( |
| 2942 "all", "with_timestamp", 0, 0, | 2812 "all", "with_timestamp", 0, 0, TraceTicks::Now().ToInternalValue()); |
| 2943 TimeTicks::NowFromSystemTraceTime().ToInternalValue()); | |
| 2944 | 2813 |
| 2945 EndTraceAndFlush(); | 2814 EndTraceAndFlush(); |
| 2946 DropTracedMetadataRecords(); | 2815 DropTracedMetadataRecords(); |
| 2947 | 2816 |
| 2948 double end_time = static_cast<double>( | 2817 double end_time = static_cast<double>( |
| 2949 (TimeTicks::NowFromSystemTraceTime() - time_offset).ToInternalValue()); | 2818 (TraceTicks::Now() - time_offset).ToInternalValue()); |
| 2950 double last_timestamp = 0; | 2819 double last_timestamp = 0; |
| 2951 for (size_t i = 0; i < trace_parsed_.GetSize(); ++i) { | 2820 for (size_t i = 0; i < trace_parsed_.GetSize(); ++i) { |
| 2952 const DictionaryValue* item; | 2821 const DictionaryValue* item; |
| 2953 EXPECT_TRUE(trace_parsed_.GetDictionary(i, &item)); | 2822 EXPECT_TRUE(trace_parsed_.GetDictionary(i, &item)); |
| 2954 double timestamp; | 2823 double timestamp; |
| 2955 EXPECT_TRUE(item->GetDouble("ts", ×tamp)); | 2824 EXPECT_TRUE(item->GetDouble("ts", ×tamp)); |
| 2956 EXPECT_GE(timestamp, last_timestamp); | 2825 EXPECT_GE(timestamp, last_timestamp); |
| 2957 EXPECT_LE(timestamp, end_time); | 2826 EXPECT_LE(timestamp, end_time); |
| 2958 last_timestamp = timestamp; | 2827 last_timestamp = timestamp; |
| 2959 } | 2828 } |
| 2960 } | 2829 } |
| 2961 | 2830 |
| 2962 TEST_F(TraceEventTestFixture, ConfigureSyntheticDelays) { | 2831 TEST_F(TraceEventTestFixture, ConfigureSyntheticDelays) { |
| 2963 BeginSpecificTrace("DELAY(test.Delay;0.05)"); | 2832 BeginSpecificTrace("DELAY(test.Delay;0.05)"); |
| 2964 | 2833 |
| 2965 base::TimeTicks start = base::TimeTicks::Now(); | 2834 base::TimeTicks start = base::TimeTicks::Now(); |
| 2966 { | 2835 { |
| 2967 TRACE_EVENT_SYNTHETIC_DELAY("test.Delay"); | 2836 TRACE_EVENT_SYNTHETIC_DELAY("test.Delay"); |
| 2968 } | 2837 } |
| 2969 base::TimeDelta duration = base::TimeTicks::Now() - start; | 2838 base::TimeDelta duration = base::TimeTicks::Now() - start; |
| 2970 EXPECT_GE(duration.InMilliseconds(), 50); | 2839 EXPECT_GE(duration.InMilliseconds(), 50); |
| 2971 | 2840 |
| 2972 EndTraceAndFlush(); | 2841 EndTraceAndFlush(); |
| 2973 } | 2842 } |
| 2974 | 2843 |
| 2975 TEST_F(TraceEventTestFixture, BadSyntheticDelayConfigurations) { | 2844 TEST_F(TraceEventTestFixture, BadSyntheticDelayConfigurations) { |
| 2976 const char* const configs[] = { | 2845 const char* const filters[] = { |
| 2977 "", | 2846 "", |
| 2978 "DELAY(", | 2847 "DELAY(", |
| 2979 "DELAY(;", | 2848 "DELAY(;", |
| 2980 "DELAY(;)", | 2849 "DELAY(;)", |
| 2981 "DELAY(test.Delay)", | 2850 "DELAY(test.Delay)", |
| 2982 "DELAY(test.Delay;)" | 2851 "DELAY(test.Delay;)" |
| 2983 }; | 2852 }; |
| 2984 for (size_t i = 0; i < arraysize(configs); i++) { | 2853 for (size_t i = 0; i < arraysize(filters); i++) { |
| 2985 BeginSpecificTrace(configs[i]); | 2854 BeginSpecificTrace(filters[i]); |
| 2986 EndTraceAndFlush(); | 2855 EndTraceAndFlush(); |
| 2987 CategoryFilter filter = TraceLog::GetInstance()->GetCurrentCategoryFilter(); | 2856 TraceConfig trace_config = TraceLog::GetInstance()->GetCurrentTraceConfig(); |
| 2988 EXPECT_EQ(0u, filter.GetSyntheticDelayValues().size()); | 2857 EXPECT_EQ(0u, trace_config.GetSyntheticDelayValues().size()); |
| 2989 } | 2858 } |
| 2990 } | 2859 } |
| 2991 | 2860 |
| 2992 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationMerging) { | 2861 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationMerging) { |
| 2993 CategoryFilter filter1("DELAY(test.Delay1;16)"); | 2862 TraceConfig config1("DELAY(test.Delay1;16)", ""); |
| 2994 CategoryFilter filter2("DELAY(test.Delay2;32)"); | 2863 TraceConfig config2("DELAY(test.Delay2;32)", ""); |
| 2995 filter1.Merge(filter2); | 2864 config1.Merge(config2); |
| 2996 EXPECT_EQ(2u, filter1.GetSyntheticDelayValues().size()); | 2865 EXPECT_EQ(2u, config1.GetSyntheticDelayValues().size()); |
| 2997 } | 2866 } |
| 2998 | 2867 |
| 2999 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { | 2868 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { |
| 3000 const char config[] = "DELAY(test.Delay;16;oneshot)"; | 2869 const char filter[] = "DELAY(test.Delay;16;oneshot)"; |
| 3001 CategoryFilter filter(config); | 2870 TraceConfig config(filter, ""); |
| 3002 EXPECT_EQ(config, filter.ToString()); | 2871 EXPECT_EQ(filter, config.ToCategoryFilterString()); |
| 3003 } | |
| 3004 | |
| 3005 TEST(TraceOptionsTest, TraceOptionsFromString) { | |
| 3006 TraceOptions options; | |
| 3007 EXPECT_TRUE(options.SetFromString("record-until-full")); | |
| 3008 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode); | |
| 3009 EXPECT_FALSE(options.enable_sampling); | |
| 3010 EXPECT_FALSE(options.enable_systrace); | |
| 3011 | |
| 3012 EXPECT_TRUE(options.SetFromString("record-continuously")); | |
| 3013 EXPECT_EQ(RECORD_CONTINUOUSLY, options.record_mode); | |
| 3014 EXPECT_FALSE(options.enable_sampling); | |
| 3015 EXPECT_FALSE(options.enable_systrace); | |
| 3016 | |
| 3017 EXPECT_TRUE(options.SetFromString("trace-to-console")); | |
| 3018 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode); | |
| 3019 EXPECT_FALSE(options.enable_sampling); | |
| 3020 EXPECT_FALSE(options.enable_systrace); | |
| 3021 | |
| 3022 EXPECT_TRUE(options.SetFromString("record-as-much-as-possible")); | |
| 3023 EXPECT_EQ(RECORD_AS_MUCH_AS_POSSIBLE, options.record_mode); | |
| 3024 EXPECT_FALSE(options.enable_sampling); | |
| 3025 EXPECT_FALSE(options.enable_systrace); | |
| 3026 | |
| 3027 EXPECT_TRUE(options.SetFromString("record-until-full, enable-sampling")); | |
| 3028 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode); | |
| 3029 EXPECT_TRUE(options.enable_sampling); | |
| 3030 EXPECT_FALSE(options.enable_systrace); | |
| 3031 | |
| 3032 EXPECT_TRUE(options.SetFromString("enable-systrace,record-continuously")); | |
| 3033 EXPECT_EQ(RECORD_CONTINUOUSLY, options.record_mode); | |
| 3034 EXPECT_FALSE(options.enable_sampling); | |
| 3035 EXPECT_TRUE(options.enable_systrace); | |
| 3036 | |
| 3037 EXPECT_TRUE(options.SetFromString( | |
| 3038 "enable-systrace, trace-to-console,enable-sampling")); | |
| 3039 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode); | |
| 3040 EXPECT_TRUE(options.enable_sampling); | |
| 3041 EXPECT_TRUE(options.enable_systrace); | |
| 3042 | |
| 3043 EXPECT_TRUE(options.SetFromString( | |
| 3044 "record-continuously,record-until-full,trace-to-console")); | |
| 3045 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode); | |
| 3046 EXPECT_FALSE(options.enable_systrace); | |
| 3047 EXPECT_FALSE(options.enable_sampling); | |
| 3048 | |
| 3049 EXPECT_TRUE(options.SetFromString("")); | |
| 3050 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode); | |
| 3051 EXPECT_FALSE(options.enable_systrace); | |
| 3052 EXPECT_FALSE(options.enable_sampling); | |
| 3053 | |
| 3054 EXPECT_FALSE(options.SetFromString("foo-bar-baz")); | |
| 3055 } | |
| 3056 | |
| 3057 TEST(TraceOptionsTest, TraceOptionsToString) { | |
| 3058 // Test that we can intialize TraceOptions from a string got from | |
| 3059 // TraceOptions.ToString() method to get a same TraceOptions. | |
| 3060 TraceRecordMode modes[] = {RECORD_UNTIL_FULL, | |
| 3061 RECORD_CONTINUOUSLY, | |
| 3062 ECHO_TO_CONSOLE, | |
| 3063 RECORD_AS_MUCH_AS_POSSIBLE}; | |
| 3064 bool enable_sampling_options[] = {true, false}; | |
| 3065 bool enable_systrace_options[] = {true, false}; | |
| 3066 | |
| 3067 for (int i = 0; i < 4; ++i) { | |
| 3068 for (int j = 0; j < 2; ++j) { | |
| 3069 for (int k = 0; k < 2; ++k) { | |
| 3070 TraceOptions original_option = TraceOptions(modes[i]); | |
| 3071 original_option.enable_sampling = enable_sampling_options[j]; | |
| 3072 original_option.enable_systrace = enable_systrace_options[k]; | |
| 3073 TraceOptions new_options; | |
| 3074 EXPECT_TRUE(new_options.SetFromString(original_option.ToString())); | |
| 3075 EXPECT_EQ(original_option.record_mode, new_options.record_mode); | |
| 3076 EXPECT_EQ(original_option.enable_sampling, new_options.enable_sampling); | |
| 3077 EXPECT_EQ(original_option.enable_systrace, new_options.enable_systrace); | |
| 3078 } | |
| 3079 } | |
| 3080 } | |
| 3081 } | 2872 } |
| 3082 | 2873 |
| 3083 } // namespace trace_event | 2874 } // namespace trace_event |
| 3084 } // namespace base | 2875 } // namespace base |
| OLD | NEW |