| 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/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/memory/singleton.h" | 15 #include "base/memory/singleton.h" |
| 16 #include "base/message_loop/message_loop.h" | 16 #include "base/message_loop/message_loop.h" |
| 17 #include "base/metrics/histogram.h" | 17 #include "base/metrics/histogram.h" |
| 18 #include "base/stl_util.h" | 18 #include "base/stl_util.h" |
| 19 #include "base/strings/utf_string_conversions.h" | 19 #include "base/strings/utf_string_conversions.h" |
| 20 #include "base/sys_info.h" | 20 #include "base/sys_info.h" |
| 21 #include "base/trace_event/trace_event.h" | 21 #include "base/trace_event/trace_event.h" |
| 22 #include "base/trace_event/trace_event_synthetic_delay.h" | 22 #include "base/trace_event/trace_event_synthetic_delay.h" |
| 23 #include "build/build_config.h" | 23 #include "build/build_config.h" |
| 24 #include "cc/base/switches.h" | 24 #include "cc/base/switches.h" |
| 25 #include "cc/debug/benchmark_instrumentation.h" | 25 #include "cc/debug/benchmark_instrumentation.h" |
| 26 #include "cc/output/output_surface.h" | 26 #include "cc/output/output_surface.h" |
| 27 #include "cc/scheduler/begin_frame_source.h" | |
| 28 #include "cc/trees/layer_tree_host.h" | 27 #include "cc/trees/layer_tree_host.h" |
| 29 #include "components/scheduler/renderer/render_widget_scheduling_state.h" | 28 #include "components/scheduler/renderer/render_widget_scheduling_state.h" |
| 30 #include "components/scheduler/renderer/renderer_scheduler.h" | 29 #include "components/scheduler/renderer/renderer_scheduler.h" |
| 31 #include "content/child/npapi/webplugin.h" | 30 #include "content/child/npapi/webplugin.h" |
| 32 #include "content/common/content_switches_internal.h" | 31 #include "content/common/content_switches_internal.h" |
| 33 #include "content/common/gpu/client/context_provider_command_buffer.h" | 32 #include "content/common/gpu/client/context_provider_command_buffer.h" |
| 34 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" | 33 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h" |
| 35 #include "content/common/gpu/gpu_process_launch_causes.h" | 34 #include "content/common/gpu/gpu_process_launch_causes.h" |
| 36 #include "content/common/input/synthetic_gesture_packet.h" | 35 #include "content/common/input/synthetic_gesture_packet.h" |
| 37 #include "content/common/input/web_input_event_traits.h" | 36 #include "content/common/input/web_input_event_traits.h" |
| (...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 951 | 950 |
| 952 void RenderWidget::OnRequestMoveAck() { | 951 void RenderWidget::OnRequestMoveAck() { |
| 953 DCHECK(pending_window_rect_count_); | 952 DCHECK(pending_window_rect_count_); |
| 954 pending_window_rect_count_--; | 953 pending_window_rect_count_--; |
| 955 } | 954 } |
| 956 | 955 |
| 957 GURL RenderWidget::GetURLForGraphicsContext3D() { | 956 GURL RenderWidget::GetURLForGraphicsContext3D() { |
| 958 return GURL(); | 957 return GURL(); |
| 959 } | 958 } |
| 960 | 959 |
| 961 void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event, | |
| 962 const ui::LatencyInfo& latency_info) { | |
| 963 if (!input_event) | |
| 964 return; | |
| 965 input_handler_->HandleInputEvent(*input_event, latency_info); | |
| 966 } | |
| 967 | |
| 968 void RenderWidget::OnCursorVisibilityChange(bool is_visible) { | |
| 969 if (webwidget_) | |
| 970 webwidget_->setCursorVisibilityState(is_visible); | |
| 971 } | |
| 972 | |
| 973 void RenderWidget::OnMouseCaptureLost() { | |
| 974 if (webwidget_) | |
| 975 webwidget_->mouseCaptureLost(); | |
| 976 } | |
| 977 | |
| 978 void RenderWidget::OnSetFocus(bool enable) { | |
| 979 if (webwidget_) | |
| 980 webwidget_->setFocus(enable); | |
| 981 } | |
| 982 | |
| 983 /////////////////////////////////////////////////////////////////////////////// | |
| 984 // RenderWidgetCompositorDelegate | |
| 985 | |
| 986 void RenderWidget::ApplyViewportDeltas( | |
| 987 const gfx::Vector2dF& inner_delta, | |
| 988 const gfx::Vector2dF& outer_delta, | |
| 989 const gfx::Vector2dF& elastic_overscroll_delta, | |
| 990 float page_scale, | |
| 991 float top_controls_delta) { | |
| 992 webwidget_->applyViewportDeltas(inner_delta, outer_delta, | |
| 993 elastic_overscroll_delta, page_scale, | |
| 994 top_controls_delta); | |
| 995 } | |
| 996 | |
| 997 void RenderWidget::BeginMainFrame(double frame_time_sec) { | |
| 998 webwidget_->beginFrame(frame_time_sec); | |
| 999 } | |
| 1000 | |
| 1001 scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) { | 960 scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) { |
| 1002 // If the host is closing, then no more compositing is possible. This | |
| 1003 // prevents shutdown races between handling the close message and | |
| 1004 // the CreateOutputSurface task. | |
| 1005 if (host_closing_) | |
| 1006 return nullptr; | |
| 1007 | |
| 1008 DCHECK(webwidget_); | 961 DCHECK(webwidget_); |
| 1009 // For widgets that are never visible, we don't start the compositor, so we | 962 // For widgets that are never visible, we don't start the compositor, so we |
| 1010 // never get a request for a cc::OutputSurface. | 963 // never get a request for a cc::OutputSurface. |
| 1011 DCHECK(!compositor_never_visible_); | 964 DCHECK(!compositor_never_visible_); |
| 1012 | 965 |
| 1013 const base::CommandLine& command_line = | 966 const base::CommandLine& command_line = |
| 1014 *base::CommandLine::ForCurrentProcess(); | 967 *base::CommandLine::ForCurrentProcess(); |
| 1015 bool use_software = fallback; | 968 bool use_software = fallback; |
| 1016 if (command_line.HasSwitch(switches::kDisableGpuCompositing)) | 969 if (command_line.HasSwitch(switches::kDisableGpuCompositing)) |
| 1017 use_software = true; | 970 use_software = true; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1089 return make_scoped_ptr(new CompositorOutputSurface( | 1042 return make_scoped_ptr(new CompositorOutputSurface( |
| 1090 routing_id(), output_surface_id, nullptr, nullptr, | 1043 routing_id(), output_surface_id, nullptr, nullptr, |
| 1091 std::move(software_device), frame_swap_message_queue_, true)); | 1044 std::move(software_device), frame_swap_message_queue_, true)); |
| 1092 } | 1045 } |
| 1093 | 1046 |
| 1094 return make_scoped_ptr(new MailboxOutputSurface( | 1047 return make_scoped_ptr(new MailboxOutputSurface( |
| 1095 routing_id(), output_surface_id, context_provider, | 1048 routing_id(), output_surface_id, context_provider, |
| 1096 worker_context_provider, frame_swap_message_queue_, cc::RGBA_8888)); | 1049 worker_context_provider, frame_swap_message_queue_, cc::RGBA_8888)); |
| 1097 } | 1050 } |
| 1098 | 1051 |
| 1099 scoped_ptr<cc::BeginFrameSource> | |
| 1100 RenderWidget::CreateExternalBeginFrameSource() { | |
| 1101 return compositor_deps_->CreateExternalBeginFrameSource(routing_id_); | |
| 1102 } | |
| 1103 | |
| 1104 void RenderWidget::DidCommitAndDrawCompositorFrame() { | |
| 1105 // NOTE: Tests may break if this event is renamed or moved. See | |
| 1106 // tab_capture_performancetest.cc. | |
| 1107 TRACE_EVENT0("gpu", "RenderWidget::DidCommitAndDrawCompositorFrame"); | |
| 1108 // Notify subclasses that we initiated the paint operation. | |
| 1109 DidInitiatePaint(); | |
| 1110 } | |
| 1111 | |
| 1112 void RenderWidget::DidCommitCompositorFrame() { | |
| 1113 FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_, | |
| 1114 DidCommitCompositorFrame()); | |
| 1115 FOR_EACH_OBSERVER(RenderFrameProxy, render_frame_proxies_, | |
| 1116 DidCommitCompositorFrame()); | |
| 1117 #if defined(VIDEO_HOLE) | |
| 1118 FOR_EACH_OBSERVER(RenderFrameImpl, video_hole_frames_, | |
| 1119 DidCommitCompositorFrame()); | |
| 1120 #endif // defined(VIDEO_HOLE) | |
| 1121 input_handler_->FlushPendingInputEventAck(); | |
| 1122 } | |
| 1123 | |
| 1124 void RenderWidget::DidCompletePageScaleAnimation() {} | |
| 1125 | |
| 1126 void RenderWidget::DidCompleteSwapBuffers() { | |
| 1127 TRACE_EVENT0("renderer", "RenderWidget::DidCompleteSwapBuffers"); | |
| 1128 | |
| 1129 // Notify subclasses threaded composited rendering was flushed to the screen. | |
| 1130 DidFlushPaint(); | |
| 1131 | |
| 1132 if (!next_paint_flags_ && !need_update_rect_for_auto_resize_ && | |
| 1133 !plugin_window_moves_.size()) { | |
| 1134 return; | |
| 1135 } | |
| 1136 | |
| 1137 ViewHostMsg_UpdateRect_Params params; | |
| 1138 params.view_size = size_; | |
| 1139 params.plugin_window_moves.swap(plugin_window_moves_); | |
| 1140 params.flags = next_paint_flags_; | |
| 1141 | |
| 1142 Send(new ViewHostMsg_UpdateRect(routing_id_, params)); | |
| 1143 next_paint_flags_ = 0; | |
| 1144 need_update_rect_for_auto_resize_ = false; | |
| 1145 } | |
| 1146 | |
| 1147 bool RenderWidget::ForOOPIF() const { | |
| 1148 // TODO(simonhong): Remove this when we enable BeginFrame scheduling for | |
| 1149 // OOPIF(crbug.com/471411). | |
| 1150 return for_oopif_; | |
| 1151 } | |
| 1152 | |
| 1153 void RenderWidget::ForwardCompositorProto(const std::vector<uint8_t>& proto) { | |
| 1154 Send(new ViewHostMsg_ForwardCompositorProto(routing_id_, proto)); | |
| 1155 } | |
| 1156 | |
| 1157 void RenderWidget::OnSwapBuffersAborted() { | 1052 void RenderWidget::OnSwapBuffersAborted() { |
| 1158 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersAborted"); | 1053 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersAborted"); |
| 1159 // Schedule another frame so the compositor learns about it. | 1054 // Schedule another frame so the compositor learns about it. |
| 1160 ScheduleComposite(); | 1055 ScheduleComposite(); |
| 1161 } | 1056 } |
| 1162 | 1057 |
| 1058 void RenderWidget::OnSwapBuffersPosted() { |
| 1059 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersPosted"); |
| 1060 } |
| 1061 |
| 1163 void RenderWidget::OnSwapBuffersComplete() { | 1062 void RenderWidget::OnSwapBuffersComplete() { |
| 1164 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersComplete"); | 1063 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersComplete"); |
| 1165 | 1064 |
| 1166 // Notify subclasses that composited rendering was flushed to the screen. | 1065 // Notify subclasses that composited rendering was flushed to the screen. |
| 1167 DidFlushPaint(); | 1066 DidFlushPaint(); |
| 1168 } | 1067 } |
| 1169 | 1068 |
| 1170 void RenderWidget::OnSwapBuffersPosted() { | 1069 void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event, |
| 1171 TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersPosted"); | 1070 const ui::LatencyInfo& latency_info) { |
| 1071 if (!input_event) |
| 1072 return; |
| 1073 input_handler_->HandleInputEvent(*input_event, latency_info); |
| 1172 } | 1074 } |
| 1173 | 1075 |
| 1174 void RenderWidget::RecordFrameTimingEvents( | 1076 void RenderWidget::OnCursorVisibilityChange(bool is_visible) { |
| 1175 scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, | 1077 if (webwidget_) |
| 1176 scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) { | 1078 webwidget_->setCursorVisibilityState(is_visible); |
| 1177 for (const auto& composite_event : *composite_events) { | |
| 1178 int64_t frameId = composite_event.first; | |
| 1179 const std::vector<cc::FrameTimingTracker::CompositeTimingEvent>& events = | |
| 1180 composite_event.second; | |
| 1181 std::vector<blink::WebFrameTimingEvent> webEvents; | |
| 1182 for (size_t i = 0; i < events.size(); ++i) { | |
| 1183 webEvents.push_back(blink::WebFrameTimingEvent( | |
| 1184 events[i].frame_id, | |
| 1185 (events[i].timestamp - base::TimeTicks()).InSecondsF())); | |
| 1186 } | |
| 1187 webwidget_->recordFrameTimingEvent(blink::WebWidget::CompositeEvent, | |
| 1188 frameId, webEvents); | |
| 1189 } | |
| 1190 for (const auto& main_frame_event : *main_frame_events) { | |
| 1191 int64_t frameId = main_frame_event.first; | |
| 1192 const std::vector<cc::FrameTimingTracker::MainFrameTimingEvent>& events = | |
| 1193 main_frame_event.second; | |
| 1194 std::vector<blink::WebFrameTimingEvent> webEvents; | |
| 1195 for (size_t i = 0; i < events.size(); ++i) { | |
| 1196 webEvents.push_back(blink::WebFrameTimingEvent( | |
| 1197 events[i].frame_id, | |
| 1198 (events[i].timestamp - base::TimeTicks()).InSecondsF(), | |
| 1199 (events[i].end_time - base::TimeTicks()).InSecondsF())); | |
| 1200 } | |
| 1201 webwidget_->recordFrameTimingEvent(blink::WebWidget::RenderEvent, frameId, | |
| 1202 webEvents); | |
| 1203 } | |
| 1204 } | 1079 } |
| 1205 | 1080 |
| 1206 void RenderWidget::ScheduleAnimation() { | 1081 void RenderWidget::OnMouseCaptureLost() { |
| 1207 scheduleAnimation(); | 1082 if (webwidget_) |
| 1083 webwidget_->mouseCaptureLost(); |
| 1208 } | 1084 } |
| 1209 | 1085 |
| 1210 void RenderWidget::UpdateVisualState() { | 1086 void RenderWidget::OnSetFocus(bool enable) { |
| 1211 webwidget_->updateAllLifecyclePhases(); | 1087 if (webwidget_) |
| 1212 } | 1088 webwidget_->setFocus(enable); |
| 1213 | |
| 1214 void RenderWidget::WillBeginCompositorFrame() { | |
| 1215 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame"); | |
| 1216 | |
| 1217 // The UpdateTextInputState can result in further layout and possibly | |
| 1218 // enable GPU acceleration so they need to be called before any painting | |
| 1219 // is done. | |
| 1220 UpdateTextInputState(ShowIme::HIDE_IME, ChangeSource::FROM_NON_IME); | |
| 1221 UpdateSelectionBounds(); | |
| 1222 } | 1089 } |
| 1223 | 1090 |
| 1224 /////////////////////////////////////////////////////////////////////////////// | 1091 /////////////////////////////////////////////////////////////////////////////// |
| 1225 // RenderWidgetInputHandlerDelegate | 1092 // RenderWidgetInputHandlerDelegate |
| 1226 | 1093 |
| 1227 void RenderWidget::FocusChangeComplete() {} | 1094 void RenderWidget::FocusChangeComplete() {} |
| 1228 | 1095 |
| 1229 bool RenderWidget::HasTouchEventHandlersAt(const gfx::Point& point) const { | 1096 bool RenderWidget::HasTouchEventHandlersAt(const gfx::Point& point) const { |
| 1230 return true; | 1097 return true; |
| 1231 } | 1098 } |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1368 | 1235 |
| 1369 void RenderWidget::AutoResizeCompositor() { | 1236 void RenderWidget::AutoResizeCompositor() { |
| 1370 physical_backing_size_ = gfx::ScaleToCeiledSize(size_, device_scale_factor_); | 1237 physical_backing_size_ = gfx::ScaleToCeiledSize(size_, device_scale_factor_); |
| 1371 if (compositor_) | 1238 if (compositor_) |
| 1372 compositor_->setViewportSize(physical_backing_size_); | 1239 compositor_->setViewportSize(physical_backing_size_); |
| 1373 } | 1240 } |
| 1374 | 1241 |
| 1375 void RenderWidget::initializeLayerTreeView() { | 1242 void RenderWidget::initializeLayerTreeView() { |
| 1376 DCHECK(!host_closing_); | 1243 DCHECK(!host_closing_); |
| 1377 | 1244 |
| 1378 compositor_ = RenderWidgetCompositor::Create(this, device_scale_factor_, | 1245 compositor_ = RenderWidgetCompositor::Create(this, compositor_deps_); |
| 1379 compositor_deps_); | |
| 1380 compositor_->setViewportSize(physical_backing_size_); | 1246 compositor_->setViewportSize(physical_backing_size_); |
| 1381 OnDeviceScaleFactorChanged(); | 1247 OnDeviceScaleFactorChanged(); |
| 1382 // For background pages and certain tests, we don't want to trigger | 1248 // For background pages and certain tests, we don't want to trigger |
| 1383 // OutputSurface creation. | 1249 // OutputSurface creation. |
| 1384 if (compositor_never_visible_ || !RenderThreadImpl::current()) | 1250 if (compositor_never_visible_ || !RenderThreadImpl::current()) |
| 1385 compositor_->SetNeverVisible(); | 1251 compositor_->SetNeverVisible(); |
| 1386 | 1252 |
| 1387 StartCompositor(); | 1253 StartCompositor(); |
| 1388 } | 1254 } |
| 1389 | 1255 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1407 void RenderWidget::didMeaningfulLayout(blink::WebMeaningfulLayout layout_type) { | 1273 void RenderWidget::didMeaningfulLayout(blink::WebMeaningfulLayout layout_type) { |
| 1408 if (layout_type == blink::WebMeaningfulLayout::VisuallyNonEmpty) { | 1274 if (layout_type == blink::WebMeaningfulLayout::VisuallyNonEmpty) { |
| 1409 QueueMessage(new ViewHostMsg_DidFirstVisuallyNonEmptyPaint(routing_id_), | 1275 QueueMessage(new ViewHostMsg_DidFirstVisuallyNonEmptyPaint(routing_id_), |
| 1410 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE); | 1276 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE); |
| 1411 } | 1277 } |
| 1412 | 1278 |
| 1413 FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_, | 1279 FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_, |
| 1414 DidMeaningfulLayout(layout_type)); | 1280 DidMeaningfulLayout(layout_type)); |
| 1415 } | 1281 } |
| 1416 | 1282 |
| 1283 void RenderWidget::WillBeginCompositorFrame() { |
| 1284 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame"); |
| 1285 |
| 1286 // The UpdateTextInputState can result in further layout and possibly |
| 1287 // enable GPU acceleration so they need to be called before any painting |
| 1288 // is done. |
| 1289 UpdateTextInputState(ShowIme::HIDE_IME, ChangeSource::FROM_NON_IME); |
| 1290 UpdateSelectionBounds(); |
| 1291 } |
| 1292 |
| 1293 void RenderWidget::DidCommitCompositorFrame() { |
| 1294 FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_, |
| 1295 DidCommitCompositorFrame()); |
| 1296 FOR_EACH_OBSERVER(RenderFrameProxy, render_frame_proxies_, |
| 1297 DidCommitCompositorFrame()); |
| 1298 #if defined(VIDEO_HOLE) |
| 1299 FOR_EACH_OBSERVER(RenderFrameImpl, video_hole_frames_, |
| 1300 DidCommitCompositorFrame()); |
| 1301 #endif // defined(VIDEO_HOLE) |
| 1302 input_handler_->FlushPendingInputEventAck(); |
| 1303 } |
| 1304 |
| 1305 void RenderWidget::DidCommitAndDrawCompositorFrame() { |
| 1306 // NOTE: Tests may break if this event is renamed or moved. See |
| 1307 // tab_capture_performancetest.cc. |
| 1308 TRACE_EVENT0("gpu", "RenderWidget::DidCommitAndDrawCompositorFrame"); |
| 1309 // Notify subclasses that we initiated the paint operation. |
| 1310 DidInitiatePaint(); |
| 1311 } |
| 1312 |
| 1313 void RenderWidget::DidCompleteSwapBuffers() { |
| 1314 TRACE_EVENT0("renderer", "RenderWidget::DidCompleteSwapBuffers"); |
| 1315 |
| 1316 // Notify subclasses threaded composited rendering was flushed to the screen. |
| 1317 DidFlushPaint(); |
| 1318 |
| 1319 if (!next_paint_flags_ && |
| 1320 !need_update_rect_for_auto_resize_ && |
| 1321 !plugin_window_moves_.size()) { |
| 1322 return; |
| 1323 } |
| 1324 |
| 1325 ViewHostMsg_UpdateRect_Params params; |
| 1326 params.view_size = size_; |
| 1327 params.plugin_window_moves.swap(plugin_window_moves_); |
| 1328 params.flags = next_paint_flags_; |
| 1329 |
| 1330 Send(new ViewHostMsg_UpdateRect(routing_id_, params)); |
| 1331 next_paint_flags_ = 0; |
| 1332 need_update_rect_for_auto_resize_ = false; |
| 1333 } |
| 1334 |
| 1417 void RenderWidget::ScheduleComposite() { | 1335 void RenderWidget::ScheduleComposite() { |
| 1418 if (compositor_ && | 1336 if (compositor_ && |
| 1419 compositor_deps_->GetCompositorImplThreadTaskRunner().get()) { | 1337 compositor_deps_->GetCompositorImplThreadTaskRunner().get()) { |
| 1420 compositor_->setNeedsAnimate(); | 1338 compositor_->setNeedsAnimate(); |
| 1421 } | 1339 } |
| 1422 } | 1340 } |
| 1423 | 1341 |
| 1424 void RenderWidget::ScheduleCompositeWithForcedRedraw() { | 1342 void RenderWidget::ScheduleCompositeWithForcedRedraw() { |
| 1425 if (compositor_) { | 1343 if (compositor_) { |
| 1426 // Regardless of whether threaded compositing is enabled, always | 1344 // Regardless of whether threaded compositing is enabled, always |
| (...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1959 selection_focus_rect_ = params.focus_rect; | 1877 selection_focus_rect_ = params.focus_rect; |
| 1960 webwidget_->selectionTextDirection(params.focus_dir, params.anchor_dir); | 1878 webwidget_->selectionTextDirection(params.focus_dir, params.anchor_dir); |
| 1961 params.is_anchor_first = webwidget_->isSelectionAnchorFirst(); | 1879 params.is_anchor_first = webwidget_->isSelectionAnchorFirst(); |
| 1962 Send(new ViewHostMsg_SelectionBoundsChanged(routing_id_, params)); | 1880 Send(new ViewHostMsg_SelectionBoundsChanged(routing_id_, params)); |
| 1963 } | 1881 } |
| 1964 } | 1882 } |
| 1965 | 1883 |
| 1966 UpdateCompositionInfo(false); | 1884 UpdateCompositionInfo(false); |
| 1967 } | 1885 } |
| 1968 | 1886 |
| 1887 void RenderWidget::ForwardCompositorProto(const std::vector<uint8_t>& proto) { |
| 1888 Send(new ViewHostMsg_ForwardCompositorProto(routing_id_, proto)); |
| 1889 } |
| 1890 |
| 1969 // Check blink::WebTextInputType and ui::TextInputType is kept in sync. | 1891 // Check blink::WebTextInputType and ui::TextInputType is kept in sync. |
| 1970 #define STATIC_ASSERT_WTIT_ENUM_MATCH(a, b) \ | 1892 #define STATIC_ASSERT_WTIT_ENUM_MATCH(a, b) \ |
| 1971 static_assert(int(blink::WebTextInputType##a) \ | 1893 static_assert(int(blink::WebTextInputType##a) \ |
| 1972 == int(ui::TEXT_INPUT_TYPE_##b), \ | 1894 == int(ui::TEXT_INPUT_TYPE_##b), \ |
| 1973 "mismatching enums: " #a) | 1895 "mismatching enums: " #a) |
| 1974 | 1896 |
| 1975 STATIC_ASSERT_WTIT_ENUM_MATCH(None, NONE); | 1897 STATIC_ASSERT_WTIT_ENUM_MATCH(None, NONE); |
| 1976 STATIC_ASSERT_WTIT_ENUM_MATCH(Text, TEXT); | 1898 STATIC_ASSERT_WTIT_ENUM_MATCH(Text, TEXT); |
| 1977 STATIC_ASSERT_WTIT_ENUM_MATCH(Password, PASSWORD); | 1899 STATIC_ASSERT_WTIT_ENUM_MATCH(Password, PASSWORD); |
| 1978 STATIC_ASSERT_WTIT_ENUM_MATCH(Search, SEARCH); | 1900 STATIC_ASSERT_WTIT_ENUM_MATCH(Search, SEARCH); |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2267 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { | 2189 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2268 video_hole_frames_.AddObserver(frame); | 2190 video_hole_frames_.AddObserver(frame); |
| 2269 } | 2191 } |
| 2270 | 2192 |
| 2271 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { | 2193 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { |
| 2272 video_hole_frames_.RemoveObserver(frame); | 2194 video_hole_frames_.RemoveObserver(frame); |
| 2273 } | 2195 } |
| 2274 #endif // defined(VIDEO_HOLE) | 2196 #endif // defined(VIDEO_HOLE) |
| 2275 | 2197 |
| 2276 } // namespace content | 2198 } // namespace content |
| OLD | NEW |