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_NO_SWAP_COMPONENT: | |
66 return ui::mojom::LatencyComponentType:: | |
67 INPUT_EVENT_LATENCY_TERMINATED_NO_SWAP_COMPONENT; | |
68 case ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT: | |
69 return ui::mojom::LatencyComponentType:: | |
70 INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT; | |
71 case ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT: | |
72 return ui::mojom::LatencyComponentType:: | |
73 INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT; | |
74 case ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT: | |
75 return ui::mojom::LatencyComponentType:: | |
76 INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT; | |
77 case ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT: | |
78 return ui::mojom::LatencyComponentType:: | |
79 INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT; | |
80 } | |
81 NOTREACHED(); | |
82 return ui::mojom::LatencyComponentType::LATENCY_COMPONENT_TYPE_LAST; | |
83 } | |
84 | |
85 ui::LatencyComponentType MojoLatencyComponentTypeToUI( | |
86 ui::mojom::LatencyComponentType type) { | |
87 switch (type) { | |
88 case ui::mojom::LatencyComponentType:: | |
89 INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT: | |
90 return ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT; | |
91 case ui::mojom::LatencyComponentType:: | |
92 LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT: | |
93 return ui::LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT; | |
94 case ui::mojom::LatencyComponentType:: | |
95 INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT: | |
96 return ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT; | |
97 case ui::mojom::LatencyComponentType:: | |
98 INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT: | |
99 return ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT; | |
100 case ui::mojom::LatencyComponentType:: | |
101 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT: | |
102 return ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT; | |
103 case ui::mojom::LatencyComponentType::INPUT_EVENT_LATENCY_UI_COMPONENT: | |
104 return ui::INPUT_EVENT_LATENCY_UI_COMPONENT; | |
105 case ui::mojom::LatencyComponentType:: | |
106 INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT: | |
107 return ui::INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT; | |
108 case ui::mojom::LatencyComponentType:: | |
109 INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT: | |
110 return ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT; | |
111 case ui::mojom::LatencyComponentType:: | |
112 INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT: | |
113 return ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT; | |
114 case ui::mojom::LatencyComponentType:: | |
115 INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT: | |
116 return ui::INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT; | |
117 case ui::mojom::LatencyComponentType::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT: | |
118 return ui::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT; | |
119 case ui::mojom::LatencyComponentType:: | |
120 WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT: | |
121 return ui::WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT; | |
122 case ui::mojom::LatencyComponentType::TAB_SHOW_COMPONENT: | |
123 return ui::TAB_SHOW_COMPONENT; | |
124 case ui::mojom::LatencyComponentType:: | |
125 INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT: | |
126 return ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT; | |
127 case ui::mojom::LatencyComponentType:: | |
128 INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT: | |
129 return ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT; | |
130 case ui::mojom::LatencyComponentType::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT: | |
131 return ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT; | |
132 case ui::mojom::LatencyComponentType:: | |
133 INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL: | |
134 return ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL; | |
135 case ui::mojom::LatencyComponentType:: | |
136 INPUT_EVENT_LATENCY_TERMINATED_NO_SWAP_COMPONENT: | |
137 return ui::INPUT_EVENT_LATENCY_TERMINATED_NO_SWAP_COMPONENT; | |
138 case ui::mojom::LatencyComponentType:: | |
139 INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT: | |
140 return ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT; | |
141 case ui::mojom::LatencyComponentType:: | |
142 INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT: | |
143 return ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT; | |
144 case ui::mojom::LatencyComponentType:: | |
145 INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT: | |
146 return ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT; | |
147 case ui::mojom::LatencyComponentType:: | |
148 INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT: | |
149 return ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT; | |
150 } | |
151 NOTREACHED(); | |
152 return ui::LATENCY_COMPONENT_TYPE_LAST; | |
153 } | |
154 | |
155 } // namespace | |
156 | |
157 // static | |
158 int64_t StructTraits<ui::mojom::LatencyComponentDataView, | |
159 ui::LatencyInfo::LatencyComponent>:: | |
160 sequence_number(const ui::LatencyInfo::LatencyComponent& component) { | |
161 return component.sequence_number; | |
162 } | |
163 | |
164 // static | |
165 base::TimeTicks StructTraits<ui::mojom::LatencyComponentDataView, | |
166 ui::LatencyInfo::LatencyComponent>:: | |
167 event_time(const ui::LatencyInfo::LatencyComponent& component) { | |
168 return component.event_time; | |
169 } | |
170 | |
171 // static | |
172 uint32_t StructTraits<ui::mojom::LatencyComponentDataView, | |
173 ui::LatencyInfo::LatencyComponent>:: | |
174 event_count(const ui::LatencyInfo::LatencyComponent& component) { | |
175 return component.event_count; | |
176 } | |
177 | |
178 // static | |
179 base::TimeTicks StructTraits<ui::mojom::LatencyComponentDataView, | |
180 ui::LatencyInfo::LatencyComponent>:: | |
181 first_event_time(const ui::LatencyInfo::LatencyComponent& component) { | |
182 return component.first_event_time; | |
183 } | |
184 | |
185 // static | |
186 base::TimeTicks StructTraits<ui::mojom::LatencyComponentDataView, | |
187 ui::LatencyInfo::LatencyComponent>:: | |
188 last_event_time(const ui::LatencyInfo::LatencyComponent& component) { | |
189 return component.last_event_time; | |
190 } | |
191 | |
192 // static | |
193 bool StructTraits<ui::mojom::LatencyComponentDataView, | |
194 ui::LatencyInfo::LatencyComponent>:: | |
195 Read(ui::mojom::LatencyComponentDataView data, | |
196 ui::LatencyInfo::LatencyComponent* out) { | |
197 if (!data.ReadEventTime(&out->event_time)) | |
198 return false; | |
199 if (!data.ReadFirstEventTime(&out->first_event_time)) | |
200 return false; | |
201 if (!data.ReadLastEventTime(&out->last_event_time)) | |
202 return false; | |
203 out->sequence_number = data.sequence_number(); | |
204 out->event_count = data.event_count(); | |
205 return true; | |
206 } | |
207 | |
208 // static | |
209 ui::mojom::LatencyComponentType | |
210 StructTraits<ui::mojom::LatencyComponentIdDataView, | |
211 std::pair<ui::LatencyComponentType, int64_t>>:: | |
212 type(const std::pair<ui::LatencyComponentType, int64_t>& id) { | |
213 return UILatencyComponentTypeToMojo(id.first); | |
214 } | |
215 | |
216 // static | |
217 int64_t StructTraits<ui::mojom::LatencyComponentIdDataView, | |
218 std::pair<ui::LatencyComponentType, int64_t>>:: | |
219 id(const std::pair<ui::LatencyComponentType, int64_t>& id) { | |
220 return id.second; | |
221 } | |
222 | |
223 // static | |
224 bool StructTraits<ui::mojom::LatencyComponentIdDataView, | |
225 std::pair<ui::LatencyComponentType, int64_t>>:: | |
226 Read(ui::mojom::LatencyComponentIdDataView data, | |
227 std::pair<ui::LatencyComponentType, int64_t>* out) { | |
228 out->first = MojoLatencyComponentTypeToUI(data.type()); | |
229 out->second = data.id(); | |
230 return true; | |
231 } | |
232 | |
233 // static | |
234 const std::string& | |
235 StructTraits<ui::mojom::LatencyInfoDataView, ui::LatencyInfo>::trace_name( | |
236 const ui::LatencyInfo& info) { | |
237 return info.trace_name_; | |
238 } | |
239 | |
240 const ui::LatencyInfo::LatencyMap& | |
241 StructTraits<ui::mojom::LatencyInfoDataView, | |
242 ui::LatencyInfo>::latency_components(const ui::LatencyInfo& info) { | |
243 return info.latency_components(); | |
244 } | |
245 InputCoordinateArray | |
246 StructTraits<ui::mojom::LatencyInfoDataView, | |
247 ui::LatencyInfo>::input_coordinates(const ui::LatencyInfo& info) { | |
248 return {info.input_coordinates_size_, ui::LatencyInfo::kMaxInputCoordinates, | |
249 const_cast<gfx::PointF*>(info.input_coordinates_)}; | |
250 } | |
251 | |
252 int64_t StructTraits<ui::mojom::LatencyInfoDataView, ui::LatencyInfo>::trace_id( | |
253 const ui::LatencyInfo& info) { | |
254 return info.trace_id(); | |
255 } | |
256 | |
257 bool StructTraits<ui::mojom::LatencyInfoDataView, ui::LatencyInfo>::coalesced( | |
258 const ui::LatencyInfo& info) { | |
259 return info.coalesced(); | |
260 } | |
261 | |
262 bool StructTraits<ui::mojom::LatencyInfoDataView, ui::LatencyInfo>::terminated( | |
263 const ui::LatencyInfo& info) { | |
264 return info.terminated(); | |
265 } | |
266 | |
267 bool StructTraits<ui::mojom::LatencyInfoDataView, ui::LatencyInfo>::Read( | |
268 ui::mojom::LatencyInfoDataView data, | |
269 ui::LatencyInfo* out) { | |
270 if (!data.ReadTraceName(&out->trace_name_)) | |
271 return false; | |
272 | |
273 mojo::ArrayDataView<ui::mojom::LatencyComponentPairDataView> components; | |
274 data.GetLatencyComponentsDataView(&components); | |
275 for (uint32_t i = 0; i < components.size(); ++i) { | |
276 ui::mojom::LatencyComponentPairDataView component_pair; | |
277 components.GetDataView(i, &component_pair); | |
278 ui::LatencyInfo::LatencyMap::key_type key; | |
279 if (!component_pair.ReadKey(&key)) | |
280 return false; | |
281 auto& value = out->latency_components_[key]; | |
282 if (!component_pair.ReadValue(&value)) | |
283 return false; | |
284 } | |
285 | |
286 InputCoordinateArray input_coordinate_array = { | |
287 0, ui::LatencyInfo::kMaxInputCoordinates, out->input_coordinates_}; | |
288 if (!data.ReadInputCoordinates(&input_coordinate_array)) | |
289 return false; | |
290 // TODO(fsamuel): ui::LatencyInfo::input_coordinates_size_ should be a size_t. | |
291 out->input_coordinates_size_ = | |
292 static_cast<uint32_t>(input_coordinate_array.size); | |
293 | |
294 out->trace_id_ = data.trace_id(); | |
295 out->coalesced_ = data.coalesced(); | |
296 out->terminated_ = data.terminated(); | |
297 return true; | |
298 } | |
299 | |
300 } // namespace mojo | |
OLD | NEW |