- Revision
- 166839
- Author
- akl...@apple.com
- Date
- 2014-04-05 14:33:19 -0700 (Sat, 05 Apr 2014)
Log Message
Devirtualize isHTMLUnknownElement().
<https://webkit.org/b/131269>
We were hitting isHTMLUnknownElement() pretty hard when marking
out-of-document Nodes. (The check is part of isHTMLAudioElement()
which is called by JSNodeOwner::isReachableFromOpaqueRoots().)
This patch uses a Node flag for the unknown element instead.
I'm also adding HTMLUnknownElement.{h,idl} to the Xcode project
since they were suspiciously missing.
Reviewed by Benjamin Poulain.
* WebCore.xcodeproj/project.pbxproj:
* dom/Node.h:
* html/HTMLElement.h:
(WebCore::HTMLElement::isHTMLUnknownElement):
* html/HTMLUnknownElement.h:
(WebCore::toHTMLUnknownElement): Deleted.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (166838 => 166839)
--- trunk/Source/WebCore/ChangeLog 2014-04-05 20:06:57 UTC (rev 166838)
+++ trunk/Source/WebCore/ChangeLog 2014-04-05 21:33:19 UTC (rev 166839)
@@ -1,3 +1,25 @@
+2014-04-05 Andreas Kling <akl...@apple.com>
+
+ Devirtualize isHTMLUnknownElement().
+ <https://webkit.org/b/131269>
+
+ We were hitting isHTMLUnknownElement() pretty hard when marking
+ out-of-document Nodes. (The check is part of isHTMLAudioElement()
+ which is called by JSNodeOwner::isReachableFromOpaqueRoots().)
+
+ This patch uses a Node flag for the unknown element instead.
+ I'm also adding HTMLUnknownElement.{h,idl} to the Xcode project
+ since they were suspiciously missing.
+
+ Reviewed by Benjamin Poulain.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/Node.h:
+ * html/HTMLElement.h:
+ (WebCore::HTMLElement::isHTMLUnknownElement):
+ * html/HTMLUnknownElement.h:
+ (WebCore::toHTMLUnknownElement): Deleted.
+
2014-04-05 Dirk Schulze <k...@webkit.org>
Canvas stroke and strokeRect with SourceIn, DestinationIn, SourceOut, DestinationAtop and Copy have errors
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (166838 => 166839)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2014-04-05 20:06:57 UTC (rev 166838)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2014-04-05 21:33:19 UTC (rev 166839)
@@ -4230,6 +4230,7 @@
AD20B18D18E9D237005A8083 /* JSNodeListCustom.h in Headers */ = {isa = PBXBuildFile; fileRef = AD20B18C18E9D216005A8083 /* JSNodeListCustom.h */; settings = {ATTRIBUTES = (Private, ); }; };
AD4495F3141FC08900541EDF /* EventListenerMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD4495F1141FC08900541EDF /* EventListenerMap.cpp */; };
AD4495F4141FC08900541EDF /* EventListenerMap.h in Headers */ = {isa = PBXBuildFile; fileRef = AD4495F2141FC08900541EDF /* EventListenerMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ AD49914318F0815100BF0092 /* HTMLUnknownElement.h in Headers */ = {isa = PBXBuildFile; fileRef = AD49914118F0815100BF0092 /* HTMLUnknownElement.h */; };
AD6E71AC1668899D00320C13 /* DocumentSharedObjectPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD6E71AA1668899D00320C13 /* DocumentSharedObjectPool.cpp */; };
AD6E71AD1668899D00320C13 /* DocumentSharedObjectPool.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6E71AB1668899D00320C13 /* DocumentSharedObjectPool.h */; };
AD726FED16DA1171003A4E6D /* JSCSSStyleDeclarationCustom.h in Headers */ = {isa = PBXBuildFile; fileRef = AD726FEA16D9F40B003A4E6D /* JSCSSStyleDeclarationCustom.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -11337,6 +11338,8 @@
AD20B18C18E9D216005A8083 /* JSNodeListCustom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNodeListCustom.h; sourceTree = "<group>"; };
AD4495F1141FC08900541EDF /* EventListenerMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventListenerMap.cpp; sourceTree = "<group>"; };
AD4495F2141FC08900541EDF /* EventListenerMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventListenerMap.h; sourceTree = "<group>"; };
+ AD49914118F0815100BF0092 /* HTMLUnknownElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLUnknownElement.h; sourceTree = "<group>"; };
+ AD49914218F0815100BF0092 /* HTMLUnknownElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLUnknownElement.idl; sourceTree = "<group>"; };
AD6E71AA1668899D00320C13 /* DocumentSharedObjectPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentSharedObjectPool.cpp; sourceTree = "<group>"; };
AD6E71AB1668899D00320C13 /* DocumentSharedObjectPool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentSharedObjectPool.h; sourceTree = "<group>"; };
AD726FE716D9F204003A4E6D /* JSMediaListCustom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaListCustom.h; sourceTree = "<group>"; };
@@ -17547,6 +17550,8 @@
A8EA79E70A1916DF00A8EF5F /* HTMLUListElement.cpp */,
A8EA79E60A1916DF00A8EF5F /* HTMLUListElement.h */,
1A85B1D50A1B236C00D8C87C /* HTMLUListElement.idl */,
+ AD49914118F0815100BF0092 /* HTMLUnknownElement.h */,
+ AD49914218F0815100BF0092 /* HTMLUnknownElement.idl */,
E44613980CD6331000FADA75 /* HTMLVideoElement.cpp */,
E44613990CD6331000FADA75 /* HTMLVideoElement.h */,
E446139A0CD6331000FADA75 /* HTMLVideoElement.idl */,
@@ -25910,6 +25915,7 @@
0F54DCE61881051D003EEDBB /* TextAutoSizing.h in Headers */,
B2C3DA340D006C1D00EF6F26 /* TextBoundaries.h in Headers */,
B2C3DA360D006C1D00EF6F26 /* TextBreakIterator.h in Headers */,
+ AD49914318F0815100BF0092 /* HTMLUnknownElement.h in Headers */,
B2C3DA380D006C1D00EF6F26 /* TextBreakIteratorInternalICU.h in Headers */,
A7151BD812F1558F005A0F64 /* TextCheckerClient.h in Headers */,
A77D0012133B0AEB00D6658C /* TextChecking.h in Headers */,
Modified: trunk/Source/WebCore/dom/Node.h (166838 => 166839)
--- trunk/Source/WebCore/dom/Node.h 2014-04-05 20:06:57 UTC (rev 166838)
+++ trunk/Source/WebCore/dom/Node.h 2014-04-05 21:33:19 UTC (rev 166839)
@@ -611,6 +611,8 @@
SelfOrAncestorHasDirAutoFlag = 1 << 29,
+ IsHTMLUnknownElementFlag = 1 << 30,
+
DefaultNodeFlags = IsParsingChildrenFinishedFlag
};
@@ -634,6 +636,7 @@
CreateInsertionPoint = CreateHTMLElement | NeedsNodeRenderingTraversalSlowPathFlag,
CreateEditingText = CreateText | IsEditingTextFlag,
CreateMathMLElement = CreateStyledElement | IsMathMLFlag,
+ CreateHTMLUnknownElement = CreateHTMLElement | IsHTMLUnknownElementFlag,
};
Node(Document&, ConstructionType);
Modified: trunk/Source/WebCore/html/HTMLElement.h (166838 => 166839)
--- trunk/Source/WebCore/html/HTMLElement.h 2014-04-05 20:06:57 UTC (rev 166838)
+++ trunk/Source/WebCore/html/HTMLElement.h 2014-04-05 21:33:19 UTC (rev 166839)
@@ -89,7 +89,7 @@
bool hasDirectionAuto() const;
TextDirection directionalityIfhasDirAutoAttribute(bool& isAuto) const;
- virtual bool isHTMLUnknownElement() const { return false; }
+ bool isHTMLUnknownElement() const { return getFlag(IsHTMLUnknownElementFlag); }
virtual bool isTextControlInnerTextElement() const { return false; }
virtual bool willRespondToMouseMoveEvents() override;
Modified: trunk/Source/WebCore/html/HTMLUnknownElement.h (166838 => 166839)
--- trunk/Source/WebCore/html/HTMLUnknownElement.h 2014-04-05 20:06:57 UTC (rev 166838)
+++ trunk/Source/WebCore/html/HTMLUnknownElement.h 2014-04-05 21:33:19 UTC (rev 166839)
@@ -41,20 +41,14 @@
return adoptRef(new HTMLUnknownElement(tagName, document));
}
- virtual bool isHTMLUnknownElement() const override { return true; }
-
private:
HTMLUnknownElement(const QualifiedName& tagName, Document& document)
- : HTMLElement(tagName, document)
+ : HTMLElement(tagName, document, CreateHTMLUnknownElement)
{
}
};
-inline HTMLUnknownElement* toHTMLUnknownElement(HTMLElement* element)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(!element || element->isHTMLUnknownElement());
- return static_cast<HTMLUnknownElement*>(element);
-}
+NODE_TYPE_CASTS(HTMLUnknownElement)
} // namespace