| 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 2643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2654 | 2654 |
| 2655 TEST_F(TraceEventTestFixture, TraceRecordAsMuchAsPossibleMode) { | 2655 TEST_F(TraceEventTestFixture, TraceRecordAsMuchAsPossibleMode) { |
| 2656 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), | 2656 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), |
| 2657 TraceLog::RECORDING_MODE, | 2657 TraceLog::RECORDING_MODE, |
| 2658 TraceOptions(RECORD_AS_MUCH_AS_POSSIBLE)); | 2658 TraceOptions(RECORD_AS_MUCH_AS_POSSIBLE)); |
| 2659 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); | 2659 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); |
| 2660 EXPECT_EQ(512000000UL, buffer->Capacity()); | 2660 EXPECT_EQ(512000000UL, buffer->Capacity()); |
| 2661 TraceLog::GetInstance()->SetDisabled(); | 2661 TraceLog::GetInstance()->SetDisabled(); |
| 2662 } | 2662 } |
| 2663 | 2663 |
| 2664 // Test the category filter. | |
| 2665 TEST_F(TraceEventTestFixture, CategoryFilter) { | |
| 2666 // Using the default filter. | |
| 2667 CategoryFilter default_cf = CategoryFilter( | |
| 2668 CategoryFilter::kDefaultCategoryFilterString); | |
| 2669 std::string category_filter_str = default_cf.ToString(); | |
| 2670 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str()); | |
| 2671 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category")); | |
| 2672 EXPECT_FALSE( | |
| 2673 default_cf.IsCategoryGroupEnabled("disabled-by-default-category")); | |
| 2674 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); | |
| 2675 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); | |
| 2676 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2")); | |
| 2677 | |
| 2678 // Make sure that upon an empty string, we fall back to the default filter. | |
| 2679 default_cf = CategoryFilter(); | |
| 2680 category_filter_str = default_cf.ToString(); | |
| 2681 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str()); | |
| 2682 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category")); | |
| 2683 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); | |
| 2684 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); | |
| 2685 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2")); | |
| 2686 | |
| 2687 // Using an arbitrary non-empty filter. | |
| 2688 CategoryFilter cf("included,-excluded,inc_pattern*,-exc_pattern*"); | |
| 2689 category_filter_str = cf.ToString(); | |
| 2690 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*", | |
| 2691 category_filter_str.c_str()); | |
| 2692 EXPECT_TRUE(cf.IsCategoryGroupEnabled("included")); | |
| 2693 EXPECT_TRUE(cf.IsCategoryGroupEnabled("inc_pattern_category")); | |
| 2694 EXPECT_FALSE(cf.IsCategoryGroupEnabled("exc_pattern_category")); | |
| 2695 EXPECT_FALSE(cf.IsCategoryGroupEnabled("excluded")); | |
| 2696 EXPECT_FALSE(cf.IsCategoryGroupEnabled("not-excluded-nor-included")); | |
| 2697 EXPECT_FALSE(cf.IsCategoryGroupEnabled("Category1,CategoryDebug")); | |
| 2698 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryDebug,Category1")); | |
| 2699 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryTest,Category2")); | |
| 2700 | |
| 2701 cf.Merge(default_cf); | |
| 2702 category_filter_str = cf.ToString(); | |
| 2703 EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test", | |
| 2704 category_filter_str.c_str()); | |
| 2705 cf.Clear(); | |
| 2706 | |
| 2707 CategoryFilter reconstructed_cf(category_filter_str); | |
| 2708 category_filter_str = reconstructed_cf.ToString(); | |
| 2709 EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test", | |
| 2710 category_filter_str.c_str()); | |
| 2711 | |
| 2712 // One included category. | |
| 2713 CategoryFilter one_inc_cf("only_inc_cat"); | |
| 2714 category_filter_str = one_inc_cf.ToString(); | |
| 2715 EXPECT_STREQ("only_inc_cat", category_filter_str.c_str()); | |
| 2716 | |
| 2717 // One excluded category. | |
| 2718 CategoryFilter one_exc_cf("-only_exc_cat"); | |
| 2719 category_filter_str = one_exc_cf.ToString(); | |
| 2720 EXPECT_STREQ("-only_exc_cat", category_filter_str.c_str()); | |
| 2721 | |
| 2722 // Enabling a disabled- category does not require all categories to be traced | |
| 2723 // to be included. | |
| 2724 CategoryFilter disabled_cat("disabled-by-default-cc,-excluded"); | |
| 2725 EXPECT_STREQ("disabled-by-default-cc,-excluded", | |
| 2726 disabled_cat.ToString().c_str()); | |
| 2727 EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("disabled-by-default-cc")); | |
| 2728 EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("some_other_group")); | |
| 2729 EXPECT_FALSE(disabled_cat.IsCategoryGroupEnabled("excluded")); | |
| 2730 | |
| 2731 // Enabled a disabled- category and also including makes all categories to | |
| 2732 // be traced require including. | |
| 2733 CategoryFilter disabled_inc_cat("disabled-by-default-cc,included"); | |
| 2734 EXPECT_STREQ("included,disabled-by-default-cc", | |
| 2735 disabled_inc_cat.ToString().c_str()); | |
| 2736 EXPECT_TRUE( | |
| 2737 disabled_inc_cat.IsCategoryGroupEnabled("disabled-by-default-cc")); | |
| 2738 EXPECT_TRUE(disabled_inc_cat.IsCategoryGroupEnabled("included")); | |
| 2739 EXPECT_FALSE(disabled_inc_cat.IsCategoryGroupEnabled("other_included")); | |
| 2740 | |
| 2741 // Test that IsEmptyOrContainsLeadingOrTrailingWhitespace actually catches | |
| 2742 // categories that are explicitly forbiden. | |
| 2743 // This method is called in a DCHECK to assert that we don't have these types | |
| 2744 // of strings as categories. | |
| 2745 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2746 " bad_category ")); | |
| 2747 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2748 " bad_category")); | |
| 2749 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2750 "bad_category ")); | |
| 2751 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2752 " bad_category")); | |
| 2753 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2754 "bad_category ")); | |
| 2755 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2756 " bad_category ")); | |
| 2757 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2758 "")); | |
| 2759 EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace( | |
| 2760 "good_category")); | |
| 2761 } | |
| 2762 | |
| 2763 void BlockUntilStopped(WaitableEvent* task_start_event, | 2664 void BlockUntilStopped(WaitableEvent* task_start_event, |
| 2764 WaitableEvent* task_stop_event) { | 2665 WaitableEvent* task_stop_event) { |
| 2765 task_start_event->Signal(); | 2666 task_start_event->Signal(); |
| 2766 task_stop_event->Wait(); | 2667 task_stop_event->Wait(); |
| 2767 } | 2668 } |
| 2768 | 2669 |
| 2769 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopBeforeTracing) { | 2670 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopBeforeTracing) { |
| 2770 BeginTrace(); | 2671 BeginTrace(); |
| 2771 | 2672 |
| 2772 Thread thread("1"); | 2673 Thread thread("1"); |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3041 filter1.Merge(filter2); | 2942 filter1.Merge(filter2); |
| 3042 EXPECT_EQ(2u, filter1.GetSyntheticDelayValues().size()); | 2943 EXPECT_EQ(2u, filter1.GetSyntheticDelayValues().size()); |
| 3043 } | 2944 } |
| 3044 | 2945 |
| 3045 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { | 2946 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { |
| 3046 const char config[] = "DELAY(test.Delay;16;oneshot)"; | 2947 const char config[] = "DELAY(test.Delay;16;oneshot)"; |
| 3047 CategoryFilter filter(config); | 2948 CategoryFilter filter(config); |
| 3048 EXPECT_EQ(config, filter.ToString()); | 2949 EXPECT_EQ(config, filter.ToString()); |
| 3049 } | 2950 } |
| 3050 | 2951 |
| 3051 TEST(TraceOptionsTest, TraceOptionsFromString) { | |
| 3052 TraceOptions options; | |
| 3053 EXPECT_TRUE(options.SetFromString("record-until-full")); | |
| 3054 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode); | |
| 3055 EXPECT_FALSE(options.enable_sampling); | |
| 3056 EXPECT_FALSE(options.enable_systrace); | |
| 3057 | |
| 3058 EXPECT_TRUE(options.SetFromString("record-continuously")); | |
| 3059 EXPECT_EQ(RECORD_CONTINUOUSLY, options.record_mode); | |
| 3060 EXPECT_FALSE(options.enable_sampling); | |
| 3061 EXPECT_FALSE(options.enable_systrace); | |
| 3062 | |
| 3063 EXPECT_TRUE(options.SetFromString("trace-to-console")); | |
| 3064 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode); | |
| 3065 EXPECT_FALSE(options.enable_sampling); | |
| 3066 EXPECT_FALSE(options.enable_systrace); | |
| 3067 | |
| 3068 EXPECT_TRUE(options.SetFromString("record-as-much-as-possible")); | |
| 3069 EXPECT_EQ(RECORD_AS_MUCH_AS_POSSIBLE, options.record_mode); | |
| 3070 EXPECT_FALSE(options.enable_sampling); | |
| 3071 EXPECT_FALSE(options.enable_systrace); | |
| 3072 | |
| 3073 EXPECT_TRUE(options.SetFromString("record-until-full, enable-sampling")); | |
| 3074 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode); | |
| 3075 EXPECT_TRUE(options.enable_sampling); | |
| 3076 EXPECT_FALSE(options.enable_systrace); | |
| 3077 | |
| 3078 EXPECT_TRUE(options.SetFromString("enable-systrace,record-continuously")); | |
| 3079 EXPECT_EQ(RECORD_CONTINUOUSLY, options.record_mode); | |
| 3080 EXPECT_FALSE(options.enable_sampling); | |
| 3081 EXPECT_TRUE(options.enable_systrace); | |
| 3082 | |
| 3083 EXPECT_TRUE(options.SetFromString( | |
| 3084 "enable-systrace, trace-to-console,enable-sampling")); | |
| 3085 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode); | |
| 3086 EXPECT_TRUE(options.enable_sampling); | |
| 3087 EXPECT_TRUE(options.enable_systrace); | |
| 3088 | |
| 3089 EXPECT_TRUE(options.SetFromString( | |
| 3090 "record-continuously,record-until-full,trace-to-console")); | |
| 3091 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode); | |
| 3092 EXPECT_FALSE(options.enable_systrace); | |
| 3093 EXPECT_FALSE(options.enable_sampling); | |
| 3094 | |
| 3095 EXPECT_TRUE(options.SetFromString("")); | |
| 3096 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode); | |
| 3097 EXPECT_FALSE(options.enable_systrace); | |
| 3098 EXPECT_FALSE(options.enable_sampling); | |
| 3099 | |
| 3100 EXPECT_FALSE(options.SetFromString("foo-bar-baz")); | |
| 3101 } | |
| 3102 | |
| 3103 TEST(TraceOptionsTest, TraceOptionsToString) { | |
| 3104 // Test that we can intialize TraceOptions from a string got from | |
| 3105 // TraceOptions.ToString() method to get a same TraceOptions. | |
| 3106 TraceRecordMode modes[] = {RECORD_UNTIL_FULL, | |
| 3107 RECORD_CONTINUOUSLY, | |
| 3108 ECHO_TO_CONSOLE, | |
| 3109 RECORD_AS_MUCH_AS_POSSIBLE}; | |
| 3110 bool enable_sampling_options[] = {true, false}; | |
| 3111 bool enable_systrace_options[] = {true, false}; | |
| 3112 | |
| 3113 for (int i = 0; i < 4; ++i) { | |
| 3114 for (int j = 0; j < 2; ++j) { | |
| 3115 for (int k = 0; k < 2; ++k) { | |
| 3116 TraceOptions original_option = TraceOptions(modes[i]); | |
| 3117 original_option.enable_sampling = enable_sampling_options[j]; | |
| 3118 original_option.enable_systrace = enable_systrace_options[k]; | |
| 3119 TraceOptions new_options; | |
| 3120 EXPECT_TRUE(new_options.SetFromString(original_option.ToString())); | |
| 3121 EXPECT_EQ(original_option.record_mode, new_options.record_mode); | |
| 3122 EXPECT_EQ(original_option.enable_sampling, new_options.enable_sampling); | |
| 3123 EXPECT_EQ(original_option.enable_systrace, new_options.enable_systrace); | |
| 3124 } | |
| 3125 } | |
| 3126 } | |
| 3127 } | |
| 3128 | |
| 3129 } // namespace trace_event | 2952 } // namespace trace_event |
| 3130 } // namespace base | 2953 } // namespace base |
| OLD | NEW |