Title: [151663] trunk/Source/WTF
Revision
151663
Author
rn...@webkit.org
Date
2013-06-17 18:08:33 -0700 (Mon, 17 Jun 2013)

Log Message

Initialize AtomicStringTable in WTFThreadData's constructor
https://bugs.webkit.org/show_bug.cgi?id=117671

Reviewed by Geoffrey Garen.

Extracted AtomicStringTable from AtomicString.cpp into AtomicStringTable.h/cpp
and made WTFThreadDada::WTFThreadData create the atomic string table for the thread.

This eliminates a branch from stringTable() in AtomicString.cpp.

* GNUmakefile.list.am:
* WTF.pro:
* WTF.vcxproj/WTF.vcxproj:
* WTF.vcxproj/WTF.vcxproj.filters:
* WTF.xcodeproj/project.pbxproj:
* wtf/CMakeLists.txt:
* wtf/WTFThreadData.cpp:
(WTF::WTFThreadData::WTFThreadData):
* wtf/text/AtomicString.cpp:
(WTF::stringTable):
* wtf/text/AtomicStringTable.cpp: Added.
(WTF::AtomicStringTable::create):
(WTF::AtomicStringTable::destroy):
* wtf/text/AtomicStringTable.h: Added.
(WTF::AtomicStringTable::table):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (151662 => 151663)


--- trunk/Source/WTF/ChangeLog	2013-06-18 00:54:50 UTC (rev 151662)
+++ trunk/Source/WTF/ChangeLog	2013-06-18 01:08:33 UTC (rev 151663)
@@ -1,3 +1,31 @@
+2013-06-17  Ryosuke Niwa  <rn...@webkit.org>
+
+        Initialize AtomicStringTable in WTFThreadData's constructor
+        https://bugs.webkit.org/show_bug.cgi?id=117671
+
+        Reviewed by Geoffrey Garen.
+
+        Extracted AtomicStringTable from AtomicString.cpp into AtomicStringTable.h/cpp
+        and made WTFThreadDada::WTFThreadData create the atomic string table for the thread.
+
+        This eliminates a branch from stringTable() in AtomicString.cpp.
+
+        * GNUmakefile.list.am:
+        * WTF.pro:
+        * WTF.vcxproj/WTF.vcxproj:
+        * WTF.vcxproj/WTF.vcxproj.filters:
+        * WTF.xcodeproj/project.pbxproj:
+        * wtf/CMakeLists.txt:
+        * wtf/WTFThreadData.cpp:
+        (WTF::WTFThreadData::WTFThreadData):
+        * wtf/text/AtomicString.cpp:
+        (WTF::stringTable):
+        * wtf/text/AtomicStringTable.cpp: Added.
+        (WTF::AtomicStringTable::create):
+        (WTF::AtomicStringTable::destroy):
+        * wtf/text/AtomicStringTable.h: Added.
+        (WTF::AtomicStringTable::table):
+
 2013-06-17  Roger Fong  <roger_f...@apple.com>
 
         Modify Windows makefiles to copy some bin output into Program Files.

Modified: trunk/Source/WTF/GNUmakefile.list.am (151662 => 151663)


--- trunk/Source/WTF/GNUmakefile.list.am	2013-06-18 00:54:50 UTC (rev 151662)
+++ trunk/Source/WTF/GNUmakefile.list.am	2013-06-18 01:08:33 UTC (rev 151663)
@@ -225,6 +225,8 @@
     Source/WTF/wtf/text/AtomicString.h \
     Source/WTF/wtf/text/AtomicStringHash.h \
     Source/WTF/wtf/text/AtomicStringImpl.h \
+    Source/WTF/wtf/text/AtomicStringTable.cpp \
+    Source/WTF/wtf/text/AtomicStringTable.h \
     Source/WTF/wtf/text/Base64.cpp \
     Source/WTF/wtf/text/Base64.h \
     Source/WTF/wtf/text/CString.cpp \

Modified: trunk/Source/WTF/WTF.pro (151662 => 151663)


--- trunk/Source/WTF/WTF.pro	2013-06-18 00:54:50 UTC (rev 151662)
+++ trunk/Source/WTF/WTF.pro	2013-06-18 01:08:33 UTC (rev 151663)
@@ -144,6 +144,7 @@
     text/AtomicString.h \
     text/AtomicStringHash.h \
     text/AtomicStringImpl.h \
+    text/AtomicStringTable.h \
     text/Base64.h \
     text/CString.h \
     text/IntegerToStringConversion.h \
@@ -233,6 +234,7 @@
     TypeTraits.cpp \
     WTFThreadData.cpp \
     text/AtomicString.cpp \
+    text/AtomicStringTable.cpp \
     text/Base64.cpp \
     text/CString.cpp \
     text/StringBuilder.cpp \

Modified: trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj (151662 => 151663)


--- trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj	2013-06-18 00:54:50 UTC (rev 151662)
+++ trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj	2013-06-18 01:08:33 UTC (rev 151663)
@@ -72,6 +72,7 @@
     <ClCompile Include="..\wtf\StringPrintStream.cpp" />
     <ClCompile Include="..\wtf\TCSystemAlloc.cpp" />
     <ClCompile Include="..\wtf\text\AtomicString.cpp" />
+    <ClCompile Include="..\wtf\text\AtomicStringTable.cpp" />
     <ClCompile Include="..\wtf\text\Base64.cpp" />
     <ClCompile Include="..\wtf\text\CString.cpp" />
     <ClCompile Include="..\wtf\text\StringBuilder.cpp" />
@@ -223,6 +224,7 @@
     <ClInclude Include="..\wtf\text\AtomicString.h" />
     <ClInclude Include="..\wtf\text\AtomicStringHash.h" />
     <ClInclude Include="..\wtf\text\AtomicStringImpl.h" />
+    <ClInclude Include="..\wtf\text\AtomicStringTable.h" />
     <ClInclude Include="..\wtf\text\Base64.h" />
     <ClInclude Include="..\wtf\text\CString.h" />
     <ClInclude Include="..\wtf\text\IntegerToStringConversion.h" />

Modified: trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj.filters (151662 => 151663)


--- trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj.filters	2013-06-18 00:54:50 UTC (rev 151662)
+++ trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj.filters	2013-06-18 01:08:33 UTC (rev 151663)
@@ -261,6 +261,9 @@
     <ClInclude Include="..\wtf\text\AtomicStringImpl.h">
       <Filter>text</Filter>
     </ClInclude>
+    <ClInclude Include="..\wtf\text\AtomicStringTable.h">
+      <Filter>text</Filter>
+    </ClInclude>
     <ClInclude Include="..\wtf\text\Base64.h">
       <Filter>text</Filter>
     </ClInclude>

Modified: trunk/Source/WTF/WTF.xcodeproj/project.pbxproj (151662 => 151663)


--- trunk/Source/WTF/WTF.xcodeproj/project.pbxproj	2013-06-18 00:54:50 UTC (rev 151662)
+++ trunk/Source/WTF/WTF.xcodeproj/project.pbxproj	2013-06-18 01:08:33 UTC (rev 151663)
@@ -54,6 +54,8 @@
 		8134013815B092FD001FF0B8 /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8134013615B092FD001FF0B8 /* Base64.cpp */; };
 		8134013915B092FD001FF0B8 /* Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 8134013715B092FD001FF0B8 /* Base64.h */; };
 		974CFC8E16A4F327006D5404 /* WeakPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 974CFC8D16A4F327006D5404 /* WeakPtr.h */; };
+		9BC70F05176C379D00101DEC /* AtomicStringTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BC70F04176C379D00101DEC /* AtomicStringTable.cpp */; };
+		9BD8F40B176C2B470002D865 /* AtomicStringTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BD8F40A176C2AD80002D865 /* AtomicStringTable.h */; };
 		A876DBD8151816E500DADB95 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A876DBD7151816E500DADB95 /* Platform.h */; };
 		A8A4737F151A825B004123FF /* Alignment.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A47254151A825A004123FF /* Alignment.h */; };
 		A8A47381151A825B004123FF /* ArrayBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8A47256151A825A004123FF /* ArrayBuffer.cpp */; };
@@ -323,6 +325,8 @@
 		8134013615B092FD001FF0B8 /* Base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Base64.cpp; sourceTree = "<group>"; };
 		8134013715B092FD001FF0B8 /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64.h; sourceTree = "<group>"; };
 		974CFC8D16A4F327006D5404 /* WeakPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakPtr.h; sourceTree = "<group>"; };
+		9BC70F04176C379D00101DEC /* AtomicStringTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AtomicStringTable.cpp; sourceTree = "<group>"; };
+		9BD8F40A176C2AD80002D865 /* AtomicStringTable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AtomicStringTable.h; sourceTree = "<group>"; };
 		A876DBD7151816E500DADB95 /* Platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Platform.h; sourceTree = "<group>"; };
 		A8A47254151A825A004123FF /* Alignment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Alignment.h; sourceTree = "<group>"; };
 		A8A47256151A825A004123FF /* ArrayBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ArrayBuffer.cpp; sourceTree = "<group>"; };
@@ -845,6 +849,8 @@
 				A8A4731E151A825B004123FF /* AtomicString.h */,
 				A8A4731F151A825B004123FF /* AtomicStringHash.h */,
 				A8A47320151A825B004123FF /* AtomicStringImpl.h */,
+				9BD8F40A176C2AD80002D865 /* AtomicStringTable.h */,
+				9BC70F04176C379D00101DEC /* AtomicStringTable.cpp */,
 				8134013615B092FD001FF0B8 /* Base64.cpp */,
 				8134013715B092FD001FF0B8 /* Base64.h */,
 				A8A47321151A825B004123FF /* CString.cpp */,
@@ -914,6 +920,7 @@
 				1469419216EAAF6D0024E146 /* RunLoopTimer.h in Headers */,
 				1469419616EAAFF80024E146 /* SchedulePair.h in Headers */,
 				A8A47385151A825B004123FF /* ASCIICType.h in Headers */,
+				9BD8F40B176C2B470002D865 /* AtomicStringTable.h in Headers */,
 				A8A47434151A825B004123FF /* ASCIIFastPath.h in Headers */,
 				A8A47387151A825B004123FF /* Assertions.h in Headers */,
 				A8A47388151A825B004123FF /* Atomics.h in Headers */,
@@ -1227,6 +1234,7 @@
 				A8A47458151A825B004123FF /* TypeTraits.cpp in Sources */,
 				A8A47469151A825B004123FF /* UTF8.cpp in Sources */,
 				A8A47445151A825B004123FF /* WTFString.cpp in Sources */,
+				9BC70F05176C379D00101DEC /* AtomicStringTable.cpp in Sources */,
 				A8A47486151A825B004123FF /* WTFThreadData.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

Modified: trunk/Source/WTF/wtf/CMakeLists.txt (151662 => 151663)


--- trunk/Source/WTF/wtf/CMakeLists.txt	2013-06-18 00:54:50 UTC (rev 151662)
+++ trunk/Source/WTF/wtf/CMakeLists.txt	2013-06-18 01:08:33 UTC (rev 151663)
@@ -126,6 +126,7 @@
 
     text/AtomicString.h
     text/AtomicStringImpl.h
+    text/AtomicStringTable.h
     text/Base64.h
     text/CString.h
     text/IntegerToStringConversion.h
@@ -192,6 +193,7 @@
     dtoa/strtod.cc
 
     text/AtomicString.cpp
+    text/AtomicStringTable.cpp
     text/Base64.cpp
     text/CString.cpp
     text/StringBuilder.cpp

Modified: trunk/Source/WTF/wtf/WTFThreadData.cpp (151662 => 151663)


--- trunk/Source/WTF/wtf/WTFThreadData.cpp	2013-06-18 00:54:50 UTC (rev 151662)
+++ trunk/Source/WTF/wtf/WTFThreadData.cpp	2013-06-18 01:08:33 UTC (rev 151663)
@@ -27,6 +27,8 @@
 #include "config.h"
 #include "WTFThreadData.h"
 
+#include <wtf/text/AtomicStringTable.h>
+
 namespace WTF {
 
 ThreadSpecific<WTFThreadData>* WTFThreadData::staticData;
@@ -42,6 +44,7 @@
     , m_stackStats()
 #endif
 {
+    AtomicStringTable::create(*this);
 }
 
 WTFThreadData::~WTFThreadData()

Modified: trunk/Source/WTF/wtf/text/AtomicString.cpp (151662 => 151663)


--- trunk/Source/WTF/wtf/text/AtomicString.cpp	2013-06-18 00:54:50 UTC (rev 151662)
+++ trunk/Source/WTF/wtf/text/AtomicString.cpp	2013-06-18 01:08:33 UTC (rev 151663)
@@ -24,6 +24,7 @@
 
 #include "AtomicString.h"
 
+#include "AtomicStringTable.h"
 #include "StringHash.h"
 #include <wtf/HashSet.h>
 #include <wtf/Threading.h>
@@ -64,57 +65,9 @@
 };
 #endif // USE(WEB_THREAD)
 
-class AtomicStringTable {
-    WTF_MAKE_FAST_ALLOCATED;
-public:
-    static AtomicStringTable* create(WTFThreadData& data)
-    {
-#if USE(WEB_THREAD)
-        // On iOS, one AtomicStringTable is shared between the main UI thread and the WebThread.
-        static AtomicStringTable* sharedStringTable = new AtomicStringTable;
-
-        bool currentThreadIsWebThread = isWebThread();
-        if (currentThreadIsWebThread || isUIThread())
-            data.m_atomicStringTable = sharedStringTable;
-        else
-            data.m_atomicStringTable = new AtomicStringTable;
-
-        // We do the following so that its destruction happens only
-        // once - on the main UI thread.
-        if (!currentThreadIsWebThread)
-            data.m_atomicStringTableDestructor = AtomicStringTable::destroy;
-#else
-        data.m_atomicStringTable = new AtomicStringTable;
-        data.m_atomicStringTableDestructor = AtomicStringTable::destroy;
-#endif // USE(WEB_THREAD)
-        return data.m_atomicStringTable;
-    }
-
-    HashSet<StringImpl*>& table()
-    {
-        return m_table;
-    }
-
-private:
-    static void destroy(AtomicStringTable* table)
-    {
-        HashSet<StringImpl*>::iterator end = table->m_table.end();
-        for (HashSet<StringImpl*>::iterator iter = table->m_table.begin(); iter != end; ++iter)
-            (*iter)->setIsAtomic(false);
-        delete table;
-    }
-
-    HashSet<StringImpl*> m_table;
-};
-
-static inline HashSet<StringImpl*>& stringTable()
+static ALWAYS_INLINE HashSet<StringImpl*>& stringTable()
 {
-    // Once possible we should make this non-lazy (constructed in WTFThreadData's constructor).
-    WTFThreadData& data = ""
-    AtomicStringTable* table = data.atomicStringTable();
-    if (UNLIKELY(!table))
-        table = AtomicStringTable::create(data);
-    return table->table();
+    return wtfThreadData().atomicStringTable()->table();
 }
 
 template<typename T, typename HashTranslator>

Added: trunk/Source/WTF/wtf/text/AtomicStringTable.cpp (0 => 151663)


--- trunk/Source/WTF/wtf/text/AtomicStringTable.cpp	                        (rev 0)
+++ trunk/Source/WTF/wtf/text/AtomicStringTable.cpp	2013-06-18 01:08:33 UTC (rev 151663)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Patrick Gansterer <par...@paroga.com>
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "AtomicStringTable.h"
+
+#include <wtf/HashSet.h>
+#include <wtf/WTFThreadData.h>
+
+namespace WTF {
+
+void AtomicStringTable::create(WTFThreadData& data)
+{
+#if USE(WEB_THREAD)
+    // On iOS, one AtomicStringTable is shared between the main UI thread and the WebThread.
+    static AtomicStringTable* sharedStringTable = new AtomicStringTable;
+
+    bool currentThreadIsWebThread = isWebThread();
+    if (currentThreadIsWebThread || isUIThread())
+        data.m_atomicStringTable = sharedStringTable;
+    else
+        data.m_atomicStringTable = new AtomicStringTable;
+
+    // We do the following so that its destruction happens only
+    // once - on the main UI thread.
+    if (!currentThreadIsWebThread)
+        data.m_atomicStringTableDestructor = destroyAtomicStringTable;
+#else
+    data.m_atomicStringTable = new AtomicStringTable;
+    data.m_atomicStringTableDestructor = AtomicStringTable::destroy;
+#endif // USE(WEB_THREAD)
+}
+
+void AtomicStringTable::destroy(AtomicStringTable* table)
+{
+    HashSet<StringImpl*>::iterator end = table->m_table.end();
+    for (HashSet<StringImpl*>::iterator iter = table->m_table.begin(); iter != end; ++iter)
+        (*iter)->setIsAtomic(false);
+    delete table;
+}
+
+}

Added: trunk/Source/WTF/wtf/text/AtomicStringTable.h (0 => 151663)


--- trunk/Source/WTF/wtf/text/AtomicStringTable.h	                        (rev 0)
+++ trunk/Source/WTF/wtf/text/AtomicStringTable.h	2013-06-18 01:08:33 UTC (rev 151663)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Patrick Gansterer <par...@paroga.com>
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef WTF_AtomicStringTable_h
+#define WTF_AtomicStringTable_h
+
+#include <wtf/HashSet.h>
+#include <wtf/WTFThreadData.h>
+
+namespace WTF {
+
+class StringImpl;
+
+class AtomicStringTable {
+    WTF_MAKE_FAST_ALLOCATED;
+public:
+
+    static void create(WTFThreadData&);
+    HashSet<StringImpl*>& table() { return m_table; }
+
+private:
+    static void destroy(AtomicStringTable*);
+
+    HashSet<StringImpl*> m_table;
+};
+
+}
+
+#endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to