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

Side by Side Diff: third_party/WebKit/Source/core/dom/Document.cpp

Issue 1716803002: Trigger repaint on first paint only on pending stylesheet decrement. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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
OLDNEW
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 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 630
631 MediaQueryMatcher& Document::mediaQueryMatcher() 631 MediaQueryMatcher& Document::mediaQueryMatcher()
632 { 632 {
633 if (!m_mediaQueryMatcher) 633 if (!m_mediaQueryMatcher)
634 m_mediaQueryMatcher = MediaQueryMatcher::create(*this); 634 m_mediaQueryMatcher = MediaQueryMatcher::create(*this);
635 return *m_mediaQueryMatcher; 635 return *m_mediaQueryMatcher;
636 } 636 }
637 637
638 void Document::mediaQueryAffectingValueChanged() 638 void Document::mediaQueryAffectingValueChanged()
639 { 639 {
640 styleResolverChanged(); 640 styleEngine().resolverChanged(FullStyleUpdate);
641 m_evaluateMediaQueriesOnStyleRecalc = true; 641 m_evaluateMediaQueriesOnStyleRecalc = true;
642 styleEngine().clearMediaQueryRuleSetStyleSheets(); 642 styleEngine().clearMediaQueryRuleSetStyleSheets();
643 InspectorInstrumentation::mediaQueryResultChanged(this); 643 InspectorInstrumentation::mediaQueryResultChanged(this);
644 } 644 }
645 645
646 void Document::setCompatibilityMode(CompatibilityMode mode) 646 void Document::setCompatibilityMode(CompatibilityMode mode)
647 { 647 {
648 if (m_compatibilityModeLocked || mode == m_compatibilityMode) 648 if (m_compatibilityModeLocked || mode == m_compatibilityMode)
649 return; 649 return;
650 m_compatibilityMode = mode; 650 m_compatibilityMode = mode;
(...skipping 1357 matching lines...) Expand 10 before | Expand all | Expand 10 after
2008 // FIXME: We are willing to attempt to suppress painting with outdated s tyle info only once. 2008 // FIXME: We are willing to attempt to suppress painting with outdated s tyle info only once.
2009 // Our assumption is that it would be dangerous to try to stop it a seco nd time, after page 2009 // Our assumption is that it would be dangerous to try to stop it a seco nd time, after page
2010 // content has already been loaded and displayed with accurate style inf ormation. (Our 2010 // content has already been loaded and displayed with accurate style inf ormation. (Our
2011 // suppression involves blanking the whole page at the moment. If it wer e more refined, we 2011 // suppression involves blanking the whole page at the moment. If it wer e more refined, we
2012 // might be able to do something better.) It's worth noting though that this entire method 2012 // might be able to do something better.) It's worth noting though that this entire method
2013 // is a hack, since what we really want to do is suspend JS instead of d oing a layout with 2013 // is a hack, since what we really want to do is suspend JS instead of d oing a layout with
2014 // inaccurate information. 2014 // inaccurate information.
2015 HTMLElement* bodyElement = body(); 2015 HTMLElement* bodyElement = body();
2016 if (bodyElement && !bodyElement->layoutObject() && m_pendingSheetLayout == NoLayoutWithPendingSheets) { 2016 if (bodyElement && !bodyElement->layoutObject() && m_pendingSheetLayout == NoLayoutWithPendingSheets) {
2017 m_pendingSheetLayout = DidLayoutWithPendingSheets; 2017 m_pendingSheetLayout = DidLayoutWithPendingSheets;
2018 styleResolverChanged(); 2018 styleEngine().resolverChanged(FullStyleUpdate);
2019 } else if (m_hasNodesWithPlaceholderStyle) { 2019 } else if (m_hasNodesWithPlaceholderStyle) {
2020 // If new nodes have been added or style recalc has been done with s tyle sheets still 2020 // If new nodes have been added or style recalc has been done with s tyle sheets still
2021 // pending, some nodes may not have had their real style calculated yet. Normally this 2021 // pending, some nodes may not have had their real style calculated yet. Normally this
2022 // gets cleaned when style sheets arrive but here we need up-to-date style immediately. 2022 // gets cleaned when style sheets arrive but here we need up-to-date style immediately.
2023 updateLayoutTree(Force); 2023 updateLayoutTree(Force);
2024 } 2024 }
2025 } 2025 }
2026 updateLayoutTreeIfNeeded(); 2026 updateLayoutTreeIfNeeded();
2027 } 2027 }
2028 2028
(...skipping 1413 matching lines...) Expand 10 before | Expand all | Expand 10 after
3442 } 3442 }
3443 3443
3444 String Document::selectedStylesheetSet() const 3444 String Document::selectedStylesheetSet() const
3445 { 3445 {
3446 return m_styleEngine->selectedStylesheetSetName(); 3446 return m_styleEngine->selectedStylesheetSetName();
3447 } 3447 }
3448 3448
3449 void Document::setSelectedStylesheetSet(const String& aString) 3449 void Document::setSelectedStylesheetSet(const String& aString)
3450 { 3450 {
3451 styleEngine().setSelectedStylesheetSetName(aString); 3451 styleEngine().setSelectedStylesheetSetName(aString);
3452 styleResolverChanged(); 3452 styleEngine().resolverChanged(FullStyleUpdate);
3453 } 3453 }
3454 3454
3455 void Document::evaluateMediaQueryListIfNeeded() 3455 void Document::evaluateMediaQueryListIfNeeded()
3456 { 3456 {
3457 if (!m_evaluateMediaQueriesOnStyleRecalc) 3457 if (!m_evaluateMediaQueriesOnStyleRecalc)
3458 return; 3458 return;
3459 evaluateMediaQueryList(); 3459 evaluateMediaQueryList();
3460 m_evaluateMediaQueriesOnStyleRecalc = false; 3460 m_evaluateMediaQueriesOnStyleRecalc = false;
3461 } 3461 }
3462 3462
3463 void Document::evaluateMediaQueryList() 3463 void Document::evaluateMediaQueryList()
3464 { 3464 {
3465 if (m_mediaQueryMatcher) 3465 if (m_mediaQueryMatcher)
3466 m_mediaQueryMatcher->mediaFeaturesChanged(); 3466 m_mediaQueryMatcher->mediaFeaturesChanged();
3467 } 3467 }
3468 3468
3469 void Document::notifyResizeForViewportUnits() 3469 void Document::notifyResizeForViewportUnits()
3470 { 3470 {
3471 if (m_mediaQueryMatcher) 3471 if (m_mediaQueryMatcher)
3472 m_mediaQueryMatcher->viewportChanged(); 3472 m_mediaQueryMatcher->viewportChanged();
3473 if (!hasViewportUnits()) 3473 if (!hasViewportUnits())
3474 return; 3474 return;
3475 ensureStyleResolver().notifyResizeForViewportUnits(); 3475 ensureStyleResolver().notifyResizeForViewportUnits();
3476 setNeedsStyleRecalcForViewportUnits(); 3476 setNeedsStyleRecalcForViewportUnits();
3477 } 3477 }
3478 3478
3479 void Document::styleResolverChanged(StyleResolverUpdateMode updateMode) 3479 void Document::styleResolverMayHaveChanged()
3480 { 3480 {
3481 styleEngine().resolverChanged(updateMode); 3481 styleEngine().resolverChanged(hasNodesWithPlaceholderStyle() ? FullStyleUpda te : AnalyzedStyleUpdate);
3482 3482
3483 if (didLayoutWithPendingStylesheets() && !styleEngine().hasPendingSheets()) { 3483 if (didLayoutWithPendingStylesheets() && !styleEngine().hasPendingSheets()) {
3484 // We need to manually repaint because we avoid doing all repaints in la yout or style 3484 // We need to manually repaint because we avoid doing all repaints in la yout or style
3485 // recalc while sheets are still loading to avoid FOUC. 3485 // recalc while sheets are still loading to avoid FOUC.
3486 m_pendingSheetLayout = IgnoreLayoutWithPendingSheets; 3486 m_pendingSheetLayout = IgnoreLayoutWithPendingSheets;
3487 3487
3488 ASSERT(layoutView() || importsController()); 3488 ASSERT(layoutView() || importsController());
3489 if (layoutView()) 3489 if (layoutView())
3490 layoutView()->invalidatePaintForViewAndCompositedLayers(); 3490 layoutView()->invalidatePaintForViewAndCompositedLayers();
3491 } 3491 }
3492 } 3492 }
3493 3493
3494 void Document::styleResolverMayHaveChanged()
3495 {
3496 styleResolverChanged(hasNodesWithPlaceholderStyle() ? FullStyleUpdate : Anal yzedStyleUpdate);
3497 }
3498
3499 void Document::setHoverNode(PassRefPtrWillBeRawPtr<Node> newHoverNode) 3494 void Document::setHoverNode(PassRefPtrWillBeRawPtr<Node> newHoverNode)
3500 { 3495 {
3501 m_hoverNode = newHoverNode; 3496 m_hoverNode = newHoverNode;
3502 } 3497 }
3503 3498
3504 void Document::setActiveHoverElement(PassRefPtrWillBeRawPtr<Element> newActiveEl ement) 3499 void Document::setActiveHoverElement(PassRefPtrWillBeRawPtr<Element> newActiveEl ement)
3505 { 3500 {
3506 if (!newActiveElement) { 3501 if (!newActiveElement) {
3507 m_activeHoverElement.clear(); 3502 m_activeHoverElement.clear();
3508 return; 3503 return;
(...skipping 2172 matching lines...) Expand 10 before | Expand all | Expand 10 after
5681 } 5676 }
5682 5677
5683 float Document::devicePixelRatio() const 5678 float Document::devicePixelRatio() const
5684 { 5679 {
5685 return m_frame ? m_frame->devicePixelRatio() : 1.0; 5680 return m_frame ? m_frame->devicePixelRatio() : 1.0;
5686 } 5681 }
5687 5682
5688 void Document::removedStyleSheet(StyleSheet* sheet, StyleResolverUpdateMode upda teMode) 5683 void Document::removedStyleSheet(StyleSheet* sheet, StyleResolverUpdateMode upda teMode)
5689 { 5684 {
5690 // If we're in document teardown, then we don't need this notification of ou r sheet's removal. 5685 // If we're in document teardown, then we don't need this notification of ou r sheet's removal.
5691 // styleResolverChanged() is needed even when the document is inactive so th at 5686 // resolverChanged() is needed even when the document is inactive so that im ported documents
5692 // imported docuements (which is inactive) notifies the change to the master document. 5687 // (which are inactive) notify the change to the master document.
5693 if (isActive()) 5688 if (isActive())
5694 styleEngine().modifiedStyleSheet(sheet); 5689 styleEngine().modifiedStyleSheet(sheet);
5695 styleResolverChanged(updateMode); 5690 styleEngine().resolverChanged(updateMode);
5691 }
5692
5693 void Document::addedStyleSheet(StyleSheet*)
5694 {
5695 styleEngine().resolverChanged(FullStyleUpdate);
5696 } 5696 }
5697 5697
5698 void Document::modifiedStyleSheet(StyleSheet* sheet, StyleResolverUpdateMode upd ateMode) 5698 void Document::modifiedStyleSheet(StyleSheet* sheet, StyleResolverUpdateMode upd ateMode)
5699 { 5699 {
5700 // If we're in document teardown, then we don't need this notification of ou r sheet's removal. 5700 // If we're in document teardown, then we don't need this notification of ou r sheet's removal.
5701 // styleResolverChanged() is needed even when the document is inactive so th at 5701 // resolverChanged() is needed even when the document is inactive so that im ported documents
5702 // imported docuements (which is inactive) notifies the change to the master document. 5702 // (which are inactive) notify the change to the master document.
5703 if (isActive()) 5703 if (isActive())
5704 styleEngine().modifiedStyleSheet(sheet); 5704 styleEngine().modifiedStyleSheet(sheet);
5705 styleResolverChanged(updateMode); 5705 styleEngine().resolverChanged(updateMode);
5706 }
5707
5708 void Document::changedSelectorWatch()
5709 {
5710 styleEngine().resolverChanged(FullStyleUpdate);
5706 } 5711 }
5707 5712
5708 TextAutosizer* Document::textAutosizer() 5713 TextAutosizer* Document::textAutosizer()
5709 { 5714 {
5710 if (!m_textAutosizer) 5715 if (!m_textAutosizer)
5711 m_textAutosizer = TextAutosizer::create(this); 5716 m_textAutosizer = TextAutosizer::create(this);
5712 return m_textAutosizer.get(); 5717 return m_textAutosizer.get();
5713 } 5718 }
5714 5719
5715 void Document::setAutofocusElement(Element* element) 5720 void Document::setAutofocusElement(Element* element)
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
5951 #ifndef NDEBUG 5956 #ifndef NDEBUG
5952 using namespace blink; 5957 using namespace blink;
5953 void showLiveDocumentInstances() 5958 void showLiveDocumentInstances()
5954 { 5959 {
5955 Document::WeakDocumentSet& set = Document::liveDocumentSet(); 5960 Document::WeakDocumentSet& set = Document::liveDocumentSet();
5956 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 5961 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
5957 for (Document* document : set) 5962 for (Document* document : set)
5958 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str ing().utf8().data()); 5963 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str ing().utf8().data());
5959 } 5964 }
5960 #endif 5965 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Document.h ('k') | third_party/WebKit/Source/core/dom/StyleEngine.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698