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/browser/renderer_host/render_widget_host_impl.cc

Issue 1078123002: Send resize event when the screen info changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 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/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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 hung_renderer_delay_( 163 hung_renderer_delay_(
164 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)), 164 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)),
165 delegate_(delegate), 165 delegate_(delegate),
166 process_(process), 166 process_(process),
167 routing_id_(routing_id), 167 routing_id_(routing_id),
168 surface_id_(0), 168 surface_id_(0),
169 is_loading_(false), 169 is_loading_(false),
170 is_hidden_(hidden), 170 is_hidden_(hidden),
171 repaint_ack_pending_(false), 171 repaint_ack_pending_(false),
172 resize_ack_pending_(false), 172 resize_ack_pending_(false),
173 screen_info_out_of_date_(false), 173 screen_info_out_of_date_(true),
174 auto_resize_enabled_(false), 174 auto_resize_enabled_(false),
175 waiting_for_screen_rects_ack_(false), 175 waiting_for_screen_rects_ack_(false),
176 needs_repainting_on_restore_(false), 176 needs_repainting_on_restore_(false),
177 is_unresponsive_(false), 177 is_unresponsive_(false),
178 in_flight_event_count_(0), 178 in_flight_event_count_(0),
179 in_get_backing_store_(false), 179 in_get_backing_store_(false),
180 ignore_input_events_(false), 180 ignore_input_events_(false),
181 input_method_active_(false), 181 input_method_active_(false),
182 text_direction_updated_(false), 182 text_direction_updated_(false),
183 text_direction_(blink::WebTextDirectionLeftToRight), 183 text_direction_(blink::WebTextDirectionLeftToRight),
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 // does nothing if the sizes are already in sync. 570 // does nothing if the sizes are already in sync.
571 // 571 //
572 // TODO: ideally ViewMsg_WasShown would take a size. This way, the renderer 572 // TODO: ideally ViewMsg_WasShown would take a size. This way, the renderer
573 // could handle both the restore and resize at once. This isn't that big a 573 // could handle both the restore and resize at once. This isn't that big a
574 // deal as RenderWidget::WasShown delays updating, so that the resize from 574 // deal as RenderWidget::WasShown delays updating, so that the resize from
575 // WasResized is usually processed before the renderer is painted. 575 // WasResized is usually processed before the renderer is painted.
576 WasResized(); 576 WasResized();
577 } 577 }
578 578
579 bool RenderWidgetHostImpl::GetResizeParams( 579 bool RenderWidgetHostImpl::GetResizeParams(
580 ViewMsg_Resize_Params* resize_params) { 580 ViewMsg_Resize_Params* resize_params) const {
581 *resize_params = ViewMsg_Resize_Params(); 581 *resize_params = ViewMsg_Resize_Params();
582 582
583 if (!screen_info_) {
584 screen_info_.reset(new blink::WebScreenInfo);
585 GetWebScreenInfo(screen_info_.get());
586 }
piman 2015/04/15 19:38:42 Do we need to call UpdateScreenInfo() in RenderVie
mlamouri (slow - plz ping) 2015/04/16 14:56:42 Done.
587 resize_params->screen_info = *screen_info_; 583 resize_params->screen_info = *screen_info_;
588 resize_params->resizer_rect = GetRootWindowResizerRect(); 584 resize_params->resizer_rect = GetRootWindowResizerRect();
589 585
590 if (view_) { 586 if (view_) {
591 resize_params->new_size = view_->GetRequestedRendererSize(); 587 resize_params->new_size = view_->GetRequestedRendererSize();
592 resize_params->physical_backing_size = view_->GetPhysicalBackingSize(); 588 resize_params->physical_backing_size = view_->GetPhysicalBackingSize();
593 resize_params->top_controls_height = view_->GetTopControlsHeight(); 589 resize_params->top_controls_height = view_->GetTopControlsHeight();
594 resize_params->top_controls_shrink_blink_size = 590 resize_params->top_controls_shrink_blink_size =
595 view_->DoTopControlsShrinkBlinkSize(); 591 view_->DoTopControlsShrinkBlinkSize();
596 resize_params->visible_viewport_size = view_->GetVisibleViewportSize(); 592 resize_params->visible_viewport_size = view_->GetVisibleViewportSize();
597 resize_params->is_fullscreen_granted = IsFullscreenGranted(); 593 resize_params->is_fullscreen_granted = IsFullscreenGranted();
598 } 594 }
599 595
600 const bool size_changed = 596 const bool size_changed =
601 !old_resize_params_ || 597 !old_resize_params_ ||
602 old_resize_params_->new_size != resize_params->new_size || 598 old_resize_params_->new_size != resize_params->new_size ||
603 (old_resize_params_->physical_backing_size.IsEmpty() && 599 (old_resize_params_->physical_backing_size.IsEmpty() &&
604 !resize_params->physical_backing_size.IsEmpty()); 600 !resize_params->physical_backing_size.IsEmpty());
605 bool dirty = 601 bool dirty =
606 size_changed || screen_info_out_of_date_ || 602 size_changed ||
607 old_resize_params_->physical_backing_size != 603 old_resize_params_->physical_backing_size !=
608 resize_params->physical_backing_size || 604 resize_params->physical_backing_size ||
609 old_resize_params_->is_fullscreen_granted != 605 old_resize_params_->is_fullscreen_granted !=
610 resize_params->is_fullscreen_granted || 606 resize_params->is_fullscreen_granted ||
611 old_resize_params_->top_controls_height != 607 old_resize_params_->top_controls_height !=
612 resize_params->top_controls_height || 608 resize_params->top_controls_height ||
613 old_resize_params_->top_controls_shrink_blink_size != 609 old_resize_params_->top_controls_shrink_blink_size !=
614 resize_params->top_controls_shrink_blink_size || 610 resize_params->top_controls_shrink_blink_size ||
615 old_resize_params_->visible_viewport_size != 611 old_resize_params_->visible_viewport_size !=
616 resize_params->visible_viewport_size; 612 resize_params->visible_viewport_size;
617 613
618 // We don't expect to receive an ACK when the requested size or the physical 614 // We don't expect to receive an ACK when the requested size or the physical
619 // backing size is empty, or when the main viewport size didn't change. 615 // backing size is empty, or when the main viewport size didn't change.
620 resize_params->needs_resize_ack = 616 resize_params->needs_resize_ack =
621 g_check_for_pending_resize_ack && !resize_params->new_size.IsEmpty() && 617 g_check_for_pending_resize_ack && !resize_params->new_size.IsEmpty() &&
622 !resize_params->physical_backing_size.IsEmpty() && size_changed; 618 !resize_params->physical_backing_size.IsEmpty() && size_changed;
623 619
624 return dirty; 620 return dirty;
625 } 621 }
626 622
623 bool RenderWidgetHostImpl::UpdateScreenInfo() {
624 if (!screen_info_out_of_date_)
625 return false;
626
627 screen_info_.reset(new blink::WebScreenInfo);
628 GetWebScreenInfo(screen_info_.get());
629 screen_info_out_of_date_ = false;
630
631 return true;
632 }
633
627 void RenderWidgetHostImpl::SetInitialRenderSizeParams( 634 void RenderWidgetHostImpl::SetInitialRenderSizeParams(
628 const ViewMsg_Resize_Params& resize_params) { 635 const ViewMsg_Resize_Params& resize_params) {
629 resize_ack_pending_ = resize_params.needs_resize_ack; 636 resize_ack_pending_ = resize_params.needs_resize_ack;
630 637
631 old_resize_params_ = 638 old_resize_params_ =
632 make_scoped_ptr(new ViewMsg_Resize_Params(resize_params)); 639 make_scoped_ptr(new ViewMsg_Resize_Params(resize_params));
633 } 640 }
634 641
635 void RenderWidgetHostImpl::WasResized() { 642 void RenderWidgetHostImpl::WasResized() {
636 // Skip if the |delegate_| has already been detached because 643 // Skip if the |delegate_| has already been detached because
637 // it's web contents is being deleted. 644 // it's web contents is being deleted.
638 if (resize_ack_pending_ || !process_->HasConnection() || !view_ || 645 if (resize_ack_pending_ || !process_->HasConnection() || !view_ ||
639 !renderer_initialized_ || auto_resize_enabled_ || !delegate_) { 646 !renderer_initialized_ || auto_resize_enabled_ || !delegate_) {
640 return; 647 return;
641 } 648 }
642 649
650 bool screen_info_was_updated = UpdateScreenInfo();
643 scoped_ptr<ViewMsg_Resize_Params> params(new ViewMsg_Resize_Params); 651 scoped_ptr<ViewMsg_Resize_Params> params(new ViewMsg_Resize_Params);
644 if (!GetResizeParams(params.get())) 652 if (!GetResizeParams(params.get()) && !screen_info_was_updated)
645 return; 653 return;
646 654
647 bool width_changed = 655 bool width_changed =
648 !old_resize_params_ || 656 !old_resize_params_ ||
649 old_resize_params_->new_size.width() != params->new_size.width(); 657 old_resize_params_->new_size.width() != params->new_size.width();
650 if (Send(new ViewMsg_Resize(routing_id_, *params))) { 658 if (Send(new ViewMsg_Resize(routing_id_, *params))) {
651 resize_ack_pending_ = params->needs_resize_ack; 659 resize_ack_pending_ = params->needs_resize_ack;
652 old_resize_params_.swap(params); 660 old_resize_params_.swap(params);
653 } 661 }
654 662
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 } 1136 }
1129 } 1137 }
1130 } 1138 }
1131 1139
1132 void RenderWidgetHostImpl::GetWebScreenInfo(blink::WebScreenInfo* result) { 1140 void RenderWidgetHostImpl::GetWebScreenInfo(blink::WebScreenInfo* result) {
1133 TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::GetWebScreenInfo"); 1141 TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::GetWebScreenInfo");
1134 if (view_) 1142 if (view_)
1135 view_->GetScreenInfo(result); 1143 view_->GetScreenInfo(result);
1136 else 1144 else
1137 RenderWidgetHostViewBase::GetDefaultScreenInfo(result); 1145 RenderWidgetHostViewBase::GetDefaultScreenInfo(result);
1138 latency_tracker_.set_device_scale_factor(result->deviceScaleFactor); 1146 latency_tracker_.set_device_scale_factor(result->deviceScaleFactor);
no sievers 2015/04/15 18:17:00 This would also be nice to follow up on (maybe a T
mlamouri (slow - plz ping) 2015/04/16 14:56:42 TODO added.
1139 screen_info_out_of_date_ = false;
1140 } 1147 }
1141 1148
1142 const NativeWebKeyboardEvent* 1149 const NativeWebKeyboardEvent*
1143 RenderWidgetHostImpl::GetLastKeyboardEvent() const { 1150 RenderWidgetHostImpl::GetLastKeyboardEvent() const {
1144 return input_router_->GetLastKeyboardEvent(); 1151 return input_router_->GetLastKeyboardEvent();
1145 } 1152 }
1146 1153
1147 void RenderWidgetHostImpl::NotifyScreenInfoChanged() { 1154 void RenderWidgetHostImpl::NotifyScreenInfoChanged() {
1148 if (delegate_) 1155 if (delegate_)
1149 delegate_->ScreenInfoChanged(); 1156 delegate_->ScreenInfoChanged();
(...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after
2120 } 2127 }
2121 #endif 2128 #endif
2122 2129
2123 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() { 2130 SkColorType RenderWidgetHostImpl::PreferredReadbackFormat() {
2124 if (view_) 2131 if (view_)
2125 return view_->PreferredReadbackFormat(); 2132 return view_->PreferredReadbackFormat();
2126 return kN32_SkColorType; 2133 return kN32_SkColorType;
2127 } 2134 }
2128 2135
2129 } // namespace content 2136 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.h ('k') | content/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698