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

Side by Side Diff: content/browser/renderer_host/render_widget_host_impl.cc

Issue 569653002: Add input coordinate information to InputLatency (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Switch to float array. Created 6 years, 3 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "content/browser/renderer_host/render_widget_host_impl.h" 5 #include "content/browser/renderer_host/render_widget_host_impl.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after
850 850
851 void RenderWidgetHostImpl::ForwardMouseEvent(const WebMouseEvent& mouse_event) { 851 void RenderWidgetHostImpl::ForwardMouseEvent(const WebMouseEvent& mouse_event) {
852 ForwardMouseEventWithLatencyInfo(mouse_event, ui::LatencyInfo()); 852 ForwardMouseEventWithLatencyInfo(mouse_event, ui::LatencyInfo());
853 } 853 }
854 854
855 void RenderWidgetHostImpl::ForwardMouseEventWithLatencyInfo( 855 void RenderWidgetHostImpl::ForwardMouseEventWithLatencyInfo(
856 const blink::WebMouseEvent& mouse_event, 856 const blink::WebMouseEvent& mouse_event,
857 const ui::LatencyInfo& ui_latency) { 857 const ui::LatencyInfo& ui_latency) {
858 TRACE_EVENT2("input", "RenderWidgetHostImpl::ForwardMouseEvent", 858 TRACE_EVENT2("input", "RenderWidgetHostImpl::ForwardMouseEvent",
859 "x", mouse_event.x, "y", mouse_event.y); 859 "x", mouse_event.x, "y", mouse_event.y);
860 ui::LatencyInfo::InputCoordinates logical_coordinates = {
861 {mouse_event.x, mouse_event.y}};
860 862
861 ui::LatencyInfo latency_info = 863 ui::LatencyInfo latency_info = CreateRWHLatencyInfoIfNotExist(
862 CreateRWHLatencyInfoIfNotExist(&ui_latency, mouse_event.type); 864 &ui_latency, mouse_event.type, logical_coordinates, 1);
863 865
864 for (size_t i = 0; i < mouse_event_callbacks_.size(); ++i) { 866 for (size_t i = 0; i < mouse_event_callbacks_.size(); ++i) {
865 if (mouse_event_callbacks_[i].Run(mouse_event)) 867 if (mouse_event_callbacks_[i].Run(mouse_event))
866 return; 868 return;
867 } 869 }
868 870
869 if (IgnoreInputEvents()) 871 if (IgnoreInputEvents())
870 return; 872 return;
871 873
872 if (touch_emulator_ && touch_emulator_->HandleMouseEvent(mouse_event)) 874 if (touch_emulator_ && touch_emulator_->HandleMouseEvent(mouse_event))
873 return; 875 return;
874 876
875 input_router_->SendMouseEvent(MouseEventWithLatencyInfo(mouse_event, 877 input_router_->SendMouseEvent(MouseEventWithLatencyInfo(mouse_event,
876 latency_info)); 878 latency_info));
877 } 879 }
878 880
879 void RenderWidgetHostImpl::OnPointerEventActivate() { 881 void RenderWidgetHostImpl::OnPointerEventActivate() {
880 } 882 }
881 883
882 void RenderWidgetHostImpl::ForwardWheelEvent( 884 void RenderWidgetHostImpl::ForwardWheelEvent(
883 const WebMouseWheelEvent& wheel_event) { 885 const WebMouseWheelEvent& wheel_event) {
884 ForwardWheelEventWithLatencyInfo(wheel_event, ui::LatencyInfo()); 886 ForwardWheelEventWithLatencyInfo(wheel_event, ui::LatencyInfo());
885 } 887 }
886 888
887 void RenderWidgetHostImpl::ForwardWheelEventWithLatencyInfo( 889 void RenderWidgetHostImpl::ForwardWheelEventWithLatencyInfo(
888 const blink::WebMouseWheelEvent& wheel_event, 890 const blink::WebMouseWheelEvent& wheel_event,
889 const ui::LatencyInfo& ui_latency) { 891 const ui::LatencyInfo& ui_latency) {
890 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardWheelEvent"); 892 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardWheelEvent");
891 893
892 ui::LatencyInfo latency_info = 894 ui::LatencyInfo::InputCoordinates logical_coordinates = {
893 CreateRWHLatencyInfoIfNotExist(&ui_latency, wheel_event.type); 895 {wheel_event.x, wheel_event.y}};
896
897 ui::LatencyInfo latency_info = CreateRWHLatencyInfoIfNotExist(
898 &ui_latency, wheel_event.type, logical_coordinates, 1);
894 899
895 if (IgnoreInputEvents()) 900 if (IgnoreInputEvents())
896 return; 901 return;
897 902
898 if (touch_emulator_ && touch_emulator_->HandleMouseWheelEvent(wheel_event)) 903 if (touch_emulator_ && touch_emulator_->HandleMouseWheelEvent(wheel_event))
899 return; 904 return;
900 905
901 input_router_->SendWheelEvent(MouseWheelEventWithLatencyInfo(wheel_event, 906 input_router_->SendWheelEvent(MouseWheelEventWithLatencyInfo(wheel_event,
902 latency_info)); 907 latency_info));
903 } 908 }
904 909
905 void RenderWidgetHostImpl::ForwardGestureEvent( 910 void RenderWidgetHostImpl::ForwardGestureEvent(
906 const blink::WebGestureEvent& gesture_event) { 911 const blink::WebGestureEvent& gesture_event) {
907 ForwardGestureEventWithLatencyInfo(gesture_event, ui::LatencyInfo()); 912 ForwardGestureEventWithLatencyInfo(gesture_event, ui::LatencyInfo());
908 } 913 }
909 914
910 void RenderWidgetHostImpl::ForwardGestureEventWithLatencyInfo( 915 void RenderWidgetHostImpl::ForwardGestureEventWithLatencyInfo(
911 const blink::WebGestureEvent& gesture_event, 916 const blink::WebGestureEvent& gesture_event,
912 const ui::LatencyInfo& ui_latency) { 917 const ui::LatencyInfo& ui_latency) {
913 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardGestureEvent"); 918 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardGestureEvent");
914 // Early out if necessary, prior to performing latency logic. 919 // Early out if necessary, prior to performing latency logic.
915 if (IgnoreInputEvents()) 920 if (IgnoreInputEvents())
916 return; 921 return;
917 922
918 if (delegate_->PreHandleGestureEvent(gesture_event)) 923 if (delegate_->PreHandleGestureEvent(gesture_event))
919 return; 924 return;
920 925
921 ui::LatencyInfo latency_info = 926 ui::LatencyInfo::InputCoordinates logical_coordinates = {
922 CreateRWHLatencyInfoIfNotExist(&ui_latency, gesture_event.type); 927 {gesture_event.x, gesture_event.y}};
928
929 ui::LatencyInfo latency_info = CreateRWHLatencyInfoIfNotExist(
930 &ui_latency, gesture_event.type, logical_coordinates, 1);
923 931
924 if (gesture_event.type == blink::WebInputEvent::GestureScrollUpdate) { 932 if (gesture_event.type == blink::WebInputEvent::GestureScrollUpdate) {
925 latency_info.AddLatencyNumber( 933 latency_info.AddLatencyNumber(
926 ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_RWH_COMPONENT, 934 ui::INPUT_EVENT_LATENCY_SCROLL_UPDATE_RWH_COMPONENT,
927 GetLatencyComponentId(), 935 GetLatencyComponentId(),
928 ++last_input_number_); 936 ++last_input_number_);
929 937
930 // Make a copy of the INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT with a 938 // Make a copy of the INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT with a
931 // different name INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT. 939 // different name INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL_COMPONENT.
932 // So we can track the latency specifically for scroll update events. 940 // So we can track the latency specifically for scroll update events.
(...skipping 10 matching lines...) Expand all
943 } 951 }
944 } 952 }
945 953
946 GestureEventWithLatencyInfo gesture_with_latency(gesture_event, latency_info); 954 GestureEventWithLatencyInfo gesture_with_latency(gesture_event, latency_info);
947 input_router_->SendGestureEvent(gesture_with_latency); 955 input_router_->SendGestureEvent(gesture_with_latency);
948 } 956 }
949 957
950 void RenderWidgetHostImpl::ForwardEmulatedTouchEvent( 958 void RenderWidgetHostImpl::ForwardEmulatedTouchEvent(
951 const blink::WebTouchEvent& touch_event) { 959 const blink::WebTouchEvent& touch_event) {
952 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardEmulatedTouchEvent"); 960 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardEmulatedTouchEvent");
953 ui::LatencyInfo latency_info = 961
954 CreateRWHLatencyInfoIfNotExist(NULL, touch_event.type); 962 ui::LatencyInfo::InputCoordinates logical_coordinates;
963 size_t logical_coordinates_size =
964 std::min(static_cast<size_t>(ui::LatencyInfo::kMaxInputCoordinates),
965 static_cast<size_t>(touch_event.touchesLength));
966 for (size_t i = 0; i < logical_coordinates_size; i++) {
967 logical_coordinates[i][0] = touch_event.touches[i].position.x;
968 logical_coordinates[i][1] = touch_event.touches[i].position.y;
969 }
970
971 ui::LatencyInfo latency_info = CreateRWHLatencyInfoIfNotExist(
972 NULL, touch_event.type, logical_coordinates, logical_coordinates_size);
955 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info); 973 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info);
956 input_router_->SendTouchEvent(touch_with_latency); 974 input_router_->SendTouchEvent(touch_with_latency);
957 } 975 }
958 976
959 void RenderWidgetHostImpl::ForwardTouchEventWithLatencyInfo( 977 void RenderWidgetHostImpl::ForwardTouchEventWithLatencyInfo(
960 const blink::WebTouchEvent& touch_event, 978 const blink::WebTouchEvent& touch_event,
961 const ui::LatencyInfo& ui_latency) { 979 const ui::LatencyInfo& ui_latency) {
962 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardTouchEvent"); 980 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardTouchEvent");
963 981
964 // Always forward TouchEvents for touch stream consistency. They will be 982 // Always forward TouchEvents for touch stream consistency. They will be
965 // ignored if appropriate in FilterInputEvent(). 983 // ignored if appropriate in FilterInputEvent().
966 984
985 ui::LatencyInfo::InputCoordinates logical_coordinates;
986 size_t logical_coordinates_size =
987 std::min(static_cast<size_t>(ui::LatencyInfo::kMaxInputCoordinates),
988 static_cast<size_t>(touch_event.touchesLength));
989 for (size_t i = 0; i < logical_coordinates_size; i++) {
990 logical_coordinates[i][0] = touch_event.touches[i].position.x;
991 logical_coordinates[i][1] = touch_event.touches[i].position.y;
992 }
993
967 ui::LatencyInfo latency_info = 994 ui::LatencyInfo latency_info =
968 CreateRWHLatencyInfoIfNotExist(&ui_latency, touch_event.type); 995 CreateRWHLatencyInfoIfNotExist(&ui_latency,
996 touch_event.type,
997 logical_coordinates,
998 logical_coordinates_size);
969 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info); 999 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info);
970 1000
971 if (touch_emulator_ && 1001 if (touch_emulator_ &&
972 touch_emulator_->HandleTouchEvent(touch_with_latency.event)) { 1002 touch_emulator_->HandleTouchEvent(touch_with_latency.event)) {
973 if (view_) { 1003 if (view_) {
974 view_->ProcessAckedTouchEvent( 1004 view_->ProcessAckedTouchEvent(
975 touch_with_latency, INPUT_EVENT_ACK_STATE_CONSUMED); 1005 touch_with_latency, INPUT_EVENT_ACK_STATE_CONSUMED);
976 } 1006 }
977 return; 1007 return;
978 } 1008 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 if (delegate_->PreHandleKeyboardEvent(key_event, &is_shortcut)) 1067 if (delegate_->PreHandleKeyboardEvent(key_event, &is_shortcut))
1038 return; 1068 return;
1039 1069
1040 if (key_event.type == WebKeyboardEvent::RawKeyDown) 1070 if (key_event.type == WebKeyboardEvent::RawKeyDown)
1041 suppress_next_char_events_ = false; 1071 suppress_next_char_events_ = false;
1042 } 1072 }
1043 1073
1044 if (touch_emulator_ && touch_emulator_->HandleKeyboardEvent(key_event)) 1074 if (touch_emulator_ && touch_emulator_->HandleKeyboardEvent(key_event))
1045 return; 1075 return;
1046 1076
1077 // Keyboard events have no coordinates attached.
1078 ui::LatencyInfo::InputCoordinates logical_coordinates;
1079
1047 input_router_->SendKeyboardEvent( 1080 input_router_->SendKeyboardEvent(
1048 key_event, 1081 key_event,
1049 CreateRWHLatencyInfoIfNotExist(NULL, key_event.type), 1082 CreateRWHLatencyInfoIfNotExist(
1083 NULL, key_event.type, logical_coordinates, 0),
1050 is_shortcut); 1084 is_shortcut);
1051 } 1085 }
1052 1086
1053 void RenderWidgetHostImpl::QueueSyntheticGesture( 1087 void RenderWidgetHostImpl::QueueSyntheticGesture(
1054 scoped_ptr<SyntheticGesture> synthetic_gesture, 1088 scoped_ptr<SyntheticGesture> synthetic_gesture,
1055 const base::Callback<void(SyntheticGesture::Result)>& on_complete) { 1089 const base::Callback<void(SyntheticGesture::Result)>& on_complete) {
1056 if (!synthetic_gesture_controller_ && view_) { 1090 if (!synthetic_gesture_controller_ && view_) {
1057 synthetic_gesture_controller_.reset( 1091 synthetic_gesture_controller_.reset(
1058 new SyntheticGestureController( 1092 new SyntheticGestureController(
1059 view_->CreateSyntheticGestureTarget().Pass())); 1093 view_->CreateSyntheticGestureTarget().Pass()));
(...skipping 22 matching lines...) Expand all
1082 int64 RenderWidgetHostImpl::GetLatencyComponentId() { 1116 int64 RenderWidgetHostImpl::GetLatencyComponentId() {
1083 return GetRoutingID() | (static_cast<int64>(GetProcess()->GetID()) << 32); 1117 return GetRoutingID() | (static_cast<int64>(GetProcess()->GetID()) << 32);
1084 } 1118 }
1085 1119
1086 // static 1120 // static
1087 void RenderWidgetHostImpl::DisableResizeAckCheckForTesting() { 1121 void RenderWidgetHostImpl::DisableResizeAckCheckForTesting() {
1088 g_check_for_pending_resize_ack = false; 1122 g_check_for_pending_resize_ack = false;
1089 } 1123 }
1090 1124
1091 ui::LatencyInfo RenderWidgetHostImpl::CreateRWHLatencyInfoIfNotExist( 1125 ui::LatencyInfo RenderWidgetHostImpl::CreateRWHLatencyInfoIfNotExist(
1092 const ui::LatencyInfo* original, WebInputEvent::Type type) { 1126 const ui::LatencyInfo* original,
1127 WebInputEvent::Type type,
1128 const ui::LatencyInfo::InputCoordinates& logical_coordinates,
1129 size_t logical_coordinates_size) {
1093 ui::LatencyInfo info; 1130 ui::LatencyInfo info;
1094 if (original) 1131 if (original)
1095 info = *original; 1132 info = *original;
1133
1096 // In Aura, gesture event will already carry its original touch event's 1134 // In Aura, gesture event will already carry its original touch event's
1097 // INPUT_EVENT_LATENCY_RWH_COMPONENT. 1135 // INPUT_EVENT_LATENCY_RWH_COMPONENT.
1098 if (!info.FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 1136 if (!info.FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
1099 GetLatencyComponentId(), 1137 GetLatencyComponentId(),
1100 NULL)) { 1138 NULL)) {
1101 info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 1139 info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT,
1102 GetLatencyComponentId(), 1140 GetLatencyComponentId(),
1103 ++last_input_number_); 1141 ++last_input_number_);
1104 info.TraceEventType(WebInputEventTraits::GetName(type)); 1142 info.TraceEventType(WebInputEventTraits::GetName(type));
1143
1144 // Convert logical coordinates to physical coordinates, based on the
1145 // device scale factor.
1146 float device_scale_factor =
1147 screen_info_ ? screen_info_->deviceScaleFactor : 1;
1148 DCHECK(logical_coordinates_size <= ui::LatencyInfo::kMaxInputCoordinates);
1149 info.input_coordinates_size = logical_coordinates_size;
1150 for (size_t i = 0; i < info.input_coordinates_size; i++) {
1151 for (size_t j = 0; j < arraysize(logical_coordinates[i]); j++) {
1152 info.input_coordinates[i][j] =
1153 logical_coordinates[i][j] * device_scale_factor;
1154 }
1155 }
1105 } 1156 }
1157
1106 return info; 1158 return info;
1107 } 1159 }
1108 1160
1109 1161
1110 void RenderWidgetHostImpl::AddKeyPressEventCallback( 1162 void RenderWidgetHostImpl::AddKeyPressEventCallback(
1111 const KeyPressEventCallback& callback) { 1163 const KeyPressEventCallback& callback) {
1112 key_press_event_callbacks_.push_back(callback); 1164 key_press_event_callbacks_.push_back(callback);
1113 } 1165 }
1114 1166
1115 void RenderWidgetHostImpl::RemoveKeyPressEventCallback( 1167 void RenderWidgetHostImpl::RemoveKeyPressEventCallback(
(...skipping 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after
2322 } 2374 }
2323 #endif 2375 #endif
2324 2376
2325 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() { 2377 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() {
2326 if (view_) 2378 if (view_)
2327 return view_->PreferredReadbackFormat(); 2379 return view_->PreferredReadbackFormat();
2328 return kN32_SkColorType; 2380 return kN32_SkColorType;
2329 } 2381 }
2330 2382
2331 } // namespace content 2383 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698