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

Side by Side Diff: content/renderer/render_widget.cc

Issue 2813683002: Allow MainThreadEventQueue to call the RenderWidget directly. (Closed)
Patch Set: Created 3 years, 8 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/renderer/render_widget.h" 5 #include "content/renderer/render_widget.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 #include "content/public/renderer/content_renderer_client.h" 46 #include "content/public/renderer/content_renderer_client.h"
47 #include "content/renderer/cursor_utils.h" 47 #include "content/renderer/cursor_utils.h"
48 #include "content/renderer/devtools/render_widget_screen_metrics_emulator.h" 48 #include "content/renderer/devtools/render_widget_screen_metrics_emulator.h"
49 #include "content/renderer/drop_data_builder.h" 49 #include "content/renderer/drop_data_builder.h"
50 #include "content/renderer/external_popup_menu.h" 50 #include "content/renderer/external_popup_menu.h"
51 #include "content/renderer/gpu/frame_swap_message_queue.h" 51 #include "content/renderer/gpu/frame_swap_message_queue.h"
52 #include "content/renderer/gpu/queue_message_swap_promise.h" 52 #include "content/renderer/gpu/queue_message_swap_promise.h"
53 #include "content/renderer/gpu/render_widget_compositor.h" 53 #include "content/renderer/gpu/render_widget_compositor.h"
54 #include "content/renderer/ime_event_guard.h" 54 #include "content/renderer/ime_event_guard.h"
55 #include "content/renderer/input/input_handler_manager.h" 55 #include "content/renderer/input/input_handler_manager.h"
56 #include "content/renderer/input/main_thread_event_queue.h"
56 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" 57 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
57 #include "content/renderer/render_frame_impl.h" 58 #include "content/renderer/render_frame_impl.h"
58 #include "content/renderer/render_frame_proxy.h" 59 #include "content/renderer/render_frame_proxy.h"
59 #include "content/renderer/render_process.h" 60 #include "content/renderer/render_process.h"
60 #include "content/renderer/render_thread_impl.h" 61 #include "content/renderer/render_thread_impl.h"
61 #include "content/renderer/render_view_impl.h" 62 #include "content/renderer/render_view_impl.h"
62 #include "content/renderer/render_widget_owner_delegate.h" 63 #include "content/renderer/render_widget_owner_delegate.h"
63 #include "content/renderer/renderer_blink_platform_impl.h" 64 #include "content/renderer/renderer_blink_platform_impl.h"
64 #include "content/renderer/resizing_mode_selector.h" 65 #include "content/renderer/resizing_mode_selector.h"
65 #include "ipc/ipc_message_start.h" 66 #include "ipc/ipc_message_start.h"
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 const ui::LatencyInfo& latency_info, 811 const ui::LatencyInfo& latency_info,
811 InputEventDispatchType dispatch_type) { 812 InputEventDispatchType dispatch_type) {
812 if (!input_event) 813 if (!input_event)
813 return; 814 return;
814 815
815 input_handler_->HandleInputEvent( 816 input_handler_->HandleInputEvent(
816 blink::WebCoalescedInputEvent(*input_event, coalesced_events), 817 blink::WebCoalescedInputEvent(*input_event, coalesced_events),
817 latency_info, dispatch_type); 818 latency_info, dispatch_type);
818 } 819 }
819 820
821 InputEventAckState RenderWidget::HandleInputEvent(
822 const blink::WebCoalescedInputEvent& input_event,
823 const ui::LatencyInfo& latency_info,
824 InputEventDispatchType dispatch_type) {
825 return input_handler_->HandleInputEvent(input_event, latency_info,
826 dispatch_type);
827 }
828
820 void RenderWidget::OnCursorVisibilityChange(bool is_visible) { 829 void RenderWidget::OnCursorVisibilityChange(bool is_visible) {
821 if (GetWebWidget()) 830 if (GetWebWidget())
822 GetWebWidget()->SetCursorVisibilityState(is_visible); 831 GetWebWidget()->SetCursorVisibilityState(is_visible);
823 } 832 }
824 833
825 void RenderWidget::OnMouseCaptureLost() { 834 void RenderWidget::OnMouseCaptureLost() {
826 if (GetWebWidget()) 835 if (GetWebWidget())
827 GetWebWidget()->MouseCaptureLost(); 836 GetWebWidget()->MouseCaptureLost();
828 } 837 }
829 838
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 } 873 }
865 874
866 void RenderWidget::RecordWheelAndTouchScrollingCount( 875 void RenderWidget::RecordWheelAndTouchScrollingCount(
867 bool has_scrolled_by_wheel, 876 bool has_scrolled_by_wheel,
868 bool has_scrolled_by_touch) { 877 bool has_scrolled_by_touch) {
869 GetWebWidget()->RecordWheelAndTouchScrollingCount(has_scrolled_by_wheel, 878 GetWebWidget()->RecordWheelAndTouchScrollingCount(has_scrolled_by_wheel,
870 has_scrolled_by_touch); 879 has_scrolled_by_touch);
871 } 880 }
872 881
873 void RenderWidget::BeginMainFrame(double frame_time_sec) { 882 void RenderWidget::BeginMainFrame(double frame_time_sec) {
874 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 883 if (input_event_queue_) {
875 // render_thread may be NULL in tests. 884 input_event_queue_->DispatchRafAlignedInput(
876 InputHandlerManager* input_handler_manager = 885 ui::EventTimeStampFromSeconds(frame_time_sec));
877 render_thread ? render_thread->input_handler_manager() : NULL; 886 }
878 if (input_handler_manager)
879 input_handler_manager->ProcessRafAlignedInputOnMainThread(
880 routing_id_, ui::EventTimeStampFromSeconds(frame_time_sec));
881 887
882 GetWebWidget()->BeginFrame(frame_time_sec); 888 GetWebWidget()->BeginFrame(frame_time_sec);
883 } 889 }
884 890
885 void RenderWidget::RequestNewCompositorFrameSink( 891 void RenderWidget::RequestNewCompositorFrameSink(
886 bool fallback, 892 bool fallback,
887 const CompositorFrameSinkCallback& callback) { 893 const CompositorFrameSinkCallback& callback) {
888 DCHECK(GetWebWidget()); 894 DCHECK(GetWebWidget());
889 // For widgets that are never visible, we don't start the compositor, so we 895 // For widgets that are never visible, we don't start the compositor, so we
890 // never get a request for a cc::CompositorFrameSink. 896 // never get a request for a cc::CompositorFrameSink.
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 void RenderWidget::OnDidOverscroll(const ui::DidOverscrollParams& params) { 1036 void RenderWidget::OnDidOverscroll(const ui::DidOverscrollParams& params) {
1031 Send(new InputHostMsg_DidOverscroll(routing_id_, params)); 1037 Send(new InputHostMsg_DidOverscroll(routing_id_, params));
1032 } 1038 }
1033 1039
1034 void RenderWidget::OnInputEventAck( 1040 void RenderWidget::OnInputEventAck(
1035 std::unique_ptr<InputEventAck> input_event_ack) { 1041 std::unique_ptr<InputEventAck> input_event_ack) {
1036 SendOrCrash( 1042 SendOrCrash(
1037 new InputHostMsg_HandleInputEvent_ACK(routing_id_, *input_event_ack)); 1043 new InputHostMsg_HandleInputEvent_ACK(routing_id_, *input_event_ack));
1038 } 1044 }
1039 1045
1040 void RenderWidget::NotifyInputEventHandled(
1041 blink::WebInputEvent::Type handled_type,
1042 blink::WebInputEventResult result,
1043 InputEventAckState ack_result) {
1044 RenderThreadImpl* render_thread = RenderThreadImpl::current();
1045 InputHandlerManager* input_handler_manager =
1046 render_thread ? render_thread->input_handler_manager() : NULL;
1047 if (input_handler_manager) {
1048 input_handler_manager->NotifyInputEventHandledOnMainThread(
1049 routing_id_, handled_type, result, ack_result);
1050 }
1051 }
1052
1053 void RenderWidget::SetInputHandler(RenderWidgetInputHandler* input_handler) { 1046 void RenderWidget::SetInputHandler(RenderWidgetInputHandler* input_handler) {
1054 // Nothing to do here. RenderWidget created the |input_handler| and will take 1047 // Nothing to do here. RenderWidget created the |input_handler| and will take
1055 // ownership of it. We just verify here that we don't already have an input 1048 // ownership of it. We just verify here that we don't already have an input
1056 // handler. 1049 // handler.
1057 DCHECK(!input_handler_); 1050 DCHECK(!input_handler_);
1058 } 1051 }
1059 1052
1060 void RenderWidget::ShowVirtualKeyboard() { 1053 void RenderWidget::ShowVirtualKeyboard() {
1061 UpdateTextInputStateInternal(true, false); 1054 UpdateTextInputStateInternal(true, false);
1062 } 1055 }
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1305 StartCompositor(); 1298 StartCompositor();
1306 DCHECK_NE(MSG_ROUTING_NONE, routing_id_); 1299 DCHECK_NE(MSG_ROUTING_NONE, routing_id_);
1307 compositor_->SetFrameSinkId( 1300 compositor_->SetFrameSinkId(
1308 cc::FrameSinkId(RenderThread::Get()->GetClientId(), routing_id_)); 1301 cc::FrameSinkId(RenderThread::Get()->GetClientId(), routing_id_));
1309 1302
1310 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 1303 RenderThreadImpl* render_thread = RenderThreadImpl::current();
1311 // render_thread may be NULL in tests. 1304 // render_thread may be NULL in tests.
1312 InputHandlerManager* input_handler_manager = 1305 InputHandlerManager* input_handler_manager =
1313 render_thread ? render_thread->input_handler_manager() : NULL; 1306 render_thread ? render_thread->input_handler_manager() : NULL;
1314 if (input_handler_manager) { 1307 if (input_handler_manager) {
1308 input_event_queue_ = new MainThreadEventQueueWithRenderWidget(
1309 weak_ptr_factory_.GetWeakPtr(), render_thread->GetRendererScheduler());
1315 input_handler_manager->AddInputHandler( 1310 input_handler_manager->AddInputHandler(
1316 routing_id_, compositor()->GetInputHandler(), 1311 routing_id_, compositor()->GetInputHandler(), input_event_queue_,
1317 weak_ptr_factory_.GetWeakPtr(), 1312 weak_ptr_factory_.GetWeakPtr(),
1318 compositor_deps_->IsScrollAnimatorEnabled()); 1313 compositor_deps_->IsScrollAnimatorEnabled());
1319 has_added_input_handler_ = true; 1314 has_added_input_handler_ = true;
1320 } 1315 }
1321 1316
1322 return compositor_.get(); 1317 return compositor_.get();
1323 } 1318 }
1324 1319
1325 void RenderWidget::WillCloseLayerTreeView() { 1320 void RenderWidget::WillCloseLayerTreeView() {
1326 if (host_closing_) 1321 if (host_closing_)
(...skipping 987 matching lines...) Expand 10 before | Expand all | Expand 10 after
2314 // browser side (https://crbug.com/669219). 2309 // browser side (https://crbug.com/669219).
2315 // If there is no WebFrameWidget, then there will be no 2310 // If there is no WebFrameWidget, then there will be no
2316 // InputMethodControllers for a WebLocalFrame. 2311 // InputMethodControllers for a WebLocalFrame.
2317 return nullptr; 2312 return nullptr;
2318 } 2313 }
2319 return static_cast<blink::WebFrameWidget*>(GetWebWidget()) 2314 return static_cast<blink::WebFrameWidget*>(GetWebWidget())
2320 ->GetActiveWebInputMethodController(); 2315 ->GetActiveWebInputMethodController();
2321 } 2316 }
2322 2317
2323 } // namespace content 2318 } // namespace content
OLDNEW
« content/renderer/render_view_impl.cc ('K') | « content/renderer/render_widget.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698