Chromium windows compile fails because of the assertion in NodeRareData
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Jan 2013 02:05:14 +0000 (02:05 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Jan 2013 02:05:14 +0000 (02:05 +0000)
https://bugs.webkit.org/show_bug.cgi?id=106149

Reviewed by Andreas Kling.

MSVC adds padding between bitfields of different types for better alignment.
Since we care more about the memory usage, use unsigned for all bitfields to work around this behavior.

* dom/NodeRareData.cpp:
(SameSizeAsNodeRareData):
(WebCore):
* dom/NodeRareData.h:
(WebCore::NodeRareData::isWebVTTNode):
(WebCore::NodeRareData::isWebVTTFutureNode):
(NodeRareData):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@138879 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/dom/NodeRareData.cpp
Source/WebCore/dom/NodeRareData.h

index cad48c1402b322be05f8d0a4c8e767b780593b2f..359a47b3e626c04331fca1a508e83139b97b2612 100644 (file)
@@ -1,3 +1,21 @@
+2013-01-04  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Chromium windows compile fails because of the assertion in NodeRareData
+        https://bugs.webkit.org/show_bug.cgi?id=106149
+
+        Reviewed by Andreas Kling.
+
+        MSVC adds padding between bitfields of different types for better alignment.
+        Since we care more about the memory usage, use unsigned for all bitfields to work around this behavior.
+
+        * dom/NodeRareData.cpp:
+        (SameSizeAsNodeRareData):
+        (WebCore):
+        * dom/NodeRareData.h:
+        (WebCore::NodeRareData::isWebVTTNode):
+        (WebCore::NodeRareData::isWebVTTFutureNode):
+        (NodeRareData):
+
 2013-01-04  Dan Bernstein  <mitz@apple.com>
 
         Updated the exports file.
index b7b846d661f4e1abc191d7cf5eb20fe815c7c47c..b111c7b1829f04467cbdfa83a1c9a57b59286d28 100644 (file)
@@ -45,12 +45,8 @@ struct SameSizeAsNodeRareData {
 #if ENABLE(MICRODATA)
     void* m_microData;
 #endif
-
-// Enum is integer type and is aligned in Windows when placed in the bitfield, so it takes more space. 
-#if PLATFORM(WIN)
-    TextTrack::WebVTTNodeType m_WebVTTNodeType;
-#endif
 };
+
 COMPILE_ASSERT(sizeof(NodeRareData) == sizeof(SameSizeAsNodeRareData), NodeRareDataShouldStaySmall);
 
 void NodeListsNodeData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
index f6068e6cc0545b89d33ddf9190d9442b83fec301..2a14f85c44f6b0d7e12cd8dfdfee058819c41591 100644 (file)
@@ -372,40 +372,41 @@ public:
 
 protected:
 #if ENABLE(VIDEO_TRACK)
-    bool isWebVTTNode() { return m_WebVTTNodeType != TextTrack::WebVTTNodeTypeNone; }
+    bool isWebVTTNode() { return static_cast<TextTrack::WebVTTNodeType>(m_WebVTTNodeType) != TextTrack::WebVTTNodeTypeNone; }
     void setIsWebVTTNode() { m_WebVTTNodeType = TextTrack::WebVTTNodeTypePast; }
-    bool isWebVTTFutureNode() { return m_WebVTTNodeType == TextTrack::WebVTTNodeTypeFuture; }
+    bool isWebVTTFutureNode() { return static_cast<TextTrack::WebVTTNodeType>(m_WebVTTNodeType) == TextTrack::WebVTTNodeTypeFuture; }
     void setIsWebVTTFutureNode() { m_WebVTTNodeType = TextTrack::WebVTTNodeTypeFuture; }
 #endif
     short m_tabIndex;
     unsigned short m_childIndex;
-    bool m_tabIndexWasSetExplicitly : 1;
-    bool m_needsFocusAppearanceUpdateSoonAfterAttach : 1;
-    bool m_styleAffectedByEmpty : 1;
-    bool m_isInCanvasSubtree : 1;
+    unsigned m_tabIndexWasSetExplicitly : 1;
+    unsigned m_needsFocusAppearanceUpdateSoonAfterAttach : 1;
+    unsigned m_styleAffectedByEmpty : 1;
+    unsigned m_isInCanvasSubtree : 1;
 #if ENABLE(FULLSCREEN_API)
-    bool m_containsFullScreenElement : 1;
+    unsigned m_containsFullScreenElement : 1;
 #endif
 #if ENABLE(DIALOG_ELEMENT)
-    bool m_isInTopLayer : 1;
+    unsigned m_isInTopLayer : 1;
 #endif
 #if ENABLE(SVG)
-    bool m_hasPendingResources : 1;
+    unsigned m_hasPendingResources : 1;
 #endif
-    bool m_childrenAffectedByHover : 1;
-    bool m_childrenAffectedByActive : 1;
-    bool m_childrenAffectedByDrag : 1;
+    unsigned m_childrenAffectedByHover : 1;
+    unsigned m_childrenAffectedByActive : 1;
+    unsigned m_childrenAffectedByDrag : 1;
     // Bits for dynamic child matching.
     // We optimize for :first-child and :last-child. The other positional child selectors like nth-child or
     // *-child-of-type, we will just give up and re-evaluate whenever children change at all.
-    bool m_childrenAffectedByFirstChildRules : 1;
-    bool m_childrenAffectedByLastChildRules : 1;
-    bool m_childrenAffectedByDirectAdjacentRules : 1;
-    bool m_childrenAffectedByForwardPositionalRules : 1;
-    bool m_childrenAffectedByBackwardPositionalRules : 1;
+    unsigned m_childrenAffectedByFirstChildRules : 1;
+    unsigned m_childrenAffectedByLastChildRules : 1;
+    unsigned m_childrenAffectedByDirectAdjacentRules : 1;
+    unsigned m_childrenAffectedByForwardPositionalRules : 1;
+    unsigned m_childrenAffectedByBackwardPositionalRules : 1;
 #if ENABLE(VIDEO_TRACK)
-    TextTrack::WebVTTNodeType m_WebVTTNodeType : 2;
+    unsigned m_WebVTTNodeType : 2;
 #endif
+
 private:
     OwnPtr<NodeListsNodeData> m_nodeLists;
     OwnPtr<NodeMutationObserverData> m_mutationObserverData;