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

Unified 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: Make Windows happier 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/mojo/latency_info_struct_traits.h ('k') | ui/events/mojo/struct_traits_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/mojo/latency_info_struct_traits.cc
diff --git a/ui/events/mojo/latency_info_struct_traits.cc b/ui/events/mojo/latency_info_struct_traits.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b95d48028f7466bed01bf48108bf9aa0aaf8d2e8
--- /dev/null
+++ b/ui/events/mojo/latency_info_struct_traits.cc
@@ -0,0 +1,369 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/mojo/latency_info_struct_traits.h"
+
+#include "ipc/ipc_message_utils.h"
+
+namespace mojo {
+
+namespace {
+
+ui::mojom::LatencyComponentType UILatencyComponentTypeToMojo(
+ ui::LatencyComponentType type) {
+ switch (type) {
+ case ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT;
+ case ui::LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_UI_COMPONENT:
+ return ui::mojom::LatencyComponentType::INPUT_EVENT_LATENCY_UI_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT;
+ case ui::WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT;
+ case ui::TAB_SHOW_COMPONENT:
+ return ui::mojom::LatencyComponentType::TAB_SHOW_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT;
+ case ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT;
+ case ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL;
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT;
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT:
+ return ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT;
+ }
+ NOTREACHED();
+ return ui::mojom::LatencyComponentType::LATENCY_COMPONENT_TYPE_LAST;
+}
+
+ui::LatencyComponentType MojoLatencyComponentTypeToUI(
+ ui::mojom::LatencyComponentType type) {
+ switch (type) {
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT:
+ return ui::LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT;
+ case ui::mojom::LatencyComponentType::INPUT_EVENT_LATENCY_UI_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_UI_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT;
+ case ui::mojom::LatencyComponentType::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT:
+ return ui::WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT;
+ case ui::mojom::LatencyComponentType::TAB_SHOW_COMPONENT:
+ return ui::TAB_SHOW_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT:
+ return ui::INPUT_EVENT_BROWSER_RECEIVED_RENDERER_SWAP_COMPONENT;
+ case ui::mojom::LatencyComponentType::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT:
+ return ui::INPUT_EVENT_GPU_SWAP_BUFFER_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL:
+ return ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_WHEEL_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_TERMINATED_KEYBOARD_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_NO_UPDATE_COMPONENT;
+ case ui::mojom::LatencyComponentType::
+ INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT:
+ return ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT;
+ }
+ NOTREACHED();
+ return ui::LATENCY_COMPONENT_TYPE_LAST;
+}
+
+} // namespace
+
+// static
+size_t ArrayTraits<InputCoordinateArray>::GetSize(
+ const InputCoordinateArray& b) {
+ return b.size;
+}
+
+// static
+ui::LatencyInfo::InputCoordinate* ArrayTraits<InputCoordinateArray>::GetData(
+ InputCoordinateArray& b) {
+ return b.data;
+}
+
+// static
+const ui::LatencyInfo::InputCoordinate*
+ArrayTraits<InputCoordinateArray>::GetData(const InputCoordinateArray& b) {
+ return b.data;
+}
+
+// static
+ui::LatencyInfo::InputCoordinate& ArrayTraits<InputCoordinateArray>::GetAt(
+ InputCoordinateArray& b,
+ size_t i) {
+ return b.data[i];
+}
+
+// static
+const ui::LatencyInfo::InputCoordinate&
+ArrayTraits<InputCoordinateArray>::GetAt(const InputCoordinateArray& b,
+ size_t i) {
+ return b.data[i];
+}
+
+// static
+void ArrayTraits<InputCoordinateArray>::Resize(InputCoordinateArray& b,
+ size_t size) {
+ // TODO(fsamuel): We should update ArrayTraits<T>::Resize to return a bool.
+ CHECK_LE(size, ui::LatencyInfo::kMaxInputCoordinates);
+ b.size = size;
+}
+
+// static
+int64_t
+StructTraits<ui::mojom::LatencyComponent, ui::LatencyInfo::LatencyComponent>::
+ sequence_number(const ui::LatencyInfo::LatencyComponent& component) {
+ return component.sequence_number;
+}
+
+// static
+base::TimeTicks
+StructTraits<ui::mojom::LatencyComponent, ui::LatencyInfo::LatencyComponent>::
+ event_time(const ui::LatencyInfo::LatencyComponent& component) {
+ return component.event_time;
+}
+
+// static
+uint32_t
+StructTraits<ui::mojom::LatencyComponent, ui::LatencyInfo::LatencyComponent>::
+ event_count(const ui::LatencyInfo::LatencyComponent& component) {
+ return component.event_count;
+}
+
+// static
+bool StructTraits<ui::mojom::LatencyComponent,
+ ui::LatencyInfo::LatencyComponent>::
+ Read(ui::mojom::LatencyComponentDataView data,
+ ui::LatencyInfo::LatencyComponent* out) {
+ if (!data.ReadEventTime(&out->event_time))
+ return false;
+ out->sequence_number = data.sequence_number();
+ out->event_count = data.event_count();
+ return true;
+}
+
+// static
+ui::mojom::LatencyComponentType
+StructTraits<ui::mojom::LatencyComponentId,
+ std::pair<ui::LatencyComponentType, int64_t>>::
+ type(const std::pair<ui::LatencyComponentType, int64_t>& id) {
+ return UILatencyComponentTypeToMojo(id.first);
+}
+
+// static
+int64_t StructTraits<ui::mojom::LatencyComponentId,
+ std::pair<ui::LatencyComponentType, int64_t>>::
+ id(const std::pair<ui::LatencyComponentType, int64_t>& id) {
+ return id.second;
+}
+
+// static
+bool StructTraits<ui::mojom::LatencyComponentId,
+ std::pair<ui::LatencyComponentType, int64_t>>::
+ Read(ui::mojom::LatencyComponentIdDataView data,
+ std::pair<ui::LatencyComponentType, int64_t>* out) {
+ out->first = MojoLatencyComponentTypeToUI(data.type());
+ out->second = data.id();
+ return true;
+}
+
+void* StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::SetUpContext(
+ const ui::LatencyInfo& info) {
+ // TODO(fsamuel): It would be nice if we had IterableTraits.
+ auto components = new mojo::Array<ui::mojom::LatencyComponentPairPtr>(
+ info.latency_components().size());
+ uint32_t i = 0;
+ for (ui::LatencyInfo::LatencyMap::const_iterator
+ it = info.latency_components().begin();
+ it != info.latency_components().end(); ++it, ++i) {
+ auto latency_component_pair = ui::mojom::LatencyComponentPair::New();
+ latency_component_pair->key = it->first;
+ latency_component_pair->value = it->second;
+ (*components)[i] = std::move(latency_component_pair);
+ }
+ return components;
+}
+
+void StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::TearDownContext(
+ const ui::LatencyInfo& info,
+ void* context) {
+ // static_cast to ensure destructor is called.
+ delete static_cast<mojo::Array<ui::mojom::LatencyComponentPairPtr>*>(context);
+}
+
+// static
+const std::string&
+StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::trace_name(
+ const ui::LatencyInfo& info) {
+ return info.trace_name_;
+}
+
+// static
+mojo::Array<ui::mojom::LatencyComponentPairPtr>&
+StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::latency_components(
+ const ui::LatencyInfo& info,
+ void* context) {
+ return *static_cast<mojo::Array<ui::mojom::LatencyComponentPairPtr>*>(
+ context);
+}
+
+InputCoordinateArray
+StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::input_coordinates(
+ const ui::LatencyInfo& info) {
+ InputCoordinateArray input_coordinates_array = {
+ ui::LatencyInfo::kMaxInputCoordinates,
+ const_cast<ui::LatencyInfo::InputCoordinate*>(info.input_coordinates_)};
+ return input_coordinates_array;
+}
+
+int64_t StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::trace_id(
+ const ui::LatencyInfo& info) {
+ return info.trace_id();
+}
+
+bool StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::coalesced(
+ const ui::LatencyInfo& info) {
+ return info.coalesced();
+}
+
+bool StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::terminated(
+ const ui::LatencyInfo& info) {
+ return info.terminated();
+}
+
+bool StructTraits<ui::mojom::LatencyInfo, ui::LatencyInfo>::Read(
+ ui::mojom::LatencyInfoDataView data,
+ ui::LatencyInfo* out) {
+ if (!data.ReadTraceName(&out->trace_name_))
+ return false;
+
+ mojo::Array<ui::mojom::LatencyComponentPairPtr> components;
+ if (!data.ReadLatencyComponents(&components))
+ return false;
+ for (uint32_t i = 0; i < components.size(); ++i)
+ out->latency_components_[components[i]->key] = components[i]->value;
+
+ InputCoordinateArray input_coordinate_array = {
+ ui::LatencyInfo::kMaxInputCoordinates, out->input_coordinates_};
+ if (!data.ReadInputCoordinates(&input_coordinate_array))
+ return false;
+ // TODO(fsamuel): ui::LatencyInfo::input_coordinates_size_ should be a size_t.
+ out->input_coordinates_size_ =
+ static_cast<uint32_t>(input_coordinate_array.size);
+
+ out->trace_id_ = data.trace_id();
+ out->coalesced_ = data.coalesced();
+ out->terminated_ = data.terminated();
+ return true;
+}
+
+} // namespace mojo
« no previous file with comments | « ui/events/mojo/latency_info_struct_traits.h ('k') | ui/events/mojo/struct_traits_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698