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 // Defines StructTraits specializations for translating between mojo types and | 5 // Defines StructTraits specializations for translating between mojo types and |
6 // base::StackSamplingProfiler types, with data validity checks. | 6 // base::StackSamplingProfiler types, with data validity checks. |
7 | 7 |
8 #ifndef COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ | 8 #ifndef COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ |
9 #define COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ | 9 #define COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ |
10 | 10 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 *out = base::StackSamplingProfiler::CallStackProfile(); | 127 *out = base::StackSamplingProfiler::CallStackProfile(); |
128 out->modules = std::move(modules); | 128 out->modules = std::move(modules); |
129 out->samples = std::move(samples); | 129 out->samples = std::move(samples); |
130 out->profile_duration = profile_duration; | 130 out->profile_duration = profile_duration; |
131 out->sampling_period = sampling_period; | 131 out->sampling_period = sampling_period; |
132 return true; | 132 return true; |
133 } | 133 } |
134 }; | 134 }; |
135 | 135 |
136 template <> | 136 template <> |
137 struct EnumTraits<metrics::mojom::SampleOrderingSpec, | 137 struct EnumTraits<metrics::mojom::Process, |
138 metrics::CallStackProfileParams::SampleOrderingSpec> { | 138 metrics::CallStackProfileParams::Process> { |
139 | 139 static metrics::mojom::Process ToMojom( |
140 static metrics::mojom::SampleOrderingSpec ToMojom( | 140 metrics::CallStackProfileParams::Process process) { |
141 metrics::CallStackProfileParams::SampleOrderingSpec spec) { | 141 switch (process) { |
142 switch (spec) { | 142 case metrics::CallStackProfileParams::Process::UNKNOWN_PROCESS: |
143 case metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE: | 143 return metrics::mojom::Process::UNKNOWN_PROCESS; |
144 return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE; | 144 case metrics::CallStackProfileParams::Process::BROWSER_PROCESS: |
145 case metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER: | 145 return metrics::mojom::Process::BROWSER_PROCESS; |
146 return metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER; | 146 case metrics::CallStackProfileParams::Process::RENDERER_PROCESS: |
| 147 return metrics::mojom::Process::RENDERER_PROCESS; |
| 148 case metrics::CallStackProfileParams::Process::GPU_PROCESS: |
| 149 return metrics::mojom::Process::GPU_PROCESS; |
| 150 case metrics::CallStackProfileParams::Process::UTILITY_PROCESS: |
| 151 return metrics::mojom::Process::UTILITY_PROCESS; |
| 152 case metrics::CallStackProfileParams::Process::ZYGOTE_PROCESS: |
| 153 return metrics::mojom::Process::ZYGOTE_PROCESS; |
| 154 case metrics::CallStackProfileParams::Process::SANDBOX_HELPER_PROCESS: |
| 155 return metrics::mojom::Process::SANDBOX_HELPER_PROCESS; |
| 156 case metrics::CallStackProfileParams::Process::PPAPI_PLUGIN_PROCESS: |
| 157 return metrics::mojom::Process::PPAPI_PLUGIN_PROCESS; |
| 158 case metrics::CallStackProfileParams::Process::PPAPI_BROKER_PROCESS: |
| 159 return metrics::mojom::Process::PPAPI_BROKER_PROCESS; |
147 } | 160 } |
148 NOTREACHED(); | 161 NOTREACHED(); |
149 return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE; | 162 return metrics::mojom::Process::UNKNOWN_PROCESS; |
150 } | 163 } |
151 | 164 |
152 static bool FromMojom( | 165 static bool FromMojom(metrics::mojom::Process process, |
153 metrics::mojom::SampleOrderingSpec spec, | 166 metrics::CallStackProfileParams::Process* out) { |
154 metrics::CallStackProfileParams::SampleOrderingSpec* out) { | 167 switch (process) { |
155 switch (spec) { | 168 case metrics::mojom::Process::UNKNOWN_PROCESS: |
156 case metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE: | 169 *out = metrics::CallStackProfileParams::Process::UNKNOWN_PROCESS; |
157 *out = metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE; | |
158 return true; | 170 return true; |
159 case metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER: | 171 case metrics::mojom::Process::BROWSER_PROCESS: |
160 *out = | 172 *out = metrics::CallStackProfileParams::Process::BROWSER_PROCESS; |
161 metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER; | 173 return true; |
| 174 case metrics::mojom::Process::RENDERER_PROCESS: |
| 175 *out = metrics::CallStackProfileParams::Process::RENDERER_PROCESS; |
| 176 return true; |
| 177 case metrics::mojom::Process::GPU_PROCESS: |
| 178 *out = metrics::CallStackProfileParams::Process::GPU_PROCESS; |
| 179 return true; |
| 180 case metrics::mojom::Process::UTILITY_PROCESS: |
| 181 *out = metrics::CallStackProfileParams::Process::UTILITY_PROCESS; |
| 182 return true; |
| 183 case metrics::mojom::Process::ZYGOTE_PROCESS: |
| 184 *out = metrics::CallStackProfileParams::Process::ZYGOTE_PROCESS; |
| 185 return true; |
| 186 case metrics::mojom::Process::SANDBOX_HELPER_PROCESS: |
| 187 *out = metrics::CallStackProfileParams::Process::SANDBOX_HELPER_PROCESS; |
| 188 return true; |
| 189 case metrics::mojom::Process::PPAPI_PLUGIN_PROCESS: |
| 190 *out = metrics::CallStackProfileParams::Process::PPAPI_PLUGIN_PROCESS; |
| 191 return true; |
| 192 case metrics::mojom::Process::PPAPI_BROKER_PROCESS: |
| 193 *out = metrics::CallStackProfileParams::Process::PPAPI_BROKER_PROCESS; |
162 return true; | 194 return true; |
163 } | 195 } |
164 return false; | 196 return false; |
| 197 } |
| 198 }; |
| 199 |
| 200 template <> |
| 201 struct EnumTraits<metrics::mojom::Thread, |
| 202 metrics::CallStackProfileParams::Thread> { |
| 203 static metrics::mojom::Thread ToMojom( |
| 204 metrics::CallStackProfileParams::Thread thread) { |
| 205 switch (thread) { |
| 206 case metrics::CallStackProfileParams::Thread::UNKNOWN_THREAD: |
| 207 return metrics::mojom::Thread::UNKNOWN_THREAD; |
| 208 case metrics::CallStackProfileParams::Thread::UI_THREAD: |
| 209 return metrics::mojom::Thread::UI_THREAD; |
| 210 case metrics::CallStackProfileParams::Thread::FILE_THREAD: |
| 211 return metrics::mojom::Thread::FILE_THREAD; |
| 212 case metrics::CallStackProfileParams::Thread::FILE_USER_BLOCKING_THREAD: |
| 213 return metrics::mojom::Thread::FILE_USER_BLOCKING_THREAD; |
| 214 case metrics::CallStackProfileParams::Thread::PROCESS_LAUNCHER_THREAD: |
| 215 return metrics::mojom::Thread::PROCESS_LAUNCHER_THREAD; |
| 216 case metrics::CallStackProfileParams::Thread::CACHE_THREAD: |
| 217 return metrics::mojom::Thread::CACHE_THREAD; |
| 218 case metrics::CallStackProfileParams::Thread::IO_THREAD: |
| 219 return metrics::mojom::Thread::IO_THREAD; |
| 220 case metrics::CallStackProfileParams::Thread::DB_THREAD: |
| 221 return metrics::mojom::Thread::DB_THREAD; |
| 222 case metrics::CallStackProfileParams::Thread::GPU_MAIN_THREAD: |
| 223 return metrics::mojom::Thread::GPU_MAIN_THREAD; |
| 224 case metrics::CallStackProfileParams::Thread::RENDER_THREAD: |
| 225 return metrics::mojom::Thread::RENDER_THREAD; |
| 226 case metrics::CallStackProfileParams::Thread::UTILITY_THREAD: |
| 227 return metrics::mojom::Thread::UTILITY_THREAD; |
| 228 } |
| 229 NOTREACHED(); |
| 230 return metrics::mojom::Thread::UNKNOWN_THREAD; |
| 231 } |
| 232 |
| 233 static bool FromMojom(metrics::mojom::Thread thread, |
| 234 metrics::CallStackProfileParams::Thread* out) { |
| 235 switch (thread) { |
| 236 case metrics::mojom::Thread::UNKNOWN_THREAD: |
| 237 *out = metrics::CallStackProfileParams::Thread::UNKNOWN_THREAD; |
| 238 return true; |
| 239 case metrics::mojom::Thread::UI_THREAD: |
| 240 *out = metrics::CallStackProfileParams::Thread::UI_THREAD; |
| 241 return true; |
| 242 case metrics::mojom::Thread::FILE_THREAD: |
| 243 *out = metrics::CallStackProfileParams::Thread::FILE_THREAD; |
| 244 return true; |
| 245 case metrics::mojom::Thread::FILE_USER_BLOCKING_THREAD: |
| 246 *out = |
| 247 metrics::CallStackProfileParams::Thread::FILE_USER_BLOCKING_THREAD; |
| 248 return true; |
| 249 case metrics::mojom::Thread::PROCESS_LAUNCHER_THREAD: |
| 250 *out = metrics::CallStackProfileParams::Thread::PROCESS_LAUNCHER_THREAD; |
| 251 return true; |
| 252 case metrics::mojom::Thread::CACHE_THREAD: |
| 253 *out = metrics::CallStackProfileParams::Thread::CACHE_THREAD; |
| 254 return true; |
| 255 case metrics::mojom::Thread::IO_THREAD: |
| 256 *out = metrics::CallStackProfileParams::Thread::IO_THREAD; |
| 257 return true; |
| 258 case metrics::mojom::Thread::DB_THREAD: |
| 259 *out = metrics::CallStackProfileParams::Thread::DB_THREAD; |
| 260 return true; |
| 261 case metrics::mojom::Thread::GPU_MAIN_THREAD: |
| 262 *out = metrics::CallStackProfileParams::Thread::GPU_MAIN_THREAD; |
| 263 return true; |
| 264 case metrics::mojom::Thread::RENDER_THREAD: |
| 265 *out = metrics::CallStackProfileParams::Thread::RENDER_THREAD; |
| 266 return true; |
| 267 case metrics::mojom::Thread::UTILITY_THREAD: |
| 268 *out = metrics::CallStackProfileParams::Thread::UTILITY_THREAD; |
| 269 return true; |
| 270 } |
| 271 return false; |
165 } | 272 } |
166 }; | 273 }; |
167 | 274 |
168 template <> | 275 template <> |
169 struct EnumTraits<metrics::mojom::Trigger, | 276 struct EnumTraits<metrics::mojom::Trigger, |
170 metrics::CallStackProfileParams::Trigger> { | 277 metrics::CallStackProfileParams::Trigger> { |
171 static metrics::mojom::Trigger ToMojom( | 278 static metrics::mojom::Trigger ToMojom( |
172 metrics::CallStackProfileParams::Trigger trigger) { | 279 metrics::CallStackProfileParams::Trigger trigger) { |
173 switch (trigger) { | 280 switch (trigger) { |
174 case metrics::CallStackProfileParams::Trigger::UNKNOWN: | 281 case metrics::CallStackProfileParams::Trigger::UNKNOWN: |
(...skipping 25 matching lines...) Expand all Loading... |
200 *out = metrics::CallStackProfileParams::Trigger::THREAD_HUNG; | 307 *out = metrics::CallStackProfileParams::Trigger::THREAD_HUNG; |
201 return true; | 308 return true; |
202 } | 309 } |
203 return false; | 310 return false; |
204 } | 311 } |
205 }; | 312 }; |
206 | 313 |
207 template <> | 314 template <> |
208 struct StructTraits<metrics::mojom::CallStackProfileParamsDataView, | 315 struct StructTraits<metrics::mojom::CallStackProfileParamsDataView, |
209 metrics::CallStackProfileParams> { | 316 metrics::CallStackProfileParams> { |
| 317 static metrics::CallStackProfileParams::Process process( |
| 318 const metrics::CallStackProfileParams& params) { |
| 319 return params.process; |
| 320 } |
| 321 static metrics::CallStackProfileParams::Thread thread( |
| 322 const metrics::CallStackProfileParams& params) { |
| 323 return params.thread; |
| 324 } |
210 static metrics::CallStackProfileParams::Trigger trigger( | 325 static metrics::CallStackProfileParams::Trigger trigger( |
211 const metrics::CallStackProfileParams& params) { | 326 const metrics::CallStackProfileParams& params) { |
212 return params.trigger; | 327 return params.trigger; |
213 } | 328 } |
214 static metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec( | 329 static metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec( |
215 const metrics::CallStackProfileParams& params) { | 330 const metrics::CallStackProfileParams& params) { |
216 return params.ordering_spec; | 331 return params.ordering_spec; |
217 } | 332 } |
218 | 333 |
219 static bool Read(metrics::mojom::CallStackProfileParamsDataView data, | 334 static bool Read(metrics::mojom::CallStackProfileParamsDataView data, |
220 metrics::CallStackProfileParams* out) { | 335 metrics::CallStackProfileParams* out) { |
| 336 metrics::CallStackProfileParams::Process process; |
| 337 metrics::CallStackProfileParams::Thread thread; |
221 metrics::CallStackProfileParams::Trigger trigger; | 338 metrics::CallStackProfileParams::Trigger trigger; |
222 metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec; | 339 metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec; |
223 if (!data.ReadTrigger(&trigger) || !data.ReadOrderingSpec(&ordering_spec)) | 340 if (!data.ReadProcess(&process) || !data.ReadThread(&thread) || |
| 341 !data.ReadTrigger(&trigger) || !data.ReadOrderingSpec(&ordering_spec)) { |
224 return false; | 342 return false; |
225 *out = metrics::CallStackProfileParams(trigger, ordering_spec); | 343 } |
| 344 *out = metrics::CallStackProfileParams(process, thread, trigger, |
| 345 ordering_spec); |
226 return true; | 346 return true; |
227 } | 347 } |
228 }; | 348 }; |
229 | 349 |
| 350 template <> |
| 351 struct EnumTraits<metrics::mojom::SampleOrderingSpec, |
| 352 metrics::CallStackProfileParams::SampleOrderingSpec> { |
| 353 |
| 354 static metrics::mojom::SampleOrderingSpec ToMojom( |
| 355 metrics::CallStackProfileParams::SampleOrderingSpec spec) { |
| 356 switch (spec) { |
| 357 case metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE: |
| 358 return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE; |
| 359 case metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER: |
| 360 return metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER; |
| 361 } |
| 362 NOTREACHED(); |
| 363 return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE; |
| 364 } |
| 365 |
| 366 static bool FromMojom( |
| 367 metrics::mojom::SampleOrderingSpec spec, |
| 368 metrics::CallStackProfileParams::SampleOrderingSpec* out) { |
| 369 switch (spec) { |
| 370 case metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE: |
| 371 *out = metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE; |
| 372 return true; |
| 373 case metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER: |
| 374 *out = |
| 375 metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER; |
| 376 return true; |
| 377 } |
| 378 return false; |
| 379 } |
| 380 }; |
| 381 |
230 } // mojo | 382 } // mojo |
231 | 383 |
232 #endif // COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ | 384 #endif // COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ |
OLD | NEW |