| 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 |