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

Side by Side Diff: third_party/WebKit/Source/web/WebViewImpl.cpp

Issue 2816873002: Update PaintLayer size during layout, not after.
Patch Set: s/UpdateICBAndViewportSize/ResizeFrameView/ Created 3 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
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp ('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 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 1887 matching lines...) Expand 10 before | Expand all | Expand 10 after
1898 bool browser_controls_shrink_layout) { 1898 bool browser_controls_shrink_layout) {
1899 DCHECK(MainFrameImpl()); 1899 DCHECK(MainFrameImpl());
1900 1900
1901 GetBrowserControls().SetHeight(browser_controls_height, 1901 GetBrowserControls().SetHeight(browser_controls_height,
1902 browser_controls_shrink_layout); 1902 browser_controls_shrink_layout);
1903 1903
1904 { 1904 {
1905 // Avoids unnecessary invalidations while various bits of state in 1905 // Avoids unnecessary invalidations while various bits of state in
1906 // TextAutosizer are updated. 1906 // TextAutosizer are updated.
1907 TextAutosizer::DeferUpdatePageInfo defer_update_page_info(GetPage()); 1907 TextAutosizer::DeferUpdatePageInfo defer_update_page_info(GetPage());
1908 FrameView* frame_view = MainFrameImpl()->GetFrameView();
1909 IntRect old_rect = frame_view->FrameRect();
1908 UpdateICBAndResizeViewport(); 1910 UpdateICBAndResizeViewport();
1911 IntRect new_rect = frame_view->FrameRect();
1912 frame_view->MarkViewportConstrainedObjectsForLayout(
1913 old_rect.Width() != new_rect.Width(),
1914 old_rect.Height() != new_rect.Height());
1909 } 1915 }
1910 1916
1911 fullscreen_controller_->UpdateSize(); 1917 fullscreen_controller_->UpdateSize();
1912 1918
1913 // Update lifecyle phases immediately to recalculate the minimum scale limit 1919 // Update lifecyle phases immediately to recalculate the minimum scale limit
1914 // for rotation anchoring, and to make sure that no lifecycle states are 1920 // for rotation anchoring, and to make sure that no lifecycle states are
1915 // stale if this WebView is embedded in another one. 1921 // stale if this WebView is embedded in another one.
1916 UpdateAllLifecyclePhases(); 1922 UpdateAllLifecyclePhases();
1917 } 1923 }
1918 1924
(...skipping 1240 matching lines...) Expand 10 before | Expand all | Expand 10 after
3159 float new_page_scale_factor = PageScaleFactor(); 3165 float new_page_scale_factor = PageScaleFactor();
3160 if (GetPageScaleConstraintsSet().NeedsReset() && 3166 if (GetPageScaleConstraintsSet().NeedsReset() &&
3161 GetPageScaleConstraintsSet().FinalConstraints().initial_scale != -1) { 3167 GetPageScaleConstraintsSet().FinalConstraints().initial_scale != -1) {
3162 new_page_scale_factor = 3168 new_page_scale_factor =
3163 GetPageScaleConstraintsSet().FinalConstraints().initial_scale; 3169 GetPageScaleConstraintsSet().FinalConstraints().initial_scale;
3164 GetPageScaleConstraintsSet().SetNeedsReset(false); 3170 GetPageScaleConstraintsSet().SetNeedsReset(false);
3165 } 3171 }
3166 SetPageScaleFactor(new_page_scale_factor); 3172 SetPageScaleFactor(new_page_scale_factor);
3167 3173
3168 UpdateLayerTreeViewport(); 3174 UpdateLayerTreeViewport();
3169
3170 // Changes to page-scale during layout may require an additional frame.
3171 // We can't update the lifecycle here because we may be in the middle of
3172 // layout in the caller of this method.
3173 // TODO(chrishtr): clean all this up. All layout should happen in one
3174 // lifecycle run (crbug.com/578239).
3175 if (MainFrameImpl()->GetFrameView()->NeedsLayout())
3176 MainFrameImpl()->FrameWidget()->ScheduleAnimation();
3177 } 3175 }
3178 3176
3179 void WebViewImpl::UpdatePageDefinedViewportConstraints( 3177 void WebViewImpl::UpdatePageDefinedViewportConstraints(
3180 const ViewportDescription& description) { 3178 const ViewportDescription& description) {
3181 if (!GetPage() || (!size_.width && !size_.height) || 3179 if (!GetPage() || (!size_.width && !size_.height) ||
3182 !GetPage()->MainFrame()->IsLocalFrame()) 3180 !GetPage()->MainFrame()->IsLocalFrame())
3183 return; 3181 return;
3184 3182
3185 if (!GetSettings()->ViewportEnabled()) { 3183 if (!GetSettings()->ViewportEnabled()) {
3186 GetPageScaleConstraintsSet().ClearPageDefinedConstraints(); 3184 GetPageScaleConstraintsSet().ClearPageDefinedConstraints();
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
3655 3653
3656 // Give the visual viewport's scroll layer its initial size. 3654 // Give the visual viewport's scroll layer its initial size.
3657 GetPage()->GetVisualViewport().MainFrameDidChangeSize(); 3655 GetPage()->GetVisualViewport().MainFrameDidChangeSize();
3658 3656
3659 // Make sure link highlight from previous page is cleared. 3657 // Make sure link highlight from previous page is cleared.
3660 link_highlights_.clear(); 3658 link_highlights_.clear();
3661 EndActiveFlingAnimation(); 3659 EndActiveFlingAnimation();
3662 } 3660 }
3663 3661
3664 void WebViewImpl::ResizeFrameView(WebLocalFrameImpl* webframe) { 3662 void WebViewImpl::ResizeFrameView(WebLocalFrameImpl* webframe) {
3665 FrameView* view = webframe->GetFrame()->View();
3666 if (webframe == MainFrame()) 3663 if (webframe == MainFrame())
3667 resize_viewport_anchor_->ResizeFrameView(MainFrameSize()); 3664 resize_viewport_anchor_->ResizeFrameView(MainFrameSize());
3668 else
3669 view->Resize(webframe->GetFrameView()->Size());
3670 } 3665 }
3671 3666
3672 void WebViewImpl::ResizeAfterLayout(WebLocalFrameImpl* webframe) { 3667 void WebViewImpl::ResizeAfterLayout(WebLocalFrameImpl* webframe) {
3673 LocalFrame* frame = webframe->GetFrame(); 3668 LocalFrame* frame = webframe->GetFrame();
3674 if (!client_ || !client_->CanUpdateLayout() || !frame->IsMainFrame()) 3669 if (!client_ || !client_->CanUpdateLayout() || !frame->IsMainFrame())
3675 return; 3670 return;
3676 3671
3677 if (should_auto_resize_) { 3672 if (should_auto_resize_) {
3678 WebSize frame_size = frame->View()->FrameRect().Size(); 3673 WebSize frame_size = frame->View()->FrameRect().Size();
3679 if (frame_size != size_) { 3674 if (frame_size != size_) {
3680 size_ = frame_size; 3675 size_ = frame_size;
3681 3676
3682 GetPage()->GetVisualViewport().SetSize(size_); 3677 GetPage()->GetVisualViewport().SetSize(size_);
3683 GetPageScaleConstraintsSet().DidChangeInitialContainingBlockSize(size_); 3678 GetPageScaleConstraintsSet().DidChangeInitialContainingBlockSize(size_);
3684 frame->View()->SetInitialViewportSize(size_); 3679 frame->View()->SetInitialViewportSize(size_);
3685 3680
3686 client_->DidAutoResize(size_); 3681 client_->DidAutoResize(size_);
3687 SendResizeEventAndRepaint(); 3682 SendResizeEventAndRepaint();
3688 } 3683 }
3689 } 3684 }
3690 3685
3691 if (GetPageScaleConstraintsSet().ConstraintsDirty()) 3686 if (GetPageScaleConstraintsSet().ConstraintsDirty())
3692 RefreshPageScaleFactorAfterLayout(); 3687 RefreshPageScaleFactorAfterLayout();
3693 3688
3694 UpdateICBAndResizeViewport(); 3689 ResizeFrameView(webframe);
3695 } 3690 }
3696 3691
3697 void WebViewImpl::LayoutUpdated(WebLocalFrameImpl* webframe) { 3692 void WebViewImpl::LayoutUpdated(WebLocalFrameImpl* webframe) {
3698 LocalFrame* frame = webframe->GetFrame(); 3693 LocalFrame* frame = webframe->GetFrame();
3699 if (!client_ || !client_->CanUpdateLayout() || !frame->IsMainFrame()) 3694 if (!client_ || !frame->IsLocalRoot())
3700 return; 3695 return;
3701
3702 ResizeAfterLayout(webframe);
3703
3704 // Relayout immediately to avoid violating the rule that needsLayout() 3696 // Relayout immediately to avoid violating the rule that needsLayout()
3705 // isn't set at the end of a layout. 3697 // isn't set at the end of a layout.
3706 FrameView* view = frame->View(); 3698 FrameView* view = frame->View();
3707 if (view->NeedsLayout()) 3699 if (view->NeedsLayout())
3708 view->UpdateLayout(); 3700 view->UpdateLayout();
3709 3701
3710 UpdatePageOverlays(); 3702 UpdatePageOverlays();
3711 3703
3712 fullscreen_controller_->DidUpdateLayout(); 3704 fullscreen_controller_->DidUpdateLayout();
3713 client_->DidUpdateLayout(); 3705 client_->DidUpdateLayout();
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
4180 if (focused_frame->LocalFrameRoot() != MainFrameImpl()->GetFrame()) 4172 if (focused_frame->LocalFrameRoot() != MainFrameImpl()->GetFrame())
4181 return nullptr; 4173 return nullptr;
4182 return focused_frame; 4174 return focused_frame;
4183 } 4175 }
4184 4176
4185 LocalFrame* WebViewImpl::FocusedLocalFrameAvailableForIme() const { 4177 LocalFrame* WebViewImpl::FocusedLocalFrameAvailableForIme() const {
4186 return ime_accept_events_ ? FocusedLocalFrameInWidget() : nullptr; 4178 return ime_accept_events_ ? FocusedLocalFrameInWidget() : nullptr;
4187 } 4179 }
4188 4180
4189 } // namespace blink 4181 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698