OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "ui/events/mojo/latency_info_struct_traits.h" | |
6 | |
7 #include "ipc/ipc_message_utils.h" | |
8 | |
9 namespace mojo { | |
10 | |
11 namespace { | |
12 | |
13 ui::mojom::LatencyComponentType UILatencyComponentTypeToMojo( | |
14 ui::LatencyComponentType type) { | |
15 switch (type) { | |
16 case ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT: | |
17 return ui::mojom::LatencyComponentType:: | |
18 INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT; | |
19 case ui::LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT: | |
20 return ui::mojom::LatencyComponentType:: | |
21 LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT; | |
22 case ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT: | |
23 return ui::mojom::LatencyComponentType:: | |
24 INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT; | |
25 case ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT: | |
26 return ui::mojom::LatencyComponentType:: | |
27 INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT; | |
28 case ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT: | |
29 return ui::mojom::LatencyComponentType:: | |
30 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT; | |
31 case ui::INPUT_EVENT_LATENCY_UI_COMPONENT: | |
32 return ui::mojom::LatencyComponentType::INPUT_EVENT_LATENCY_UI_COMPONENT; | |
33 case ui::INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT: | |
34 return ui::mojom::LatencyComponentType:: | |
35 INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT; | |
36 case ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT: | |
37 return ui::mojom::LatencyComponentType:: | |
38 INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT; | |
39 case ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT: | |
40 return ui::mojom::LatencyComponentType:: | |
41 INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT; | |
42 case ui::INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT: | |
43 return ui::mojom::LatencyComponentType:: | |
44 INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT; | |
45 case ui::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT: | |
46 return ui::mojom::LatencyComponentType:: | |
47 INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT; | |
48 case ui::WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT: | |
49 return ui::mojom::LatencyComponentType:: | |
50 WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT; | |
51 case ui::TAB_SHOW_COMPONENT: | |
52 return ui::mojom::LatencyComponentType::TAB_SHOW_COMPONENT; | |
53 case ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT: | |
54 return ui::mojom::LatencyComponentType:: | |
55 INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT; | |
56 case ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT: | |
57 return ui::mojom::LatencyComponentType:: | |
58 INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT; | |
59 case ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT: | |
60 return ui::mojom::LatencyComponentType:: | |
61 INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT; | |
62 case ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL: | |
63 return ui::mojom::LatencyComponentType:: | |
64 INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL; | |
65 case ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT: | |
66 return ui::mojom::LatencyComponentType:: | |
67 INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT; | |
68 case ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT: | |
69 return ui::mojom::LatencyComponentType:: | |
70 INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT; | |
71 case ui::INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT: | |
72 return ui::mojom::LatencyComponentType:: | |
73 INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT; | |
74 case ui::INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT: | |
75 return ui::mojom::LatencyComponentType:: | |
76 INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT; | |
77 case ui::INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT: | |
78 return ui::mojom::LatencyComponentType:: | |
79 INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT; | |
80 case ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT: | |
81 return ui::mojom::LatencyComponentType:: | |
82 INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT; | |
83 case ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT: | |
84 return ui::mojom::LatencyComponentType:: | |
85 INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT; | |
86 case ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT: | |
87 return ui::mojom::LatencyComponentType:: | |
88 INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT; | |
89 case ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT: | |
90 return ui::mojom::LatencyComponentType:: | |
91 INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT; | |
92 } | |
93 NOTREACHED(); | |
94 return ui::mojom::LatencyComponentType::LATENCY_COMPONENT_TYPE_LAST; | |
95 } | |
96 | |
97 ui::LatencyComponentType MojoLatencyComponentTypeToUI( | |
98 ui::mojom::LatencyComponentType type) { | |
99 switch (type) { | |
100 case ui::mojom::LatencyComponentType:: | |
101 INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT: | |
102 return ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT; | |
103 case ui::mojom::LatencyComponentType:: | |
104 LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT: | |
105 return ui::LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT; | |
106 case ui::mojom::LatencyComponentType:: | |
107 INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT: | |
108 return ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT; | |
109 case ui::mojom::LatencyComponentType:: | |
110 INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT: | |
111 return ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT; | |
112 case ui::mojom::LatencyComponentType:: | |
113 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT: | |
114 return ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT; | |
115 case ui::mojom::LatencyComponentType::INPUT_EVENT_LATENCY_UI_COMPONENT: | |
116 return ui::INPUT_EVENT_LATENCY_UI_COMPONENT; | |
117 case ui::mojom::LatencyComponentType:: | |
118 INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT: | |
119 return ui::INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT; | |
120 case ui::mojom::LatencyComponentType:: | |
121 INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT: | |
122 return ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT; | |
123 case ui::mojom::LatencyComponentType:: | |
124 INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT: | |
125 return ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT; | |
126 case ui::mojom::LatencyComponentType:: | |
127 INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT: | |
128 return ui::INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT; | |
129 case ui::mojom::LatencyComponentType::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT: | |
130 return ui::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT; | |
131 case ui::mojom::LatencyComponentType:: | |
132 WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT: | |
133 return ui::WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT; | |
134 case ui::mojom::LatencyComponentType::TAB_SHOW_COMPONENT: | |
135 return ui::TAB_SHOW_COMPONENT; | |
136 case ui::mojom::LatencyComponentType:: | |
137 INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT: | |
138 return ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT; | |
139 case ui::mojom::LatencyComponentType:: | |
140 INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT: | |
141 return ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT; | |
142 case ui::mojom::LatencyComponentType::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT: | |
143 return ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT; | |
144 case ui::mojom::LatencyComponentType:: | |
145 INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL: | |
146 return ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL; | |
147 case ui::mojom::LatencyComponentType:: | |
148 INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT: | |
149 return ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT; | |
150 case ui::mojom::LatencyComponentType:: | |
151 INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT: | |
152 return ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT; | |
153 case ui::mojom::LatencyComponentType:: | |
154 INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT: | |
155 return ui::INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT; | |
156 case ui::mojom::LatencyComponentType:: | |
157 INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT: | |
158 return ui::INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT; | |
159 case ui::mojom::LatencyComponentType:: | |
160 INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT: | |
161 return ui::INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT; | |
162 case ui::mojom::LatencyComponentType:: | |
163 INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT: | |
164 return ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT; | |
165 case ui::mojom::LatencyComponentType:: | |
166 INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT: | |
167 return ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT; | |
168 case ui::mojom::LatencyComponentType:: | |
169 INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT: | |
170 return ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT; | |
171 case ui::mojom::LatencyComponentType:: | |
172 INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT: | |
173 return ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT; | |
174 } | |
175 NOTREACHED(); | |
176 return ui::LATENCY_COMPONENT_TYPE_LAST; | |
177 } | |
sadrul
2016/06/06 16:20:13
This is somewhat unfortunate. Can we cast between
Fady Samuel
2016/06/06 18:00:22
We decided that this is the best way to catch chan
| |
178 | |
179 } // namespace | |
180 | |
181 // static | |
182 float StructTraits<ui::mojom::InputCoordinate, | |
183 ui::LatencyInfo::InputCoordinate>:: | |
184 x(const ui::LatencyInfo::InputCoordinate& input) { | |
185 return input.x; | |
yzshen1
2016/06/06 16:15:22
optional: It seems fine to inline such short funct
Fady Samuel
2016/06/06 18:00:22
I inlined InputCoordinate. Done.
| |
186 } | |
187 | |
188 // static | |
189 float StructTraits<ui::mojom::InputCoordinate, | |
190 ui::LatencyInfo::InputCoordinate>:: | |
191 y(const ui::LatencyInfo::InputCoordinate& input) { | |
192 return input.y; | |
193 } | |
194 | |
195 // static | |
196 bool StructTraits<ui::mojom::InputCoordinate, | |
197 ui::LatencyInfo::InputCoordinate>:: | |
198 Read(ui::mojom::InputCoordinateDataView data, | |
199 ui::LatencyInfo::InputCoordinate* out) { | |
200 out->x = data.x(); | |
201 out->y = data.y(); | |
202 return true; | |
203 } | |
204 | |
205 // static | |
206 size_t ArrayTraits<InputCoordinateArray>::GetSize( | |
207 const InputCoordinateArray& b) { | |
208 return b.size; | |
209 } | |
210 | |
211 // static | |
212 ui::LatencyInfo::InputCoordinate* ArrayTraits<InputCoordinateArray>::GetData( | |
213 InputCoordinateArray& b) { | |
214 return b.data; | |
215 } | |
216 | |
217 // static | |
218 const ui::LatencyInfo::InputCoordinate* | |
219 ArrayTraits<InputCoordinateArray>::GetData(const InputCoordinateArray& b) { | |
220 return b.data; | |
221 } | |
222 | |
223 // static | |
224 ui::LatencyInfo::InputCoordinate& ArrayTraits<InputCoordinateArray>::GetAt( | |
225 InputCoordinateArray& b, | |
226 size_t i) { | |
227 return b.data[i]; | |
228 } | |
229 | |
230 // static | |
231 const ui::LatencyInfo::InputCoordinate& | |
232 ArrayTraits<InputCoordinateArray>::GetAt(const InputCoordinateArray& b, | |
233 size_t i) { | |
234 return b.data[i]; | |
235 } | |
236 | |
237 // static | |
238 void ArrayTraits<InputCoordinateArray>::Resize(InputCoordinateArray& b, | |
239 size_t size) { | |
240 DCHECK(b.size == size); | |
241 } | |
242 | |
243 // static | |
244 int64_t | |
245 StructTraits<ui::mojom::LatencyComponent, ui::LatencyInfo::LatencyComponent>:: | |
246 sequence_number(const ui::LatencyInfo::LatencyComponent& component) { | |
247 return component.sequence_number; | |
248 } | |
249 | |
250 // static | |
251 base::TimeTicks | |
252 StructTraits<ui::mojom::LatencyComponent, ui::LatencyInfo::LatencyComponent>:: | |
253 event_time(const ui::LatencyInfo::LatencyComponent& component) { | |
254 return component.event_time; | |
255 } | |
256 | |
257 // static | |
258 uint32_t | |
259 StructTraits<ui::mojom::LatencyComponent, ui::LatencyInfo::LatencyComponent>:: | |
260 event_count(const ui::LatencyInfo::LatencyComponent& component) { | |
261 return component.event_count; | |
262 } | |
263 | |
264 // static | |
265 bool StructTraits<ui::mojom::LatencyComponent, | |
266 ui::LatencyInfo::LatencyComponent>:: | |
267 Read(ui::mojom::LatencyComponentDataView data, | |
268 ui::LatencyInfo::LatencyComponent* out) { | |
269 if (!data.ReadEventTime(&out->event_time)) | |
270 return false; | |
271 out->sequence_number = data.sequence_number(); | |
272 out->event_count = data.event_count(); | |
273 return true; | |
274 } | |
275 | |
276 // static | |
277 ui::mojom::LatencyComponentType | |
278 StructTraits<ui::mojom::LatencyComponentId, | |
279 std::pair<ui::LatencyComponentType, int64_t>>:: | |
280 type(const std::pair<ui::LatencyComponentType, int64_t>& id) { | |
281 return UILatencyComponentTypeToMojo(id.first); | |
282 } | |
283 | |
284 // static | |
285 int64_t StructTraits<ui::mojom::LatencyComponentId, | |
286 std::pair<ui::LatencyComponentType, int64_t>>:: | |
287 id(const std::pair<ui::LatencyComponentType, int64_t>& id) { | |
288 return id.second; | |
289 } | |
290 | |
291 // static | |
292 bool StructTraits<ui::mojom::LatencyComponentId, | |
293 std::pair<ui::LatencyComponentType, int64_t>>:: | |
294 Read(ui::mojom::LatencyComponentIdDataView data, | |
295 std::pair<ui::LatencyComponentType, int64_t>* out) { | |
296 out->first = MojoLatencyComponentTypeToUI(data.type()); | |
297 out->second = data.id(); | |
298 return true; | |
299 } | |
300 | |
301 std::string StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::trace_name( | |
302 const ui::LatencyInfo& info) { | |
303 return info.trace_name_; | |
304 } | |
305 | |
306 mojo::Array<ui::mojom::LatencyComponentPairPtr> | |
307 StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::latency_components( | |
308 const ui::LatencyInfo& info) { | |
309 // TODO(fsamuel): It would be nice if we had IterableTraits. | |
310 auto components = mojo::Array<ui::mojom::LatencyComponentPairPtr>::New( | |
311 info.latency_components().size()); | |
312 uint32_t i = 0; | |
313 for (ui::LatencyInfo::LatencyMap::const_iterator | |
314 it = info.latency_components().begin(); | |
315 it != info.latency_components().end(); ++it, ++i) { | |
316 auto latency_component_pair = ui::mojom::LatencyComponentPair::New(); | |
317 latency_component_pair->key = it->first; | |
318 latency_component_pair->value = it->second; | |
319 components[i] = std::move(latency_component_pair); | |
320 } | |
321 return components; | |
322 } | |
323 | |
324 uint32_t | |
325 StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::input_coordinates_size( | |
326 const ui::LatencyInfo& info) { | |
327 return info.input_coordinates_size(); | |
328 } | |
329 | |
330 InputCoordinateArray | |
331 StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::input_coordinates( | |
332 const ui::LatencyInfo& info) { | |
333 // TODO(fsamuel): This can be an ArrayTraits. | |
334 InputCoordinateArray input_coordinates_array = { | |
335 info.input_coordinates_size(), | |
336 const_cast<ui::LatencyInfo::InputCoordinate*>(info.input_coordinates_)}; | |
337 return input_coordinates_array; | |
338 } | |
339 | |
340 int64_t StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::trace_id( | |
341 const ui::LatencyInfo& info) { | |
342 return info.trace_id(); | |
343 } | |
344 | |
345 bool StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::coalesced( | |
346 const ui::LatencyInfo& info) { | |
347 return info.coalesced(); | |
348 } | |
349 | |
350 bool StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::terminated( | |
351 const ui::LatencyInfo& info) { | |
352 return info.terminated(); | |
353 } | |
354 | |
355 bool StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::Read( | |
356 ui::mojom::LatencyInfoDataView data, | |
357 ui::LatencyInfo* out) { | |
358 if (!data.ReadTraceName(&out->trace_name_)) | |
359 return false; | |
360 | |
361 mojo::Array<ui::mojom::LatencyComponentPairPtr> components; | |
362 if (!data.ReadLatencyComponents(&components)) | |
363 return false; | |
364 for (uint32_t i = 0; i < components.size(); ++i) | |
365 out->latency_components_[components[i]->key] = components[i]->value; | |
366 | |
367 out->input_coordinates_size_ = data.input_coordinates_size(); | |
yzshen1
2016/06/06 16:15:22
It seems you need to test whether the size from |d
Fady Samuel
2016/06/06 18:00:22
Done.
| |
368 InputCoordinateArray input_coordinate_array = {data.input_coordinates_size(), | |
369 out->input_coordinates_}; | |
370 if (!data.ReadInputCoordinates(&input_coordinate_array)) | |
371 return false; | |
372 | |
373 out->trace_id_ = data.trace_id(); | |
374 out->coalesced_ = data.coalesced(); | |
375 out->terminated_ = data.terminated(); | |
376 return true; | |
377 } | |
378 | |
379 } // namespace mojo | |
OLD | NEW |