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

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

Issue 279373002: Remove some legacy software WebWidgetClient callbacks from RenderWidget (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « content/renderer/render_widget.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/debug/trace_event_synthetic_delay.h" 10 #include "base/debug/trace_event_synthetic_delay.h"
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 closing_(false), 379 closing_(false),
380 is_swapped_out_(swapped_out), 380 is_swapped_out_(swapped_out),
381 input_method_is_active_(false), 381 input_method_is_active_(false),
382 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), 382 text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
383 text_input_mode_(ui::TEXT_INPUT_MODE_DEFAULT), 383 text_input_mode_(ui::TEXT_INPUT_MODE_DEFAULT),
384 can_compose_inline_(true), 384 can_compose_inline_(true),
385 popup_type_(popup_type), 385 popup_type_(popup_type),
386 pending_window_rect_count_(0), 386 pending_window_rect_count_(0),
387 suppress_next_char_events_(false), 387 suppress_next_char_events_(false),
388 is_accelerated_compositing_active_(false), 388 is_accelerated_compositing_active_(false),
389 invalidation_task_posted_(false),
390 screen_info_(screen_info), 389 screen_info_(screen_info),
391 device_scale_factor_(screen_info_.deviceScaleFactor), 390 device_scale_factor_(screen_info_.deviceScaleFactor),
392 is_threaded_compositing_enabled_(false), 391 is_threaded_compositing_enabled_(false),
393 next_output_surface_id_(0), 392 next_output_surface_id_(0),
394 #if defined(OS_ANDROID) 393 #if defined(OS_ANDROID)
395 text_field_is_dirty_(false), 394 text_field_is_dirty_(false),
396 outstanding_ime_acks_(0), 395 outstanding_ime_acks_(0),
397 body_background_color_(SK_ColorWHITE), 396 body_background_color_(SK_ColorWHITE),
398 #endif 397 #endif
399 #if defined(OS_MACOSX) 398 #if defined(OS_MACOSX)
400 cached_has_main_frame_horizontal_scrollbar_(false), 399 cached_has_main_frame_horizontal_scrollbar_(false),
401 cached_has_main_frame_vertical_scrollbar_(false), 400 cached_has_main_frame_vertical_scrollbar_(false),
402 #endif 401 #endif
403 popup_origin_scale_for_emulation_(0.f), 402 popup_origin_scale_for_emulation_(0.f),
404 resizing_mode_selector_(new ResizingModeSelector()), 403 resizing_mode_selector_(new ResizingModeSelector()),
405 context_menu_source_type_(ui::MENU_SOURCE_MOUSE) { 404 context_menu_source_type_(ui::MENU_SOURCE_MOUSE) {
406 if (!swapped_out) 405 if (!swapped_out)
407 RenderProcess::current()->AddRefProcess(); 406 RenderProcess::current()->AddRefProcess();
408 DCHECK(RenderThread::Get()); 407 DCHECK(RenderThread::Get());
409 is_threaded_compositing_enabled_ = 408 is_threaded_compositing_enabled_ =
410 CommandLine::ForCurrentProcess()->HasSwitch( 409 CommandLine::ForCurrentProcess()->HasSwitch(
411 switches::kEnableThreadedCompositing); 410 switches::kEnableThreadedCompositing);
412
413 legacy_software_mode_stats_ = cc::RenderingStatsInstrumentation::Create();
414 if (CommandLine::ForCurrentProcess()->HasSwitch(
415 cc::switches::kEnableGpuBenchmarking))
416 legacy_software_mode_stats_->set_record_rendering_stats(true);
417 } 411 }
418 412
419 RenderWidget::~RenderWidget() { 413 RenderWidget::~RenderWidget() {
420 DCHECK(!webwidget_) << "Leaking our WebWidget!"; 414 DCHECK(!webwidget_) << "Leaking our WebWidget!";
421 415
422 // If we are swapped out, we have released already. 416 // If we are swapped out, we have released already.
423 if (!is_swapped_out_ && RenderProcess::current()) 417 if (!is_swapped_out_ && RenderProcess::current())
424 RenderProcess::current()->ReleaseProcess(); 418 RenderProcess::current()->ReleaseProcess();
425 } 419 }
426 420
(...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after
1136 webwidget_->setFocus(enable); 1130 webwidget_->setFocus(enable);
1137 } 1131 }
1138 1132
1139 void RenderWidget::ClearFocus() { 1133 void RenderWidget::ClearFocus() {
1140 // We may have got the focus from the browser before this gets processed, in 1134 // We may have got the focus from the browser before this gets processed, in
1141 // which case we do not want to unfocus ourself. 1135 // which case we do not want to unfocus ourself.
1142 if (!has_focus_ && webwidget_) 1136 if (!has_focus_ && webwidget_)
1143 webwidget_->setFocus(false); 1137 webwidget_->setFocus(false);
1144 } 1138 }
1145 1139
1146 void RenderWidget::InvalidationCallback() {
1147 TRACE_EVENT0("renderer", "RenderWidget::InvalidationCallback");
1148 invalidation_task_posted_ = false;
1149 FlushPendingInputEventAck();
1150 }
1151
1152 void RenderWidget::FlushPendingInputEventAck() { 1140 void RenderWidget::FlushPendingInputEventAck() {
1153 if (pending_input_event_ack_) 1141 if (pending_input_event_ack_)
1154 Send(pending_input_event_ack_.release()); 1142 Send(pending_input_event_ack_.release());
1155 total_input_handling_time_this_frame_ = base::TimeDelta(); 1143 total_input_handling_time_this_frame_ = base::TimeDelta();
1156 } 1144 }
1157 1145
1158 /////////////////////////////////////////////////////////////////////////////// 1146 ///////////////////////////////////////////////////////////////////////////////
1159 // WebWidgetClient 1147 // WebWidgetClient
1160 1148
1161 void RenderWidget::didInvalidateRect(const WebRect& rect) {
piman 2014/05/12 23:55:21 There are still paths in WebKit that call didInval
1162 // The invalidated rect might be outside the bounds of the view.
1163 gfx::Rect view_rect(size_);
1164 gfx::Rect damaged_rect = gfx::IntersectRects(view_rect, rect);
1165 if (damaged_rect.IsEmpty())
1166 return;
1167
1168 // We may not need to schedule another call to DoDeferredUpdate.
1169 if (invalidation_task_posted_)
1170 return;
1171
1172 // Perform updating asynchronously. This serves two purposes:
1173 // 1) Ensures that we call WebView::Paint without a bunch of other junk
1174 // on the call stack.
1175 // 2) Allows us to collect more damage rects before painting to help coalesce
1176 // the work that we will need to do.
1177 invalidation_task_posted_ = true;
1178 base::MessageLoop::current()->PostTask(
1179 FROM_HERE, base::Bind(&RenderWidget::InvalidationCallback, this));
1180 }
1181
1182 void RenderWidget::didScrollRect(int dx, int dy,
1183 const WebRect& clip_rect) {
1184 // Drop scrolls on the floor when we are in compositing mode.
1185 // TODO(nduca): stop WebViewImpl from sending scrolls in the first place.
1186 if (is_accelerated_compositing_active_)
1187 return;
1188
1189 // The scrolled rect might be outside the bounds of the view.
1190 gfx::Rect view_rect(size_);
1191 gfx::Rect damaged_rect = gfx::IntersectRects(view_rect, clip_rect);
1192 if (damaged_rect.IsEmpty())
1193 return;
1194
1195 // We may not need to schedule another call to DoDeferredUpdate.
1196 if (invalidation_task_posted_)
1197 return;
1198
1199 // Perform updating asynchronously. This serves two purposes:
1200 // 1) Ensures that we call WebView::Paint without a bunch of other junk
1201 // on the call stack.
1202 // 2) Allows us to collect more damage rects before painting to help coalesce
1203 // the work that we will need to do.
1204 invalidation_task_posted_ = true;
1205 base::MessageLoop::current()->PostTask(
1206 FROM_HERE, base::Bind(&RenderWidget::InvalidationCallback, this));
1207 }
1208
1209 void RenderWidget::didAutoResize(const WebSize& new_size) { 1149 void RenderWidget::didAutoResize(const WebSize& new_size) {
1210 if (size_.width() != new_size.width || size_.height() != new_size.height) { 1150 if (size_.width() != new_size.width || size_.height() != new_size.height) {
1211 size_ = new_size; 1151 size_ = new_size;
1212 1152
1213 if (resizing_mode_selector_->is_synchronous_mode()) { 1153 if (resizing_mode_selector_->is_synchronous_mode()) {
1214 WebRect new_pos(rootWindowRect().x, 1154 WebRect new_pos(rootWindowRect().x,
1215 rootWindowRect().y, 1155 rootWindowRect().y,
1216 new_size.width, 1156 new_size.width,
1217 new_size.height); 1157 new_size.height);
1218 view_screen_rect_ = new_pos; 1158 view_screen_rect_ = new_pos;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1326 Send(new ViewHostMsg_UpdateRect(routing_id_, params)); 1266 Send(new ViewHostMsg_UpdateRect(routing_id_, params));
1327 next_paint_flags_ = 0; 1267 next_paint_flags_ = 0;
1328 need_update_rect_for_auto_resize_ = false; 1268 need_update_rect_for_auto_resize_ = false;
1329 } 1269 }
1330 1270
1331 void RenderWidget::scheduleComposite() { 1271 void RenderWidget::scheduleComposite() {
1332 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 1272 RenderThreadImpl* render_thread = RenderThreadImpl::current();
1333 // render_thread may be NULL in tests. 1273 // render_thread may be NULL in tests.
1334 if (render_thread && render_thread->compositor_message_loop_proxy().get() && 1274 if (render_thread && render_thread->compositor_message_loop_proxy().get() &&
1335 compositor_) { 1275 compositor_) {
1336 compositor_->setNeedsAnimate(); 1276 compositor_->setNeedsAnimate();
1337 } else {
1338 // TODO(nduca): replace with something a little less hacky. The reason this
1339 // hack is still used is because the Invalidate-DoDeferredUpdate loop
1340 // contains a lot of host-renderer synchronization logic that is still
1341 // important for the accelerated compositing case. The option of simply
1342 // duplicating all that code is less desirable than "faking out" the
1343 // invalidation path using a magical damage rect.
1344 didInvalidateRect(WebRect(0, 0, 1, 1));
1345 } 1277 }
1346 } 1278 }
1347 1279
1348 void RenderWidget::didChangeCursor(const WebCursorInfo& cursor_info) { 1280 void RenderWidget::didChangeCursor(const WebCursorInfo& cursor_info) {
1349 // TODO(darin): Eliminate this temporary. 1281 // TODO(darin): Eliminate this temporary.
1350 WebCursor cursor; 1282 WebCursor cursor;
1351 InitializeCursorFromWebKitCursorInfo(&cursor, cursor_info); 1283 InitializeCursorFromWebKitCursorInfo(&cursor, cursor_info);
1352 // Only send a SetCursor message if we need to make a change. 1284 // Only send a SetCursor message if we need to make a change.
1353 if (!current_cursor_.IsEqual(cursor)) { 1285 if (!current_cursor_.IsEqual(cursor)) {
1354 current_cursor_ = cursor; 1286 current_cursor_ = cursor;
(...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after
2183 2115
2184 void RenderWidget::RegisterSwappedOutChildFrame(RenderFrameImpl* frame) { 2116 void RenderWidget::RegisterSwappedOutChildFrame(RenderFrameImpl* frame) {
2185 swapped_out_frames_.AddObserver(frame); 2117 swapped_out_frames_.AddObserver(frame);
2186 } 2118 }
2187 2119
2188 void RenderWidget::UnregisterSwappedOutChildFrame(RenderFrameImpl* frame) { 2120 void RenderWidget::UnregisterSwappedOutChildFrame(RenderFrameImpl* frame) {
2189 swapped_out_frames_.RemoveObserver(frame); 2121 swapped_out_frames_.RemoveObserver(frame);
2190 } 2122 }
2191 2123
2192 } // namespace content 2124 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_widget.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698