Chromium Code Reviews| 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 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 458 , m_containsValidityStyleRules(false) | 458 , m_containsValidityStyleRules(false) |
| 459 , m_updateFocusAppearanceRestoresSelection(false) | 459 , m_updateFocusAppearanceRestoresSelection(false) |
| 460 , m_containsPlugins(false) | 460 , m_containsPlugins(false) |
| 461 , m_ignoreDestructiveWriteCount(0) | 461 , m_ignoreDestructiveWriteCount(0) |
| 462 , m_titleSetExplicitly(false) | 462 , m_titleSetExplicitly(false) |
| 463 , m_markers(adoptPtr(new DocumentMarkerController)) | 463 , m_markers(adoptPtr(new DocumentMarkerController)) |
| 464 , m_updateFocusAppearanceTimer(this, &Document::updateFocusAppearanceTimerFi red) | 464 , m_updateFocusAppearanceTimer(this, &Document::updateFocusAppearanceTimerFi red) |
| 465 , m_cssTarget(0) | 465 , m_cssTarget(0) |
| 466 , m_loadEventProgress(LoadEventNotRun) | 466 , m_loadEventProgress(LoadEventNotRun) |
| 467 , m_startTime(currentTime()) | 467 , m_startTime(currentTime()) |
| 468 , m_overMinimumLayoutThreshold(false) | |
|
ojan
2014/02/06 05:11:39
Should probably remove this in a separate pre-patc
abarth-chromium
2014/02/06 05:31:15
Yep!
| |
| 469 , m_scriptRunner(ScriptRunner::create(this)) | 468 , m_scriptRunner(ScriptRunner::create(this)) |
| 470 , m_xmlVersion("1.0") | 469 , m_xmlVersion("1.0") |
| 471 , m_xmlStandalone(StandaloneUnspecified) | 470 , m_xmlStandalone(StandaloneUnspecified) |
| 472 , m_hasXMLDeclaration(0) | 471 , m_hasXMLDeclaration(0) |
| 473 , m_designMode(inherit) | 472 , m_designMode(inherit) |
| 474 , m_hasAnnotatedRegions(false) | 473 , m_hasAnnotatedRegions(false) |
| 475 , m_annotatedRegionsDirty(false) | 474 , m_annotatedRegionsDirty(false) |
| 476 , m_useSecureKeyboardEntryWhenActive(false) | 475 , m_useSecureKeyboardEntryWhenActive(false) |
| 477 , m_documentClasses(documentClasses) | 476 , m_documentClasses(documentClasses) |
| 478 , m_isViewSource(false) | 477 , m_isViewSource(false) |
| (...skipping 1093 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1572 return 0; | 1571 return 0; |
| 1573 } | 1572 } |
| 1574 return TreeWalker::create(root, whatToShow, filter); | 1573 return TreeWalker::create(root, whatToShow, filter); |
| 1575 } | 1574 } |
| 1576 | 1575 |
| 1577 bool Document::shouldCallRecalcStyleForDocument() | 1576 bool Document::shouldCallRecalcStyleForDocument() |
| 1578 { | 1577 { |
| 1579 return needsStyleRecalc() || childNeedsStyleRecalc() || childNeedsDistributi onRecalc() || !m_useElementsNeedingUpdate.isEmpty() || childNeedsStyleInvalidati on(); | 1578 return needsStyleRecalc() || childNeedsStyleRecalc() || childNeedsDistributi onRecalc() || !m_useElementsNeedingUpdate.isEmpty() || childNeedsStyleInvalidati on(); |
| 1580 } | 1579 } |
| 1581 | 1580 |
| 1581 bool Document::shouldScheduleStyleRecalc() | |
| 1582 { | |
| 1583 if (!isActive()) | |
| 1584 return false; | |
| 1585 if (hasPendingStyleRecalc()) | |
| 1586 return false; | |
| 1587 if (inStyleRecalc()) | |
| 1588 return false; | |
| 1589 // InPreLayout will recalc style itself. There's no reason to schedule anoth er recalc. | |
| 1590 if (m_lifecycle.state() == DocumentLifecycle::InPreLayout) | |
| 1591 return false; | |
| 1592 return true; | |
| 1593 } | |
| 1594 | |
| 1582 void Document::scheduleStyleRecalc() | 1595 void Document::scheduleStyleRecalc() |
| 1583 { | 1596 { |
| 1584 if (hasPendingStyleRecalc() || !isActive() || inStyleRecalc() || !shouldSche duleLayout()) | 1597 if (!shouldScheduleStyleRecalc() || !shouldScheduleLayout()) |
| 1585 return; | 1598 return; |
| 1586 | 1599 |
| 1587 ASSERT(shouldCallRecalcStyleForDocument()); | 1600 ASSERT(shouldCallRecalcStyleForDocument()); |
| 1588 | 1601 |
| 1589 view()->scheduleAnimation(); | 1602 view()->scheduleAnimation(); |
| 1590 m_lifecycle.rewindTo(DocumentLifecycle::StyleRecalcPending); | 1603 m_lifecycle.rewindTo(DocumentLifecycle::StyleRecalcPending); |
| 1591 | 1604 |
| 1592 InspectorInstrumentation::didScheduleStyleRecalculation(this); | 1605 InspectorInstrumentation::didScheduleStyleRecalculation(this); |
| 1593 } | 1606 } |
| 1594 | 1607 |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1792 if (m_styleEngine->hasResolver()) { | 1805 if (m_styleEngine->hasResolver()) { |
| 1793 // Pseudo element removal and similar may only work with these flags still set. Reset them after the style recalc. | 1806 // Pseudo element removal and similar may only work with these flags still set. Reset them after the style recalc. |
| 1794 StyleResolver& resolver = m_styleEngine->ensureResolver(); | 1807 StyleResolver& resolver = m_styleEngine->ensureResolver(); |
| 1795 m_styleEngine->resetCSSFeatureFlags(resolver.ensureRuleFeatureSet()) ; | 1808 m_styleEngine->resetCSSFeatureFlags(resolver.ensureRuleFeatureSet()) ; |
| 1796 resolver.clearStyleSharingList(); | 1809 resolver.clearStyleSharingList(); |
| 1797 } | 1810 } |
| 1798 | 1811 |
| 1799 ASSERT(!needsStyleRecalc()); | 1812 ASSERT(!needsStyleRecalc()); |
| 1800 ASSERT(!childNeedsStyleRecalc()); | 1813 ASSERT(!childNeedsStyleRecalc()); |
| 1801 ASSERT(inStyleRecalc()); | 1814 ASSERT(inStyleRecalc()); |
| 1802 m_lifecycle.advanceTo(DocumentLifecycle::Clean); | 1815 m_lifecycle.advanceTo(DocumentLifecycle::StyleClean); |
| 1803 } | 1816 } |
| 1804 | 1817 |
| 1805 InspectorInstrumentation::didRecalculateStyle(cookie); | 1818 InspectorInstrumentation::didRecalculateStyle(cookie); |
| 1806 | 1819 |
| 1807 // As a result of the style recalculation, the currently hovered element mig ht have been | 1820 // As a result of the style recalculation, the currently hovered element mig ht have been |
| 1808 // detached (for example, by setting display:none in the :hover style), sche dule another mouseMove event | 1821 // detached (for example, by setting display:none in the :hover style), sche dule another mouseMove event |
| 1809 // to check if any other elements ended up under the mouse pointer due to re -layout. | 1822 // to check if any other elements ended up under the mouse pointer due to re -layout. |
| 1810 if (hoverNode() && !hoverNode()->renderer() && frame()) | 1823 if (hoverNode() && !hoverNode()->renderer() && frame()) |
| 1811 frame()->eventHandler().dispatchFakeMouseMoveEventSoon(); | 1824 frame()->eventHandler().dispatchFakeMouseMoveEventSoon(); |
| 1812 } | 1825 } |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2064 | 2077 |
| 2065 m_renderView = new RenderView(this); | 2078 m_renderView = new RenderView(this); |
| 2066 setRenderer(m_renderView); | 2079 setRenderer(m_renderView); |
| 2067 | 2080 |
| 2068 m_renderView->setIsInWindow(true); | 2081 m_renderView->setIsInWindow(true); |
| 2069 m_renderView->setStyle(StyleResolver::styleForDocument(*this)); | 2082 m_renderView->setStyle(StyleResolver::styleForDocument(*this)); |
| 2070 view()->updateCompositingLayersAfterStyleChange(); | 2083 view()->updateCompositingLayersAfterStyleChange(); |
| 2071 | 2084 |
| 2072 ContainerNode::attach(context); | 2085 ContainerNode::attach(context); |
| 2073 | 2086 |
| 2074 m_lifecycle.advanceTo(DocumentLifecycle::Clean); | 2087 m_lifecycle.advanceTo(DocumentLifecycle::LayoutClean); |
| 2075 } | 2088 } |
| 2076 | 2089 |
| 2077 void Document::detach(const AttachContext& context) | 2090 void Document::detach(const AttachContext& context) |
| 2078 { | 2091 { |
| 2079 ASSERT(isActive()); | 2092 ASSERT(isActive()); |
| 2080 m_lifecycle.advanceTo(DocumentLifecycle::Stopping); | 2093 m_lifecycle.advanceTo(DocumentLifecycle::Stopping); |
| 2081 | 2094 |
| 2082 if (page()) | 2095 if (page()) |
| 2083 page()->documentDetached(this); | 2096 page()->documentDetached(this); |
| 2084 | 2097 |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2447 } | 2460 } |
| 2448 | 2461 |
| 2449 // Make sure both the initial layout and reflow happen after the onload | 2462 // Make sure both the initial layout and reflow happen after the onload |
| 2450 // fires. This will improve onload scores, and other browsers do it. | 2463 // fires. This will improve onload scores, and other browsers do it. |
| 2451 // If they wanna cheat, we can too. -dwh | 2464 // If they wanna cheat, we can too. -dwh |
| 2452 | 2465 |
| 2453 if (frame()->navigationScheduler().locationChangePending() && elapsedTime() < cLayoutScheduleThreshold) { | 2466 if (frame()->navigationScheduler().locationChangePending() && elapsedTime() < cLayoutScheduleThreshold) { |
| 2454 // Just bail out. Before or during the onload we were shifted to another page. | 2467 // Just bail out. Before or during the onload we were shifted to another page. |
| 2455 // The old i-Bench suite does this. When this happens don't bother paint ing or laying out. | 2468 // The old i-Bench suite does this. When this happens don't bother paint ing or laying out. |
| 2456 m_loadEventProgress = LoadEventCompleted; | 2469 m_loadEventProgress = LoadEventCompleted; |
| 2457 view()->unscheduleRelayout(); | |
| 2458 return; | 2470 return; |
| 2459 } | 2471 } |
| 2460 | 2472 |
| 2461 // We used to force a synchronous display and flush here. This really isn't | 2473 // We used to force a synchronous display and flush here. This really isn't |
| 2462 // necessary and can in fact be actively harmful if pages are loading at a r ate of > 60fps | 2474 // necessary and can in fact be actively harmful if pages are loading at a r ate of > 60fps |
| 2463 // (if your platform is syncing flushes and limiting them to 60fps). | 2475 // (if your platform is syncing flushes and limiting them to 60fps). |
| 2464 m_overMinimumLayoutThreshold = true; | |
| 2465 if (!ownerElement() || (ownerElement()->renderer() && !ownerElement()->rende rer()->needsLayout())) { | 2476 if (!ownerElement() || (ownerElement()->renderer() && !ownerElement()->rende rer()->needsLayout())) { |
| 2466 updateStyleIfNeeded(); | 2477 updateStyleIfNeeded(); |
| 2467 | 2478 |
| 2468 // Always do a layout after loading if needed. | 2479 // Always do a layout after loading if needed. |
| 2469 if (view() && renderView() && (!renderView()->firstChild() || renderView ()->needsLayout())) | 2480 if (view() && renderView() && (!renderView()->firstChild() || renderView ()->needsLayout())) |
| 2470 view()->layout(); | 2481 view()->layout(); |
| 2471 } | 2482 } |
| 2472 | 2483 |
| 2473 m_loadEventProgress = LoadEventCompleted; | 2484 m_loadEventProgress = LoadEventCompleted; |
| 2474 | 2485 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2600 // | 2611 // |
| 2601 // (a) Only schedule a layout once the stylesheets are loaded. | 2612 // (a) Only schedule a layout once the stylesheets are loaded. |
| 2602 // (b) Only schedule layout once we have a body element. | 2613 // (b) Only schedule layout once we have a body element. |
| 2603 | 2614 |
| 2604 return (haveStylesheetsLoaded() && body()) | 2615 return (haveStylesheetsLoaded() && body()) |
| 2605 || (documentElement() && !documentElement()->hasTagName(htmlTag)); | 2616 || (documentElement() && !documentElement()->hasTagName(htmlTag)); |
| 2606 } | 2617 } |
| 2607 | 2618 |
| 2608 bool Document::shouldParserYieldAgressivelyBeforeScriptExecution() | 2619 bool Document::shouldParserYieldAgressivelyBeforeScriptExecution() |
| 2609 { | 2620 { |
| 2610 return view() && view()->layoutPending() && !minimumLayoutDelay(); | 2621 return view() && view()->layoutPending(); |
| 2611 } | |
| 2612 | |
| 2613 int Document::minimumLayoutDelay() | |
| 2614 { | |
| 2615 if (m_overMinimumLayoutThreshold) | |
| 2616 return 0; | |
| 2617 | |
| 2618 int elapsed = elapsedTime(); | |
| 2619 m_overMinimumLayoutThreshold = elapsed > cLayoutScheduleThreshold; | |
| 2620 | |
| 2621 // We'll want to schedule the timer to fire at the minimum layout threshold. | |
| 2622 return max(0, cLayoutScheduleThreshold - elapsed); | |
| 2623 } | 2622 } |
| 2624 | 2623 |
| 2625 int Document::elapsedTime() const | 2624 int Document::elapsedTime() const |
| 2626 { | 2625 { |
| 2627 return static_cast<int>((currentTime() - m_startTime) * 1000); | 2626 return static_cast<int>((currentTime() - m_startTime) * 1000); |
| 2628 } | 2627 } |
| 2629 | 2628 |
| 2630 void Document::write(const SegmentedString& text, Document* ownerDocument) | 2629 void Document::write(const SegmentedString& text, Document* ownerDocument) |
| 2631 { | 2630 { |
| 2632 NestingLevelIncrementer nestingLevelIncrementer(m_writeRecursionDepth); | 2631 NestingLevelIncrementer nestingLevelIncrementer(m_writeRecursionDepth); |
| (...skipping 2806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5439 void Document::defaultEventHandler(Event* event) | 5438 void Document::defaultEventHandler(Event* event) |
| 5440 { | 5439 { |
| 5441 if (frame() && frame()->remotePlatformLayer()) { | 5440 if (frame() && frame()->remotePlatformLayer()) { |
| 5442 frame()->chromeClient().forwardInputEvent(this, event); | 5441 frame()->chromeClient().forwardInputEvent(this, event); |
| 5443 return; | 5442 return; |
| 5444 } | 5443 } |
| 5445 Node::defaultEventHandler(event); | 5444 Node::defaultEventHandler(event); |
| 5446 } | 5445 } |
| 5447 | 5446 |
| 5448 } // namespace WebCore | 5447 } // namespace WebCore |
| OLD | NEW |