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

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

Issue 2813683002: Allow MainThreadEventQueue to call the RenderWidget directly. (Closed)
Patch Set: Add back MainThreadEventQueueClient 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 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 render_widget_scheduling_state_->SetHidden(is_hidden_); 394 render_widget_scheduling_state_->SetHidden(is_hidden_);
394 } 395 }
395 #if defined(USE_AURA) 396 #if defined(USE_AURA)
396 RendererWindowTreeClient::CreateIfNecessary(routing_id_); 397 RendererWindowTreeClient::CreateIfNecessary(routing_id_);
397 #endif 398 #endif
398 } 399 }
399 400
400 RenderWidget::~RenderWidget() { 401 RenderWidget::~RenderWidget() {
401 DCHECK(!webwidget_internal_) << "Leaking our WebWidget!"; 402 DCHECK(!webwidget_internal_) << "Leaking our WebWidget!";
402 403
404 if (input_event_queue_)
405 input_event_queue_->ClearClient();
406
403 // If we are swapped out, we have released already. 407 // If we are swapped out, we have released already.
404 if (!is_swapped_out_ && RenderProcess::current()) 408 if (!is_swapped_out_ && RenderProcess::current())
405 RenderProcess::current()->ReleaseProcess(); 409 RenderProcess::current()->ReleaseProcess();
406 #if defined(USE_AURA) 410 #if defined(USE_AURA)
407 // It is possible for a RenderWidget to be destroyed before it was embedded 411 // It is possible for a RenderWidget to be destroyed before it was embedded
408 // in a mus window. The RendererWindowTreeClient will leak in such cases. So 412 // in a mus window. The RendererWindowTreeClient will leak in such cases. So
409 // explicitly delete it here. 413 // explicitly delete it here.
410 RendererWindowTreeClient::Destroy(routing_id_); 414 RendererWindowTreeClient::Destroy(routing_id_);
411 #endif 415 #endif
412 } 416 }
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 const ui::LatencyInfo& latency_info, 814 const ui::LatencyInfo& latency_info,
811 InputEventDispatchType dispatch_type) { 815 InputEventDispatchType dispatch_type) {
812 if (!input_event) 816 if (!input_event)
813 return; 817 return;
814 818
815 input_handler_->HandleInputEvent( 819 input_handler_->HandleInputEvent(
816 blink::WebCoalescedInputEvent(*input_event, coalesced_events), 820 blink::WebCoalescedInputEvent(*input_event, coalesced_events),
817 latency_info, dispatch_type); 821 latency_info, dispatch_type);
818 } 822 }
819 823
824 InputEventAckState RenderWidget::HandleInputEvent(
825 const blink::WebCoalescedInputEvent& input_event,
826 const ui::LatencyInfo& latency_info,
827 InputEventDispatchType dispatch_type) {
828 return input_handler_->HandleInputEvent(input_event, latency_info,
829 dispatch_type);
830 }
831
832 void RenderWidget::SendInputEventAck(blink::WebInputEvent::Type type,
833 InputEventAckState ack_result,
834 uint32_t touch_event_id) {
835 InputEventAck ack(InputEventAckSource::MAIN_THREAD, type, ack_result,
836 touch_event_id);
837 Send(new InputHostMsg_HandleInputEvent_ACK(routing_id_, ack));
838 }
839
820 void RenderWidget::OnCursorVisibilityChange(bool is_visible) { 840 void RenderWidget::OnCursorVisibilityChange(bool is_visible) {
821 if (GetWebWidget()) 841 if (GetWebWidget())
822 GetWebWidget()->SetCursorVisibilityState(is_visible); 842 GetWebWidget()->SetCursorVisibilityState(is_visible);
823 } 843 }
824 844
825 void RenderWidget::OnMouseCaptureLost() { 845 void RenderWidget::OnMouseCaptureLost() {
826 if (GetWebWidget()) 846 if (GetWebWidget())
827 GetWebWidget()->MouseCaptureLost(); 847 GetWebWidget()->MouseCaptureLost();
828 } 848 }
829 849
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 } 884 }
865 885
866 void RenderWidget::RecordWheelAndTouchScrollingCount( 886 void RenderWidget::RecordWheelAndTouchScrollingCount(
867 bool has_scrolled_by_wheel, 887 bool has_scrolled_by_wheel,
868 bool has_scrolled_by_touch) { 888 bool has_scrolled_by_touch) {
869 GetWebWidget()->RecordWheelAndTouchScrollingCount(has_scrolled_by_wheel, 889 GetWebWidget()->RecordWheelAndTouchScrollingCount(has_scrolled_by_wheel,
870 has_scrolled_by_touch); 890 has_scrolled_by_touch);
871 } 891 }
872 892
873 void RenderWidget::BeginMainFrame(double frame_time_sec) { 893 void RenderWidget::BeginMainFrame(double frame_time_sec) {
874 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 894 if (input_event_queue_) {
875 // render_thread may be NULL in tests. 895 input_event_queue_->DispatchRafAlignedInput(
876 InputHandlerManager* input_handler_manager = 896 ui::EventTimeStampFromSeconds(frame_time_sec));
877 render_thread ? render_thread->input_handler_manager() : NULL; 897 }
878 if (input_handler_manager)
879 input_handler_manager->ProcessRafAlignedInputOnMainThread(
880 routing_id_, ui::EventTimeStampFromSeconds(frame_time_sec));
881 898
882 GetWebWidget()->BeginFrame(frame_time_sec); 899 GetWebWidget()->BeginFrame(frame_time_sec);
883 } 900 }
884 901
885 void RenderWidget::RequestNewCompositorFrameSink( 902 void RenderWidget::RequestNewCompositorFrameSink(
886 bool fallback, 903 bool fallback,
887 const CompositorFrameSinkCallback& callback) { 904 const CompositorFrameSinkCallback& callback) {
888 DCHECK(GetWebWidget()); 905 DCHECK(GetWebWidget());
889 // For widgets that are never visible, we don't start the compositor, so we 906 // For widgets that are never visible, we don't start the compositor, so we
890 // never get a request for a cc::CompositorFrameSink. 907 // 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) { 1047 void RenderWidget::OnDidOverscroll(const ui::DidOverscrollParams& params) {
1031 Send(new InputHostMsg_DidOverscroll(routing_id_, params)); 1048 Send(new InputHostMsg_DidOverscroll(routing_id_, params));
1032 } 1049 }
1033 1050
1034 void RenderWidget::OnInputEventAck( 1051 void RenderWidget::OnInputEventAck(
1035 std::unique_ptr<InputEventAck> input_event_ack) { 1052 std::unique_ptr<InputEventAck> input_event_ack) {
1036 SendOrCrash( 1053 SendOrCrash(
1037 new InputHostMsg_HandleInputEvent_ACK(routing_id_, *input_event_ack)); 1054 new InputHostMsg_HandleInputEvent_ACK(routing_id_, *input_event_ack));
1038 } 1055 }
1039 1056
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) { 1057 void RenderWidget::SetInputHandler(RenderWidgetInputHandler* input_handler) {
1054 // Nothing to do here. RenderWidget created the |input_handler| and will take 1058 // 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 1059 // ownership of it. We just verify here that we don't already have an input
1056 // handler. 1060 // handler.
1057 DCHECK(!input_handler_); 1061 DCHECK(!input_handler_);
1058 } 1062 }
1059 1063
1060 void RenderWidget::ShowVirtualKeyboard() { 1064 void RenderWidget::ShowVirtualKeyboard() {
1061 UpdateTextInputStateInternal(true, false); 1065 UpdateTextInputStateInternal(true, false);
1062 } 1066 }
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1305 StartCompositor(); 1309 StartCompositor();
1306 DCHECK_NE(MSG_ROUTING_NONE, routing_id_); 1310 DCHECK_NE(MSG_ROUTING_NONE, routing_id_);
1307 compositor_->SetFrameSinkId( 1311 compositor_->SetFrameSinkId(
1308 cc::FrameSinkId(RenderThread::Get()->GetClientId(), routing_id_)); 1312 cc::FrameSinkId(RenderThread::Get()->GetClientId(), routing_id_));
1309 1313
1310 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 1314 RenderThreadImpl* render_thread = RenderThreadImpl::current();
1311 // render_thread may be NULL in tests. 1315 // render_thread may be NULL in tests.
1312 InputHandlerManager* input_handler_manager = 1316 InputHandlerManager* input_handler_manager =
1313 render_thread ? render_thread->input_handler_manager() : NULL; 1317 render_thread ? render_thread->input_handler_manager() : NULL;
1314 if (input_handler_manager) { 1318 if (input_handler_manager) {
1319 input_event_queue_ = new MainThreadEventQueue(
1320 this, render_thread->GetRendererScheduler()->CompositorTaskRunner(),
1321 render_thread->GetRendererScheduler());
1315 input_handler_manager->AddInputHandler( 1322 input_handler_manager->AddInputHandler(
1316 routing_id_, compositor()->GetInputHandler(), 1323 routing_id_, compositor()->GetInputHandler(), input_event_queue_,
1317 weak_ptr_factory_.GetWeakPtr(), 1324 weak_ptr_factory_.GetWeakPtr(),
1318 compositor_deps_->IsScrollAnimatorEnabled()); 1325 compositor_deps_->IsScrollAnimatorEnabled());
1319 has_added_input_handler_ = true; 1326 has_added_input_handler_ = true;
1320 } 1327 }
1321 1328
1322 return compositor_.get(); 1329 return compositor_.get();
1323 } 1330 }
1324 1331
1325 void RenderWidget::WillCloseLayerTreeView() { 1332 void RenderWidget::WillCloseLayerTreeView() {
1326 if (host_closing_) 1333 if (host_closing_)
(...skipping 987 matching lines...) Expand 10 before | Expand all | Expand 10 after
2314 // browser side (https://crbug.com/669219). 2321 // browser side (https://crbug.com/669219).
2315 // If there is no WebFrameWidget, then there will be no 2322 // If there is no WebFrameWidget, then there will be no
2316 // InputMethodControllers for a WebLocalFrame. 2323 // InputMethodControllers for a WebLocalFrame.
2317 return nullptr; 2324 return nullptr;
2318 } 2325 }
2319 return static_cast<blink::WebFrameWidget*>(GetWebWidget()) 2326 return static_cast<blink::WebFrameWidget*>(GetWebWidget())
2320 ->GetActiveWebInputMethodController(); 2327 ->GetActiveWebInputMethodController();
2321 } 2328 }
2322 2329
2323 } // namespace content 2330 } // namespace content
OLDNEW
« content/renderer/input/main_thread_event_queue.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