OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. |
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) |
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
(...skipping 1510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1521 { | 1521 { |
1522 if (!root) { | 1522 if (!root) { |
1523 exceptionState.throwDOMException(NotSupportedError, "The provided node i s invalid."); | 1523 exceptionState.throwDOMException(NotSupportedError, "The provided node i s invalid."); |
1524 return 0; | 1524 return 0; |
1525 } | 1525 } |
1526 return TreeWalker::create(root, whatToShow, filter); | 1526 return TreeWalker::create(root, whatToShow, filter); |
1527 } | 1527 } |
1528 | 1528 |
1529 bool Document::shouldCallRecalcStyleForDocument() | 1529 bool Document::shouldCallRecalcStyleForDocument() |
1530 { | 1530 { |
1531 return needsStyleRecalc() || childNeedsStyleRecalc() || childNeedsDistributi onRecalc() || !m_useElementsNeedingUpdate.isEmpty(); | 1531 return needsStyleRecalc() || childNeedsStyleRecalc() || childNeedsDistributi onRecalc() || !m_useElementsNeedingUpdate.isEmpty() || childNeedsStyleInvalidati on(); |
1532 } | 1532 } |
1533 | 1533 |
1534 void Document::scheduleStyleRecalc() | 1534 void Document::scheduleStyleRecalc() |
1535 { | 1535 { |
1536 if (!isActive()) | 1536 if (!isActive()) |
1537 return; | 1537 return; |
1538 | 1538 |
1539 if (m_styleRecalcTimer.isActive() || !shouldScheduleLayout()) | 1539 if (m_styleRecalcTimer.isActive() || !shouldScheduleLayout()) |
1540 return; | 1540 return; |
1541 | 1541 |
(...skipping 21 matching lines...) Expand all Loading... | |
1563 } | 1563 } |
1564 | 1564 |
1565 void Document::updateDistributionIfNeeded() | 1565 void Document::updateDistributionIfNeeded() |
1566 { | 1566 { |
1567 if (!childNeedsDistributionRecalc()) | 1567 if (!childNeedsDistributionRecalc()) |
1568 return; | 1568 return; |
1569 TRACE_EVENT0("webkit", "Document::recalcDistribution"); | 1569 TRACE_EVENT0("webkit", "Document::recalcDistribution"); |
1570 recalcDistribution(); | 1570 recalcDistribution(); |
1571 } | 1571 } |
1572 | 1572 |
1573 void Document::updateStyleInvalidationIfNeeded() | |
1574 { | |
1575 if (!childNeedsStyleInvalidation()) | |
1576 return; | |
1577 TRACE_EVENT0("webkit", "Document::computeNeedsStyleRecalcState"); | |
1578 if (!styleResolver()) { | |
1579 clearChildNeedsStyleInvalidation(); | |
ojan
2014/01/29 00:50:07
I think we still need to do the style invalidation
chrishtr
2014/01/29 01:56:42
The style invalidation data structure lives in the
ojan
2014/01/29 02:00:25
I see. Yeah, it seems like we have to block turnin
chrishtr
2014/01/29 02:02:32
Yes. My plan is to try to land the change that rem
| |
1580 return; | |
1581 } | |
1582 | |
1583 // FIXME: the style resolver can be deleted at present. Either resolve | |
1584 // crbug.com/335964 or move the invalidation data elsewhere. | |
ojan
2014/01/29 00:50:07
You can use use ensureStyleResolver(). I don't see
chrishtr
2014/01/29 01:56:42
See above.
| |
1585 styleResolver()->ensureRuleFeatureSet().computeStyleInvalidation(*this); | |
1586 } | |
1587 | |
1573 void Document::updateDistributionForNodeIfNeeded(Node* node) | 1588 void Document::updateDistributionForNodeIfNeeded(Node* node) |
1574 { | 1589 { |
1575 if (node->inDocument()) { | 1590 if (node->inDocument()) { |
1576 updateDistributionIfNeeded(); | 1591 updateDistributionIfNeeded(); |
1577 return; | 1592 return; |
1578 } | 1593 } |
1579 Node* root = node; | 1594 Node* root = node; |
1580 while (Node* host = root->shadowHost()) | 1595 while (Node* host = root->shadowHost()) |
1581 root = host; | 1596 root = host; |
1582 while (Node* ancestor = root->parentOrShadowHostNode()) | 1597 while (Node* ancestor = root->parentOrShadowHostNode()) |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1651 body->setNeedsStyleRecalc(); | 1666 body->setNeedsStyleRecalc(); |
1652 } | 1667 } |
1653 } | 1668 } |
1654 | 1669 |
1655 if (RenderStyle* style = documentElement()->renderStyle()) { | 1670 if (RenderStyle* style = documentElement()->renderStyle()) { |
1656 if (style->direction() != rootDirection || style->writingMode() != rootW ritingMode) | 1671 if (style->direction() != rootDirection || style->writingMode() != rootW ritingMode) |
1657 documentElement()->setNeedsStyleRecalc(); | 1672 documentElement()->setNeedsStyleRecalc(); |
1658 } | 1673 } |
1659 } | 1674 } |
1660 | 1675 |
1676 // FIXME: need a better name than recalcStyle. It's performing style invalidatio n, style recalc, and distribution. | |
1661 void Document::recalcStyle(StyleRecalcChange change) | 1677 void Document::recalcStyle(StyleRecalcChange change) |
1662 { | 1678 { |
1663 // we should not enter style recalc while painting | 1679 // we should not enter style recalc while painting |
1664 RELEASE_ASSERT(!view() || !view()->isPainting()); | 1680 RELEASE_ASSERT(!view() || !view()->isPainting()); |
1665 | 1681 |
1666 // FIXME: We should never enter here without a FrameView or with an inactive document. | 1682 // FIXME: We should never enter here without a FrameView or with an inactive document. |
1667 if (!isActive() || !view()) | 1683 if (!isActive() || !view()) |
1668 return; | 1684 return; |
1669 | 1685 |
1670 if (m_inStyleRecalc) | 1686 if (m_inStyleRecalc) |
1671 return; | 1687 return; |
1672 | 1688 |
1673 TRACE_EVENT0("webkit", "Document::recalcStyle"); | 1689 TRACE_EVENT0("webkit", "Document::recalcStyle"); |
1674 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "RecalcStyle"); | 1690 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "RecalcStyle"); |
1675 | 1691 |
1676 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willRecalc ulateStyle(this); | 1692 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willRecalc ulateStyle(this); |
1677 | 1693 |
1678 updateDistributionIfNeeded(); | 1694 updateDistributionIfNeeded(); |
1679 updateUseShadowTrees(); | 1695 updateUseShadowTrees(); |
1696 updateStyleInvalidationIfNeeded(); | |
1680 | 1697 |
1681 if (m_evaluateMediaQueriesOnStyleRecalc) { | 1698 if (m_evaluateMediaQueriesOnStyleRecalc) { |
1682 m_evaluateMediaQueriesOnStyleRecalc = false; | 1699 m_evaluateMediaQueriesOnStyleRecalc = false; |
1683 evaluateMediaQueryList(); | 1700 evaluateMediaQueryList(); |
1684 } | 1701 } |
1685 | 1702 |
1686 // FIXME: We should update style on our ancestor chain before proceeding | 1703 // FIXME: We should update style on our ancestor chain before proceeding |
1687 // however doing so currently causes several tests to crash, as Frame::setDo cument calls Document::attach | 1704 // however doing so currently causes several tests to crash, as Frame::setDo cument calls Document::attach |
1688 // before setting the DOMWindow on the Frame, or the SecurityOrigin on the d ocument. The attach, in turn | 1705 // before setting the DOMWindow on the Frame, or the SecurityOrigin on the d ocument. The attach, in turn |
1689 // resolves style (here) and then when we resolve style on the parent chain, we may end up | 1706 // resolves style (here) and then when we resolve style on the parent chain, we may end up |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1772 void Document::updateStyleForNodeIfNeeded(Node* node) | 1789 void Document::updateStyleForNodeIfNeeded(Node* node) |
1773 { | 1790 { |
1774 if (!shouldCallRecalcStyleForDocument()) | 1791 if (!shouldCallRecalcStyleForDocument()) |
1775 return; | 1792 return; |
1776 | 1793 |
1777 // At this point, we know that we need to recalc some style on the document in order to fully update styles. | 1794 // At this point, we know that we need to recalc some style on the document in order to fully update styles. |
1778 // However, style on 'node' only needs to be recalculated if a global recomp utation is needed, or a node on | 1795 // However, style on 'node' only needs to be recalculated if a global recomp utation is needed, or a node on |
1779 // the path from 'node' to the root needs style recalc. | 1796 // the path from 'node' to the root needs style recalc. |
1780 | 1797 |
1781 // Global needed. | 1798 // Global needed. |
1782 bool needsRecalc = needsStyleRecalc() || childNeedsDistributionRecalc() || ! m_useElementsNeedingUpdate.isEmpty(); | 1799 bool needsRecalc = needsStyleRecalc() || childNeedsDistributionRecalc() || ! m_useElementsNeedingUpdate.isEmpty() || childNeedsStyleInvalidation(); |
1783 | 1800 |
1784 // On the path. | 1801 // On the path. |
1785 for (Node* ancestor = node; ancestor && !needsRecalc; ancestor = ancestor->p arentOrShadowHostNode()) | 1802 for (Node* ancestor = node; ancestor && !needsRecalc; ancestor = ancestor->p arentOrShadowHostNode()) |
1786 needsRecalc = ancestor->needsStyleRecalc(); | 1803 needsRecalc = ancestor->needsStyleRecalc(); |
1787 if (needsRecalc) | 1804 if (needsRecalc) |
1788 updateStyleIfNeeded(); | 1805 updateStyleIfNeeded(); |
1789 } | 1806 } |
1790 | 1807 |
1791 void Document::updateLayout() | 1808 void Document::updateLayout() |
1792 { | 1809 { |
(...skipping 3526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5319 if (!page->focusController().isActive() || !page->focusController().isFocuse d()) | 5336 if (!page->focusController().isActive() || !page->focusController().isFocuse d()) |
5320 return false; | 5337 return false; |
5321 if (Frame* focusedFrame = page->focusController().focusedFrame()) { | 5338 if (Frame* focusedFrame = page->focusController().focusedFrame()) { |
5322 if (focusedFrame->tree().isDescendantOf(frame())) | 5339 if (focusedFrame->tree().isDescendantOf(frame())) |
5323 return true; | 5340 return true; |
5324 } | 5341 } |
5325 return false; | 5342 return false; |
5326 } | 5343 } |
5327 | 5344 |
5328 } // namespace WebCore | 5345 } // namespace WebCore |
OLD | NEW |