OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/metrics/child_call_stack_profile_collector.h" | 5 #include "components/metrics/child_call_stack_profile_collector.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 | 71 |
72 DISALLOW_COPY_AND_ASSIGN(ChildCallStackProfileCollectorTest); | 72 DISALLOW_COPY_AND_ASSIGN(ChildCallStackProfileCollectorTest); |
73 }; | 73 }; |
74 | 74 |
75 // Test the behavior when an interface is provided. | 75 // Test the behavior when an interface is provided. |
76 TEST_F(ChildCallStackProfileCollectorTest, InterfaceProvided) { | 76 TEST_F(ChildCallStackProfileCollectorTest, InterfaceProvided) { |
77 EXPECT_EQ(0u, profiles().size()); | 77 EXPECT_EQ(0u, profiles().size()); |
78 | 78 |
79 // Add profiles before providing the interface. | 79 // Add profiles before providing the interface. |
80 CollectProfiles( | 80 CollectProfiles( |
81 CallStackProfileParams(CallStackProfileParams::JANKY_TASK, | 81 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 82 CallStackProfileParams::UI_THREAD, |
| 83 CallStackProfileParams::JANKY_TASK, |
82 CallStackProfileParams::PRESERVE_ORDER), | 84 CallStackProfileParams::PRESERVE_ORDER), |
83 { base::StackSamplingProfiler::CallStackProfile(), | 85 { base::StackSamplingProfiler::CallStackProfile(), |
84 base::StackSamplingProfiler::CallStackProfile() }); | 86 base::StackSamplingProfiler::CallStackProfile() }); |
85 ASSERT_EQ(1u, profiles().size()); | 87 ASSERT_EQ(1u, profiles().size()); |
| 88 EXPECT_EQ(CallStackProfileParams::BROWSER_PROCESS, |
| 89 profiles()[0].params.process); |
| 90 EXPECT_EQ(CallStackProfileParams::UI_THREAD, profiles()[0].params.thread); |
86 EXPECT_EQ(CallStackProfileParams::JANKY_TASK, profiles()[0].params.trigger); | 91 EXPECT_EQ(CallStackProfileParams::JANKY_TASK, profiles()[0].params.trigger); |
87 EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, | 92 EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, |
88 profiles()[0].params.ordering_spec); | 93 profiles()[0].params.ordering_spec); |
89 base::TimeTicks start_timestamp = profiles()[0].start_timestamp; | 94 base::TimeTicks start_timestamp = profiles()[0].start_timestamp; |
90 EXPECT_GE(base::TimeDelta::FromMilliseconds(10), | 95 EXPECT_GE(base::TimeDelta::FromMilliseconds(10), |
91 base::TimeTicks::Now() - start_timestamp); | 96 base::TimeTicks::Now() - start_timestamp); |
92 EXPECT_EQ(2u, profiles()[0].profiles.size()); | 97 EXPECT_EQ(2u, profiles()[0].profiles.size()); |
93 | 98 |
94 // Set the interface. The profiles should be passed to it. | 99 // Set the interface. The profiles should be passed to it. |
95 child_collector_.SetParentProfileCollector(std::move(receiver_)); | 100 child_collector_.SetParentProfileCollector(std::move(receiver_)); |
96 base::RunLoop().RunUntilIdle(); | 101 base::RunLoop().RunUntilIdle(); |
97 EXPECT_EQ(0u, profiles().size()); | 102 EXPECT_EQ(0u, profiles().size()); |
98 ASSERT_EQ(1u, receiver_impl_->profiles.size()); | 103 ASSERT_EQ(1u, receiver_impl_->profiles.size()); |
99 EXPECT_EQ(CallStackProfileParams::JANKY_TASK, | 104 EXPECT_EQ(CallStackProfileParams::JANKY_TASK, |
100 receiver_impl_->profiles[0].params.trigger); | 105 receiver_impl_->profiles[0].params.trigger); |
101 EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, | 106 EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, |
102 receiver_impl_->profiles[0].params.ordering_spec); | 107 receiver_impl_->profiles[0].params.ordering_spec); |
103 EXPECT_EQ(start_timestamp, receiver_impl_->profiles[0].start_timestamp); | 108 EXPECT_EQ(start_timestamp, receiver_impl_->profiles[0].start_timestamp); |
104 EXPECT_EQ(2u, receiver_impl_->profiles[0].profiles.size()); | 109 EXPECT_EQ(2u, receiver_impl_->profiles[0].profiles.size()); |
105 | 110 |
106 // Add profiles after providing the interface. They should also be passed to | 111 // Add profiles after providing the interface. They should also be passed to |
107 // it. | 112 // it. |
108 receiver_impl_->profiles.clear(); | 113 receiver_impl_->profiles.clear(); |
109 CollectProfiles( | 114 CollectProfiles( |
110 CallStackProfileParams(CallStackProfileParams::THREAD_HUNG, | 115 CallStackProfileParams(CallStackProfileParams::GPU_PROCESS, |
| 116 CallStackProfileParams::GPU_MAIN_THREAD, |
| 117 CallStackProfileParams::THREAD_HUNG, |
111 CallStackProfileParams::PRESERVE_ORDER), | 118 CallStackProfileParams::PRESERVE_ORDER), |
112 { base::StackSamplingProfiler::CallStackProfile() }); | 119 { base::StackSamplingProfiler::CallStackProfile() }); |
113 base::RunLoop().RunUntilIdle(); | 120 base::RunLoop().RunUntilIdle(); |
114 EXPECT_EQ(0u, profiles().size()); | 121 EXPECT_EQ(0u, profiles().size()); |
115 ASSERT_EQ(1u, receiver_impl_->profiles.size()); | 122 ASSERT_EQ(1u, receiver_impl_->profiles.size()); |
| 123 EXPECT_EQ(CallStackProfileParams::GPU_PROCESS, |
| 124 receiver_impl_->profiles[0].params.process); |
| 125 EXPECT_EQ(CallStackProfileParams::GPU_MAIN_THREAD, |
| 126 receiver_impl_->profiles[0].params.thread); |
116 EXPECT_EQ(CallStackProfileParams::THREAD_HUNG, | 127 EXPECT_EQ(CallStackProfileParams::THREAD_HUNG, |
117 receiver_impl_->profiles[0].params.trigger); | 128 receiver_impl_->profiles[0].params.trigger); |
118 EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, | 129 EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, |
119 receiver_impl_->profiles[0].params.ordering_spec); | 130 receiver_impl_->profiles[0].params.ordering_spec); |
120 EXPECT_GE(base::TimeDelta::FromMilliseconds(10), | 131 EXPECT_GE(base::TimeDelta::FromMilliseconds(10), |
121 (base::TimeTicks::Now() - | 132 (base::TimeTicks::Now() - |
122 receiver_impl_->profiles[0].start_timestamp)); | 133 receiver_impl_->profiles[0].start_timestamp)); |
123 EXPECT_EQ(1u, receiver_impl_->profiles[0].profiles.size()); | 134 EXPECT_EQ(1u, receiver_impl_->profiles[0].profiles.size()); |
124 } | 135 } |
125 | 136 |
126 TEST_F(ChildCallStackProfileCollectorTest, InterfaceNotProvided) { | 137 TEST_F(ChildCallStackProfileCollectorTest, InterfaceNotProvided) { |
127 EXPECT_EQ(0u, profiles().size()); | 138 EXPECT_EQ(0u, profiles().size()); |
128 | 139 |
129 // Add profiles before providing a null interface. | 140 // Add profiles before providing a null interface. |
130 CollectProfiles( | 141 CollectProfiles( |
131 CallStackProfileParams(CallStackProfileParams::JANKY_TASK, | 142 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 143 CallStackProfileParams::UI_THREAD, |
| 144 CallStackProfileParams::JANKY_TASK, |
132 CallStackProfileParams::PRESERVE_ORDER), | 145 CallStackProfileParams::PRESERVE_ORDER), |
133 { base::StackSamplingProfiler::CallStackProfile(), | 146 { base::StackSamplingProfiler::CallStackProfile(), |
134 base::StackSamplingProfiler::CallStackProfile() }); | 147 base::StackSamplingProfiler::CallStackProfile() }); |
135 ASSERT_EQ(1u, profiles().size()); | 148 ASSERT_EQ(1u, profiles().size()); |
| 149 EXPECT_EQ(CallStackProfileParams::BROWSER_PROCESS, |
| 150 profiles()[0].params.process); |
| 151 EXPECT_EQ(CallStackProfileParams::UI_THREAD, profiles()[0].params.thread); |
136 EXPECT_EQ(CallStackProfileParams::JANKY_TASK, profiles()[0].params.trigger); | 152 EXPECT_EQ(CallStackProfileParams::JANKY_TASK, profiles()[0].params.trigger); |
137 EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, | 153 EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, |
138 profiles()[0].params.ordering_spec); | 154 profiles()[0].params.ordering_spec); |
139 EXPECT_GE(base::TimeDelta::FromMilliseconds(10), | 155 EXPECT_GE(base::TimeDelta::FromMilliseconds(10), |
140 base::TimeTicks::Now() - profiles()[0].start_timestamp); | 156 base::TimeTicks::Now() - profiles()[0].start_timestamp); |
141 EXPECT_EQ(2u, profiles()[0].profiles.size()); | 157 EXPECT_EQ(2u, profiles()[0].profiles.size()); |
142 | 158 |
143 // Set the null interface. The profiles should be flushed. | 159 // Set the null interface. The profiles should be flushed. |
144 child_collector_.SetParentProfileCollector( | 160 child_collector_.SetParentProfileCollector( |
145 mojom::CallStackProfileCollectorPtr()); | 161 mojom::CallStackProfileCollectorPtr()); |
146 base::RunLoop().RunUntilIdle(); | 162 base::RunLoop().RunUntilIdle(); |
147 EXPECT_EQ(0u, profiles().size()); | 163 EXPECT_EQ(0u, profiles().size()); |
148 | 164 |
149 // Add profiles after providing a null interface. They should also be flushed. | 165 // Add profiles after providing a null interface. They should also be flushed. |
150 CollectProfiles( | 166 CollectProfiles( |
151 CallStackProfileParams(CallStackProfileParams::THREAD_HUNG, | 167 CallStackProfileParams(CallStackProfileParams::GPU_PROCESS, |
| 168 CallStackProfileParams::GPU_MAIN_THREAD, |
| 169 CallStackProfileParams::THREAD_HUNG, |
152 CallStackProfileParams::PRESERVE_ORDER), | 170 CallStackProfileParams::PRESERVE_ORDER), |
153 { base::StackSamplingProfiler::CallStackProfile() }); | 171 { base::StackSamplingProfiler::CallStackProfile() }); |
154 EXPECT_EQ(0u, profiles().size()); | 172 EXPECT_EQ(0u, profiles().size()); |
155 } | 173 } |
156 | 174 |
157 } // namespace metrics | 175 } // namespace metrics |
OLD | NEW |