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

Side by Side Diff: third_party/WebKit/Source/core/dom/Node.h

Issue 1962953002: Storage of ComputedStyle separate from LayoutObject. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Elliott's comments Created 4 years, 4 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/dom/Node.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 * Copyright (C) 2004-2011, 2014 Apple Inc. All rights reserved. 5 * Copyright (C) 2004-2011, 2014 Apple Inc. All rights reserved.
6 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 6 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 virtual int maxCharacterOffset() const; 470 virtual int maxCharacterOffset() const;
471 471
472 // Whether or not a selection can be started in this object 472 // Whether or not a selection can be started in this object
473 virtual bool canStartSelection() const; 473 virtual bool canStartSelection() const;
474 474
475 // ------------------------------------------------------------------------- ---- 475 // ------------------------------------------------------------------------- ----
476 // Integration with layout tree 476 // Integration with layout tree
477 477
478 // As layoutObject() includes a branch you should avoid calling it repeatedl y in hot code paths. 478 // As layoutObject() includes a branch you should avoid calling it repeatedl y in hot code paths.
479 // Note that if a Node has a layoutObject, it's parentNode is guaranteed to have one as well. 479 // Note that if a Node has a layoutObject, it's parentNode is guaranteed to have one as well.
480 LayoutObject* layoutObject() const { return hasRareData() ? m_data.m_rareDat a->layoutObject() : m_data.m_layoutObject; } 480 LayoutObject* layoutObject() const
481 {
482 if (hasRareData())
483 return m_data.m_rareData->layoutObject();
484 return hasLayoutObject() ? m_data.m_layoutObject : nullptr;
485 }
481 void setLayoutObject(LayoutObject* layoutObject) 486 void setLayoutObject(LayoutObject* layoutObject)
482 { 487 {
483 if (hasRareData()) 488 if (hasRareData())
484 m_data.m_rareData->setLayoutObject(layoutObject); 489 m_data.m_rareData->setLayoutObject(layoutObject);
485 else 490 else
486 m_data.m_layoutObject = layoutObject; 491 m_data.m_layoutObject = layoutObject;
492 setFlag(static_cast<bool>(layoutObject), HasLayoutObjectFlag);
487 } 493 }
488 494
489 // Use these two methods with caution. 495 // Use these two methods with caution.
490 LayoutBox* layoutBox() const; 496 LayoutBox* layoutBox() const;
491 LayoutBoxModelObject* layoutBoxModelObject() const; 497 LayoutBoxModelObject* layoutBoxModelObject() const;
492 498
493 struct AttachContext { 499 struct AttachContext {
494 STACK_ALLOCATED(); 500 STACK_ALLOCATED();
495 ComputedStyle* resolvedStyle = nullptr; 501 ComputedStyle* resolvedStyle = nullptr;
496 bool performingReattach = false; 502 bool performingReattach = false;
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 696
691 HasNameOrIsEditingTextFlag = 1 << 23, 697 HasNameOrIsEditingTextFlag = 1 << 23,
692 HasWeakReferencesFlag = 1 << 24, 698 HasWeakReferencesFlag = 1 << 24,
693 V8CollectableDuringMinorGCFlag = 1 << 25, 699 V8CollectableDuringMinorGCFlag = 1 << 25,
694 HasEventTargetDataFlag = 1 << 26, 700 HasEventTargetDataFlag = 1 << 26,
695 AlreadySpellCheckedFlag = 1 << 27, 701 AlreadySpellCheckedFlag = 1 << 27,
696 702
697 V0CustomElementFlag = 1 << 28, 703 V0CustomElementFlag = 1 << 28,
698 V0CustomElementUpgradedFlag = 1 << 29, 704 V0CustomElementUpgradedFlag = 1 << 29,
699 705
706 HasLayoutObjectFlag = 1 << 30,
707
700 DefaultNodeFlags = IsFinishedParsingChildrenFlag | NeedsReattachStyleCha nge 708 DefaultNodeFlags = IsFinishedParsingChildrenFlag | NeedsReattachStyleCha nge
701 }; 709 };
702 710
703 // 3 bits remaining. 711 // 1 bit remaining.
704 712
705 bool getFlag(NodeFlags mask) const { return m_nodeFlags & mask; } 713 bool getFlag(NodeFlags mask) const { return m_nodeFlags & mask; }
706 void setFlag(bool f, NodeFlags mask) { m_nodeFlags = (m_nodeFlags & ~mask) | (-(int32_t)f & mask); } 714 void setFlag(bool f, NodeFlags mask) { m_nodeFlags = (m_nodeFlags & ~mask) | (-(int32_t)f & mask); }
707 void setFlag(NodeFlags mask) { m_nodeFlags |= mask; } 715 void setFlag(NodeFlags mask) { m_nodeFlags |= mask; }
708 void clearFlag(NodeFlags mask) { m_nodeFlags &= ~mask; } 716 void clearFlag(NodeFlags mask) { m_nodeFlags &= ~mask; }
709 717
710 protected: 718 protected:
711 enum ConstructionType { 719 enum ConstructionType {
712 CreateOther = DefaultNodeFlags, 720 CreateOther = DefaultNodeFlags,
713 CreateText = DefaultNodeFlags | IsTextFlag, 721 CreateText = DefaultNodeFlags | IsTextFlag,
(...skipping 11 matching lines...) Expand all
725 Node(TreeScope*, ConstructionType); 733 Node(TreeScope*, ConstructionType);
726 734
727 virtual void didMoveToNewDocument(Document& oldDocument); 735 virtual void didMoveToNewDocument(Document& oldDocument);
728 736
729 void addedEventListener(const AtomicString& eventType, RegisteredEventListen er&) override; 737 void addedEventListener(const AtomicString& eventType, RegisteredEventListen er&) override;
730 void removedEventListener(const AtomicString& eventType, const RegisteredEve ntListener&) override; 738 void removedEventListener(const AtomicString& eventType, const RegisteredEve ntListener&) override;
731 DispatchEventResult dispatchEventInternal(Event*) override; 739 DispatchEventResult dispatchEventInternal(Event*) override;
732 740
733 static void reattachWhitespaceSiblingsIfNeeded(Text* start); 741 static void reattachWhitespaceSiblingsIfNeeded(Text* start);
734 742
743 bool hasLayoutObject() const { return getFlag(HasLayoutObjectFlag); }
735 bool hasRareData() const { return getFlag(HasRareDataFlag); } 744 bool hasRareData() const { return getFlag(HasRareDataFlag); }
736 745
737 NodeRareData* rareData() const; 746 NodeRareData* rareData() const;
738 NodeRareData& ensureRareData(); 747 NodeRareData& ensureRareData();
739 748
740 void setHasCustomStyleCallbacks() { setFlag(true, HasCustomStyleCallbacksFla g); } 749 void setHasCustomStyleCallbacks() { setFlag(true, HasCustomStyleCallbacksFla g); }
741 750
742 void setTreeScope(TreeScope* scope) { m_treeScope = scope; } 751 void setTreeScope(TreeScope* scope) { m_treeScope = scope; }
743 752
744 // isTreeScopeInitialized() can be false 753 // isTreeScopeInitialized() can be false
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 HeapHashSet<Member<MutationObserverRegistration>>* transientMutationObserver Registry(); 788 HeapHashSet<Member<MutationObserverRegistration>>* transientMutationObserver Registry();
780 789
781 uint32_t m_nodeFlags; 790 uint32_t m_nodeFlags;
782 Member<ContainerNode> m_parentOrShadowHostNode; 791 Member<ContainerNode> m_parentOrShadowHostNode;
783 Member<TreeScope> m_treeScope; 792 Member<TreeScope> m_treeScope;
784 Member<Node> m_previous; 793 Member<Node> m_previous;
785 Member<Node> m_next; 794 Member<Node> m_next;
786 // When a node has rare data we move the layoutObject into the rare data. 795 // When a node has rare data we move the layoutObject into the rare data.
787 union DataUnion { 796 union DataUnion {
788 DataUnion() : m_layoutObject(nullptr) { } 797 DataUnion() : m_layoutObject(nullptr) { }
798 ComputedStyle* m_computedStyle;
789 // LayoutObjects are fully owned by their DOM node. See LayoutObject's 799 // LayoutObjects are fully owned by their DOM node. See LayoutObject's
790 // LIFETIME documentation section. 800 // LIFETIME documentation section.
791 LayoutObject* m_layoutObject; 801 LayoutObject* m_layoutObject;
792 NodeRareDataBase* m_rareData; 802 NodeRareDataBase* m_rareData;
793 } m_data; 803 } m_data;
794 }; 804 };
795 805
796 inline void Node::setParentOrShadowHostNode(ContainerNode* parent) 806 inline void Node::setParentOrShadowHostNode(ContainerNode* parent)
797 { 807 {
798 DCHECK(isMainThread()); 808 DCHECK(isMainThread());
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 } // namespace blink 881 } // namespace blink
872 882
873 #ifndef NDEBUG 883 #ifndef NDEBUG
874 // Outside the WebCore namespace for ease of invocation from gdb. 884 // Outside the WebCore namespace for ease of invocation from gdb.
875 void showNode(const blink::Node*); 885 void showNode(const blink::Node*);
876 void showTree(const blink::Node*); 886 void showTree(const blink::Node*);
877 void showNodePath(const blink::Node*); 887 void showNodePath(const blink::Node*);
878 #endif 888 #endif
879 889
880 #endif // Node_h 890 #endif // Node_h
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/dom/Node.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698