OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
5 * 2000 Dirk Mueller <mueller@kde.org> | 5 * 2000 Dirk Mueller <mueller@kde.org> |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
9 * Copyright (C) 2009 Google Inc. All rights reserved. | 9 * Copyright (C) 2009 Google Inc. All rights reserved. |
10 * | 10 * |
(...skipping 4735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4746 continue; | 4746 continue; |
4747 if (FrameView* view = toLocalFrame(child)->view()) | 4747 if (FrameView* view = toLocalFrame(child)->view()) |
4748 view->updateViewportIntersectionsForSubtree(targetState); | 4748 view->updateViewportIntersectionsForSubtree(targetState); |
4749 } | 4749 } |
4750 } | 4750 } |
4751 | 4751 |
4752 void FrameView::updateRenderThrottlingStatusForTesting() { | 4752 void FrameView::updateRenderThrottlingStatusForTesting() { |
4753 m_visibilityObserver->deliverObservationsForTesting(); | 4753 m_visibilityObserver->deliverObservationsForTesting(); |
4754 } | 4754 } |
4755 | 4755 |
| 4756 void FrameView::crossOriginStatusChanged() { |
| 4757 // Cross-domain status is not stored as a dirty bit within FrameView, |
| 4758 // so force-invalidate throttling status when it changes regardless of |
| 4759 // previous or new value. |
| 4760 updateRenderThrottlingStatus(m_hiddenForThrottling, m_subtreeThrottled, true); |
| 4761 } |
| 4762 |
4756 void FrameView::updateRenderThrottlingStatus(bool hidden, | 4763 void FrameView::updateRenderThrottlingStatus(bool hidden, |
4757 bool subtreeThrottled) { | 4764 bool subtreeThrottled, |
| 4765 bool forceThrottlingInvalidation) { |
4758 TRACE_EVENT0("blink", "FrameView::updateRenderThrottlingStatus"); | 4766 TRACE_EVENT0("blink", "FrameView::updateRenderThrottlingStatus"); |
4759 DCHECK(!isInPerformLayout()); | 4767 DCHECK(!isInPerformLayout()); |
4760 DCHECK(!m_frame->document() || !m_frame->document()->inStyleRecalc()); | 4768 DCHECK(!m_frame->document() || !m_frame->document()->inStyleRecalc()); |
4761 bool wasThrottled = canThrottleRendering(); | 4769 bool wasThrottled = canThrottleRendering(); |
4762 | 4770 |
4763 // Note that we disallow throttling of 0x0 and display:none frames because | 4771 // Note that we disallow throttling of 0x0 and display:none frames because |
4764 // some sites use them to drive UI logic. | 4772 // some sites use them to drive UI logic. |
4765 HTMLFrameOwnerElement* ownerElement = m_frame->deprecatedLocalOwner(); | 4773 HTMLFrameOwnerElement* ownerElement = m_frame->deprecatedLocalOwner(); |
4766 m_hiddenForThrottling = hidden && !frameRect().isEmpty() && | 4774 m_hiddenForThrottling = hidden && !frameRect().isEmpty() && |
4767 (ownerElement && ownerElement->layoutObject()); | 4775 (ownerElement && ownerElement->layoutObject()); |
4768 m_subtreeThrottled = subtreeThrottled; | 4776 m_subtreeThrottled = subtreeThrottled; |
4769 | 4777 |
4770 bool isThrottled = canThrottleRendering(); | 4778 bool isThrottled = canThrottleRendering(); |
4771 bool becameUnthrottled = wasThrottled && !isThrottled; | 4779 bool becameUnthrottled = wasThrottled && !isThrottled; |
4772 | 4780 |
4773 // If this FrameView became unthrottled or throttled, we must make sure all | 4781 // If this FrameView became unthrottled or throttled, we must make sure all |
4774 // its children are notified synchronously. Otherwise we 1) might attempt to | 4782 // its children are notified synchronously. Otherwise we 1) might attempt to |
4775 // paint one of the children with an out-of-date layout before | 4783 // paint one of the children with an out-of-date layout before |
4776 // |updateRenderThrottlingStatus| has made it throttled or 2) fail to | 4784 // |updateRenderThrottlingStatus| has made it throttled or 2) fail to |
4777 // unthrottle a child whose parent is unthrottled by a later notification. | 4785 // unthrottle a child whose parent is unthrottled by a later notification. |
4778 if (wasThrottled != isThrottled) { | 4786 if (wasThrottled != isThrottled || forceThrottlingInvalidation) { |
4779 for (const Member<Widget>& child : *children()) { | 4787 for (const Member<Widget>& child : *children()) { |
4780 if (child->isFrameView()) { | 4788 if (child->isFrameView()) { |
4781 FrameView* childView = toFrameView(child); | 4789 FrameView* childView = toFrameView(child); |
4782 childView->updateRenderThrottlingStatus( | 4790 childView->updateRenderThrottlingStatus( |
4783 childView->m_hiddenForThrottling, isThrottled); | 4791 childView->m_hiddenForThrottling, isThrottled); |
4784 } | 4792 } |
4785 } | 4793 } |
4786 } | 4794 } |
4787 | 4795 |
4788 ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator(); | 4796 ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator(); |
4789 if (becameUnthrottled) { | 4797 if (becameUnthrottled || forceThrottlingInvalidation) { |
4790 // ScrollingCoordinator needs to update according to the new throttling | 4798 // ScrollingCoordinator needs to update according to the new throttling |
4791 // status. | 4799 // status. |
4792 if (scrollingCoordinator) | 4800 if (scrollingCoordinator) |
4793 scrollingCoordinator->notifyGeometryChanged(); | 4801 scrollingCoordinator->notifyGeometryChanged(); |
4794 // Start ticking animation frames again if necessary. | 4802 // Start ticking animation frames again if necessary. |
4795 if (page()) | 4803 if (page()) |
4796 page()->animator().scheduleVisualUpdate(m_frame.get()); | 4804 page()->animator().scheduleVisualUpdate(m_frame.get()); |
4797 // Force a full repaint of this frame to ensure we are not left with a | 4805 // Force a full repaint of this frame to ensure we are not left with a |
4798 // partially painted version of this frame's contents if we skipped | 4806 // partially painted version of this frame's contents if we skipped |
4799 // painting them while the frame was throttled. | 4807 // painting them while the frame was throttled. |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5173 void FrameView::setAnimationHost( | 5181 void FrameView::setAnimationHost( |
5174 std::unique_ptr<CompositorAnimationHost> host) { | 5182 std::unique_ptr<CompositorAnimationHost> host) { |
5175 m_animationHost = std::move(host); | 5183 m_animationHost = std::move(host); |
5176 } | 5184 } |
5177 | 5185 |
5178 LayoutUnit FrameView::caretWidth() const { | 5186 LayoutUnit FrameView::caretWidth() const { |
5179 return LayoutUnit(getHostWindow()->windowToViewportScalar(1)); | 5187 return LayoutUnit(getHostWindow()->windowToViewportScalar(1)); |
5180 } | 5188 } |
5181 | 5189 |
5182 } // namespace blink | 5190 } // namespace blink |
OLD | NEW |