Chromium Code Reviews| 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/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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |