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 1520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1531 } | 1531 } |
1532 | 1532 |
1533 void Document::updateDistributionIfNeeded() | 1533 void Document::updateDistributionIfNeeded() |
1534 { | 1534 { |
1535 if (!childNeedsDistributionRecalc()) | 1535 if (!childNeedsDistributionRecalc()) |
1536 return; | 1536 return; |
1537 TRACE_EVENT0("webkit", "Document::recalcDistribution"); | 1537 TRACE_EVENT0("webkit", "Document::recalcDistribution"); |
1538 recalcDistribution(); | 1538 recalcDistribution(); |
1539 } | 1539 } |
1540 | 1540 |
| 1541 void Document::updateInvalidationIfNeeded() |
| 1542 { |
| 1543 if (!childNeedsInvalidation()) |
| 1544 return; |
| 1545 TRACE_EVENT0("webkit", "Document::recalcInvalidation"); |
| 1546 if (!styleResolver()) { |
| 1547 clearChildNeedsInvalidation(); |
| 1548 return; |
| 1549 } |
| 1550 |
| 1551 if (RuleSetAnalyzer* analyzer = styleResolver()->ensureRuleFeatureSet().getR
uleSetAnalyzer()) |
| 1552 analyzer->recalcInvalidation(this); |
| 1553 } |
| 1554 |
1541 void Document::updateDistributionForNodeIfNeeded(Node* node) | 1555 void Document::updateDistributionForNodeIfNeeded(Node* node) |
1542 { | 1556 { |
1543 if (node->inDocument()) { | 1557 if (node->inDocument()) { |
1544 updateDistributionIfNeeded(); | 1558 updateDistributionIfNeeded(); |
1545 return; | 1559 return; |
1546 } | 1560 } |
1547 Node* root = node; | 1561 Node* root = node; |
1548 while (Node* host = root->shadowHost()) | 1562 while (Node* host = root->shadowHost()) |
1549 root = host; | 1563 root = host; |
1550 while (Node* ancestor = root->parentOrShadowHostNode()) | 1564 while (Node* ancestor = root->parentOrShadowHostNode()) |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1610 if (style->direction() != rootDirection || style->writingMode() != r
ootWritingMode) | 1624 if (style->direction() != rootDirection || style->writingMode() != r
ootWritingMode) |
1611 body->setNeedsStyleRecalc(); | 1625 body->setNeedsStyleRecalc(); |
1612 } | 1626 } |
1613 } | 1627 } |
1614 | 1628 |
1615 if (RenderStyle* style = documentElement()->renderStyle()) { | 1629 if (RenderStyle* style = documentElement()->renderStyle()) { |
1616 if (style->direction() != rootDirection || style->writingMode() != rootW
ritingMode) | 1630 if (style->direction() != rootDirection || style->writingMode() != rootW
ritingMode) |
1617 documentElement()->setNeedsStyleRecalc(); | 1631 documentElement()->setNeedsStyleRecalc(); |
1618 } | 1632 } |
1619 } | 1633 } |
| 1634 static bool debug = false; |
1620 | 1635 |
1621 void Document::recalcStyle(StyleRecalcChange change) | 1636 void Document::recalcStyle(StyleRecalcChange change) |
1622 { | 1637 { |
1623 // we should not enter style recalc while painting | 1638 // we should not enter style recalc while painting |
1624 RELEASE_ASSERT(!view() || !view()->isPainting()); | 1639 RELEASE_ASSERT(!view() || !view()->isPainting()); |
| 1640 if (debug) |
| 1641 printf("----------------- Document::recalcStyle\n"); |
| 1642 // FIXME: We should never enter here without a FrameView or with an inactive
document. |
| 1643 if (!isActive() || !view()) { |
| 1644 if (debug) |
| 1645 printf("document::recalcstyle...not active or view?\n"); |
| 1646 return; |
| 1647 } |
1625 | 1648 |
1626 // FIXME: We should never enter here without a FrameView or with an inactive
document. | 1649 if (m_inStyleRecalc) { |
1627 if (!isActive() || !view()) | 1650 if (debug) |
| 1651 printf("document::recalcstyle...m_inStyleRecalc is true?\n"); |
1628 return; | 1652 return; |
1629 | 1653 } |
1630 if (m_inStyleRecalc) | |
1631 return; | |
1632 | 1654 |
1633 TRACE_EVENT0("webkit", "Document::recalcStyle"); | 1655 TRACE_EVENT0("webkit", "Document::recalcStyle"); |
1634 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "RecalcStyle"); | 1656 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "RecalcStyle"); |
1635 | 1657 |
| 1658 updateInvalidationIfNeeded(); |
| 1659 |
1636 updateDistributionIfNeeded(); | 1660 updateDistributionIfNeeded(); |
1637 | 1661 |
1638 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willRecalc
ulateStyle(this); | 1662 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willRecalc
ulateStyle(this); |
1639 | 1663 |
1640 if (m_evaluateMediaQueriesOnStyleRecalc) { | 1664 if (m_evaluateMediaQueriesOnStyleRecalc) { |
1641 m_evaluateMediaQueriesOnStyleRecalc = false; | 1665 m_evaluateMediaQueriesOnStyleRecalc = false; |
1642 evaluateMediaQueryList(); | 1666 evaluateMediaQueryList(); |
1643 } | 1667 } |
1644 | 1668 |
1645 // FIXME: We should update style on our ancestor chain before proceeding (es
pecially for seamless), | 1669 // FIXME: We should update style on our ancestor chain before proceeding (es
pecially for seamless), |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1714 } | 1738 } |
1715 } | 1739 } |
1716 | 1740 |
1717 InspectorInstrumentation::didRecalculateStyle(cookie); | 1741 InspectorInstrumentation::didRecalculateStyle(cookie); |
1718 | 1742 |
1719 // As a result of the style recalculation, the currently hovered element mig
ht have been | 1743 // As a result of the style recalculation, the currently hovered element mig
ht have been |
1720 // detached (for example, by setting display:none in the :hover style), sche
dule another mouseMove event | 1744 // detached (for example, by setting display:none in the :hover style), sche
dule another mouseMove event |
1721 // to check if any other elements ended up under the mouse pointer due to re
-layout. | 1745 // to check if any other elements ended up under the mouse pointer due to re
-layout. |
1722 if (hoverNode() && !hoverNode()->renderer() && frame()) | 1746 if (hoverNode() && !hoverNode()->renderer() && frame()) |
1723 frame()->eventHandler().dispatchFakeMouseMoveEventSoon(); | 1747 frame()->eventHandler().dispatchFakeMouseMoveEventSoon(); |
| 1748 if (debug) |
| 1749 printf("********************** Document::recalcStyle DONE\n\n"); |
1724 } | 1750 } |
1725 | 1751 |
| 1752 |
1726 void Document::updateStyleIfNeeded() | 1753 void Document::updateStyleIfNeeded() |
1727 { | 1754 { |
1728 ASSERT(isMainThread()); | 1755 ASSERT(isMainThread()); |
1729 ASSERT(!view() || (!view()->isInLayout() && !view()->isPainting())); | 1756 ASSERT(!view() || (!view()->isInLayout() && !view()->isPainting())); |
1730 | 1757 |
1731 if (!needsStyleRecalc() && !childNeedsStyleRecalc() && !childNeedsDistributi
onRecalc()) | 1758 // FIXME: unify this logic with shouldRecalcStyle() |
| 1759 if (!needsStyleRecalc() && !childNeedsStyleRecalc() && !childNeedsDistributi
onRecalc() && !childNeedsInvalidation()) |
1732 return; | 1760 return; |
1733 | 1761 |
1734 RefPtr<Frame> holder(m_frame); | 1762 RefPtr<Frame> holder(m_frame); |
1735 AnimationUpdateBlock animationUpdateBlock(m_frame ? &m_frame->animation() :
0); | 1763 AnimationUpdateBlock animationUpdateBlock(m_frame ? &m_frame->animation() :
0); |
1736 recalcStyle(NoChange); | 1764 recalcStyle(NoChange); |
1737 DocumentAnimations::serviceAfterStyleRecalc(*this); | 1765 DocumentAnimations::serviceAfterStyleRecalc(*this); |
1738 } | 1766 } |
1739 | 1767 |
1740 void Document::updateStyleForNodeIfNeeded(Node* node) | 1768 void Document::updateStyleForNodeIfNeeded(Node* node) |
1741 { | 1769 { |
1742 if (!hasPendingForcedStyleRecalc() && !childNeedsStyleRecalc() && !needsStyl
eRecalc()) | 1770 if (debug) |
| 1771 printf("Document::updateStyleForNodeIfNeeded\n"); |
| 1772 // FIXME: Why is this different than updateStyleIfNeeded??? |
| 1773 if (!hasPendingForcedStyleRecalc() && !childNeedsStyleRecalc() && !needsStyl
eRecalc() && !childNeedsInvalidation()) |
1743 return; | 1774 return; |
1744 | 1775 |
1745 bool needsStyleRecalc = hasPendingForcedStyleRecalc(); | 1776 bool needsStyleRecalc = hasPendingForcedStyleRecalc(); |
1746 for (Node* ancestor = node; ancestor && !needsStyleRecalc; ancestor = ancest
or->parentOrShadowHostNode()) | 1777 for (Node* ancestor = node; ancestor && !needsStyleRecalc; ancestor = ancest
or->parentOrShadowHostNode()) |
1747 needsStyleRecalc = ancestor->needsStyleRecalc(); | 1778 needsStyleRecalc = ancestor->needsStyleRecalc() || ancestor->needsInvali
dation(); |
1748 if (needsStyleRecalc) | 1779 if (needsStyleRecalc) { |
| 1780 if (debug) |
| 1781 printf("updateStyleForNodeIfNeeded calls updateStyleIfNeeded\n"); |
1749 updateStyleIfNeeded(); | 1782 updateStyleIfNeeded(); |
| 1783 } |
1750 } | 1784 } |
1751 | 1785 |
1752 void Document::updateLayout() | 1786 void Document::updateLayout() |
1753 { | 1787 { |
1754 ASSERT(isMainThread()); | 1788 ASSERT(isMainThread()); |
1755 | 1789 |
1756 RefPtr<FrameView> frameView = view(); | 1790 RefPtr<FrameView> frameView = view(); |
1757 if (frameView && frameView->isInLayout()) { | 1791 if (frameView && frameView->isInLayout()) { |
1758 // View layout should not be re-entrant. | 1792 // View layout should not be re-entrant. |
1759 ASSERT_NOT_REACHED(); | 1793 ASSERT_NOT_REACHED(); |
(...skipping 3488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5248 } | 5282 } |
5249 | 5283 |
5250 FastTextAutosizer* Document::fastTextAutosizer() | 5284 FastTextAutosizer* Document::fastTextAutosizer() |
5251 { | 5285 { |
5252 if (!m_fastTextAutosizer && RuntimeEnabledFeatures::fastTextAutosizingEnable
d()) | 5286 if (!m_fastTextAutosizer && RuntimeEnabledFeatures::fastTextAutosizingEnable
d()) |
5253 m_fastTextAutosizer = FastTextAutosizer::create(this); | 5287 m_fastTextAutosizer = FastTextAutosizer::create(this); |
5254 return m_fastTextAutosizer.get(); | 5288 return m_fastTextAutosizer.get(); |
5255 } | 5289 } |
5256 | 5290 |
5257 } // namespace WebCore | 5291 } // namespace WebCore |
OLD | NEW |