Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Side by Side Diff: ui/events/mojo/latency_info_struct_traits.cc

Issue 2040733002: Implement LatencyInfo StructTraits (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use ArrayTraits for InputCoordinates Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698