| OLD | NEW |
| 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 Loading... |
| 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::InputCoordinate logical_coordinate(mouse_event.x, |
| 861 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_coordinate, 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::InputCoordinate logical_coordinate(wheel_event.x, |
| 893 CreateRWHLatencyInfoIfNotExist(&ui_latency, wheel_event.type); | 895 wheel_event.y); |
| 896 |
| 897 ui::LatencyInfo latency_info = CreateRWHLatencyInfoIfNotExist( |
| 898 &ui_latency, wheel_event.type, &logical_coordinate, 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::InputCoordinate logical_coordinate(gesture_event.x, |
| 922 CreateRWHLatencyInfoIfNotExist(&ui_latency, gesture_event.type); | 927 gesture_event.y); |
| 928 |
| 929 ui::LatencyInfo latency_info = CreateRWHLatencyInfoIfNotExist( |
| 930 &ui_latency, gesture_event.type, &logical_coordinate, 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 Loading... |
| 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::InputCoordinate |
| 963 logical_coordinates[ui::LatencyInfo::kMaxInputCoordinates]; |
| 964 size_t logical_coordinates_size = |
| 965 std::min(arraysize(logical_coordinates), |
| 966 static_cast<size_t>(touch_event.touchesLength)); |
| 967 for (size_t i = 0; i < logical_coordinates_size; i++) { |
| 968 logical_coordinates[i] = ui::LatencyInfo::InputCoordinate( |
| 969 touch_event.touches[i].position.x, touch_event.touches[i].position.y); |
| 970 } |
| 971 |
| 972 ui::LatencyInfo latency_info = CreateRWHLatencyInfoIfNotExist( |
| 973 NULL, touch_event.type, logical_coordinates, logical_coordinates_size); |
| 955 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info); | 974 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info); |
| 956 input_router_->SendTouchEvent(touch_with_latency); | 975 input_router_->SendTouchEvent(touch_with_latency); |
| 957 } | 976 } |
| 958 | 977 |
| 959 void RenderWidgetHostImpl::ForwardTouchEventWithLatencyInfo( | 978 void RenderWidgetHostImpl::ForwardTouchEventWithLatencyInfo( |
| 960 const blink::WebTouchEvent& touch_event, | 979 const blink::WebTouchEvent& touch_event, |
| 961 const ui::LatencyInfo& ui_latency) { | 980 const ui::LatencyInfo& ui_latency) { |
| 962 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardTouchEvent"); | 981 TRACE_EVENT0("input", "RenderWidgetHostImpl::ForwardTouchEvent"); |
| 963 | 982 |
| 964 // Always forward TouchEvents for touch stream consistency. They will be | 983 // Always forward TouchEvents for touch stream consistency. They will be |
| 965 // ignored if appropriate in FilterInputEvent(). | 984 // ignored if appropriate in FilterInputEvent(). |
| 966 | 985 |
| 986 ui::LatencyInfo::InputCoordinate |
| 987 logical_coordinates[ui::LatencyInfo::kMaxInputCoordinates]; |
| 988 size_t logical_coordinates_size = |
| 989 std::min(arraysize(logical_coordinates), |
| 990 static_cast<size_t>(touch_event.touchesLength)); |
| 991 for (size_t i = 0; i < logical_coordinates_size; i++) { |
| 992 logical_coordinates[i] = ui::LatencyInfo::InputCoordinate( |
| 993 touch_event.touches[i].position.x, touch_event.touches[i].position.y); |
| 994 } |
| 995 |
| 967 ui::LatencyInfo latency_info = | 996 ui::LatencyInfo latency_info = |
| 968 CreateRWHLatencyInfoIfNotExist(&ui_latency, touch_event.type); | 997 CreateRWHLatencyInfoIfNotExist(&ui_latency, |
| 998 touch_event.type, |
| 999 logical_coordinates, |
| 1000 logical_coordinates_size); |
| 969 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info); | 1001 TouchEventWithLatencyInfo touch_with_latency(touch_event, latency_info); |
| 970 | 1002 |
| 971 if (touch_emulator_ && | 1003 if (touch_emulator_ && |
| 972 touch_emulator_->HandleTouchEvent(touch_with_latency.event)) { | 1004 touch_emulator_->HandleTouchEvent(touch_with_latency.event)) { |
| 973 if (view_) { | 1005 if (view_) { |
| 974 view_->ProcessAckedTouchEvent( | 1006 view_->ProcessAckedTouchEvent( |
| 975 touch_with_latency, INPUT_EVENT_ACK_STATE_CONSUMED); | 1007 touch_with_latency, INPUT_EVENT_ACK_STATE_CONSUMED); |
| 976 } | 1008 } |
| 977 return; | 1009 return; |
| 978 } | 1010 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1039 | 1071 |
| 1040 if (key_event.type == WebKeyboardEvent::RawKeyDown) | 1072 if (key_event.type == WebKeyboardEvent::RawKeyDown) |
| 1041 suppress_next_char_events_ = false; | 1073 suppress_next_char_events_ = false; |
| 1042 } | 1074 } |
| 1043 | 1075 |
| 1044 if (touch_emulator_ && touch_emulator_->HandleKeyboardEvent(key_event)) | 1076 if (touch_emulator_ && touch_emulator_->HandleKeyboardEvent(key_event)) |
| 1045 return; | 1077 return; |
| 1046 | 1078 |
| 1047 input_router_->SendKeyboardEvent( | 1079 input_router_->SendKeyboardEvent( |
| 1048 key_event, | 1080 key_event, |
| 1049 CreateRWHLatencyInfoIfNotExist(NULL, key_event.type), | 1081 CreateRWHLatencyInfoIfNotExist(NULL, key_event.type, NULL, 0), |
| 1050 is_shortcut); | 1082 is_shortcut); |
| 1051 } | 1083 } |
| 1052 | 1084 |
| 1053 void RenderWidgetHostImpl::QueueSyntheticGesture( | 1085 void RenderWidgetHostImpl::QueueSyntheticGesture( |
| 1054 scoped_ptr<SyntheticGesture> synthetic_gesture, | 1086 scoped_ptr<SyntheticGesture> synthetic_gesture, |
| 1055 const base::Callback<void(SyntheticGesture::Result)>& on_complete) { | 1087 const base::Callback<void(SyntheticGesture::Result)>& on_complete) { |
| 1056 if (!synthetic_gesture_controller_ && view_) { | 1088 if (!synthetic_gesture_controller_ && view_) { |
| 1057 synthetic_gesture_controller_.reset( | 1089 synthetic_gesture_controller_.reset( |
| 1058 new SyntheticGestureController( | 1090 new SyntheticGestureController( |
| 1059 view_->CreateSyntheticGestureTarget().Pass())); | 1091 view_->CreateSyntheticGestureTarget().Pass())); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1082 int64 RenderWidgetHostImpl::GetLatencyComponentId() { | 1114 int64 RenderWidgetHostImpl::GetLatencyComponentId() { |
| 1083 return GetRoutingID() | (static_cast<int64>(GetProcess()->GetID()) << 32); | 1115 return GetRoutingID() | (static_cast<int64>(GetProcess()->GetID()) << 32); |
| 1084 } | 1116 } |
| 1085 | 1117 |
| 1086 // static | 1118 // static |
| 1087 void RenderWidgetHostImpl::DisableResizeAckCheckForTesting() { | 1119 void RenderWidgetHostImpl::DisableResizeAckCheckForTesting() { |
| 1088 g_check_for_pending_resize_ack = false; | 1120 g_check_for_pending_resize_ack = false; |
| 1089 } | 1121 } |
| 1090 | 1122 |
| 1091 ui::LatencyInfo RenderWidgetHostImpl::CreateRWHLatencyInfoIfNotExist( | 1123 ui::LatencyInfo RenderWidgetHostImpl::CreateRWHLatencyInfoIfNotExist( |
| 1092 const ui::LatencyInfo* original, WebInputEvent::Type type) { | 1124 const ui::LatencyInfo* original, |
| 1125 WebInputEvent::Type type, |
| 1126 const ui::LatencyInfo::InputCoordinate* logical_coordinates, |
| 1127 size_t logical_coordinates_size) { |
| 1093 ui::LatencyInfo info; | 1128 ui::LatencyInfo info; |
| 1094 if (original) | 1129 if (original) |
| 1095 info = *original; | 1130 info = *original; |
| 1096 // In Aura, gesture event will already carry its original touch event's | 1131 // In Aura, gesture event will already carry its original touch event's |
| 1097 // INPUT_EVENT_LATENCY_RWH_COMPONENT. | 1132 // INPUT_EVENT_LATENCY_RWH_COMPONENT. |
| 1098 if (!info.FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 1133 if (!info.FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 1099 GetLatencyComponentId(), | 1134 GetLatencyComponentId(), |
| 1100 NULL)) { | 1135 NULL)) { |
| 1101 info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, | 1136 info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
| 1102 GetLatencyComponentId(), | 1137 GetLatencyComponentId(), |
| 1103 ++last_input_number_); | 1138 ++last_input_number_); |
| 1104 info.TraceEventType(WebInputEventTraits::GetName(type)); | 1139 info.TraceEventType(WebInputEventTraits::GetName(type)); |
| 1140 |
| 1141 // Convert logical coordinates to physical coordinates, based on the |
| 1142 // device scale factor. |
| 1143 float device_scale_factor = |
| 1144 screen_info_ ? screen_info_->deviceScaleFactor : 1; |
| 1145 DCHECK(logical_coordinates_size <= ui::LatencyInfo::kMaxInputCoordinates); |
| 1146 info.input_coordinates_size = logical_coordinates_size; |
| 1147 for (size_t i = 0; i < info.input_coordinates_size; i++) { |
| 1148 info.input_coordinates[i].x = |
| 1149 logical_coordinates[i].x * device_scale_factor; |
| 1150 info.input_coordinates[i].y = |
| 1151 logical_coordinates[i].y * device_scale_factor; |
| 1152 } |
| 1105 } | 1153 } |
| 1154 |
| 1106 return info; | 1155 return info; |
| 1107 } | 1156 } |
| 1108 | 1157 |
| 1109 | 1158 |
| 1110 void RenderWidgetHostImpl::AddKeyPressEventCallback( | 1159 void RenderWidgetHostImpl::AddKeyPressEventCallback( |
| 1111 const KeyPressEventCallback& callback) { | 1160 const KeyPressEventCallback& callback) { |
| 1112 key_press_event_callbacks_.push_back(callback); | 1161 key_press_event_callbacks_.push_back(callback); |
| 1113 } | 1162 } |
| 1114 | 1163 |
| 1115 void RenderWidgetHostImpl::RemoveKeyPressEventCallback( | 1164 void RenderWidgetHostImpl::RemoveKeyPressEventCallback( |
| (...skipping 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2322 } | 2371 } |
| 2323 #endif | 2372 #endif |
| 2324 | 2373 |
| 2325 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() { | 2374 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() { |
| 2326 if (view_) | 2375 if (view_) |
| 2327 return view_->PreferredReadbackFormat(); | 2376 return view_->PreferredReadbackFormat(); |
| 2328 return kN32_SkColorType; | 2377 return kN32_SkColorType; |
| 2329 } | 2378 } |
| 2330 | 2379 |
| 2331 } // namespace content | 2380 } // namespace content |
| OLD | NEW |