Title: [89353] trunk/Source
Revision
89353
Author
commit-qu...@webkit.org
Date
2011-06-21 07:28:27 -0700 (Tue, 21 Jun 2011)

Log Message

2011-06-21  Sheriff Bot  <webkit.review....@gmail.com>

        Unreviewed, rolling out r89185.
        http://trac.webkit.org/changeset/89185
        https://bugs.webkit.org/show_bug.cgi?id=63068

        For breaking navigation with inspector opened. (Requested by
        pfeldman on #webkit).

        * bindings/v8/V8Binding.cpp:
        (WebCore::enableStringImplCache):
        (WebCore::getStringCache):
        (WebCore::cachedStringCallback):
        (WebCore::v8ExternalStringSlow):
        * bindings/v8/V8Binding.h:
        (WebCore::v8ExternalString):
        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::gcPrologue):
2011-06-21  Sheriff Bot  <webkit.review....@gmail.com>

        Unreviewed, rolling out r89185.
        http://trac.webkit.org/changeset/89185
        https://bugs.webkit.org/show_bug.cgi?id=63068

        For breaking navigation with inspector opened. (Requested by
        pfeldman on #webkit).

        * src/WebScriptController.cpp:
        (WebKit::WebScriptController::enableV8SingleThreadMode):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (89352 => 89353)


--- trunk/Source/WebCore/ChangeLog	2011-06-21 14:16:48 UTC (rev 89352)
+++ trunk/Source/WebCore/ChangeLog	2011-06-21 14:28:27 UTC (rev 89353)
@@ -1,3 +1,22 @@
+2011-06-21  Sheriff Bot  <webkit.review....@gmail.com>
+
+        Unreviewed, rolling out r89185.
+        http://trac.webkit.org/changeset/89185
+        https://bugs.webkit.org/show_bug.cgi?id=63068
+
+        For breaking navigation with inspector opened. (Requested by
+        pfeldman on #webkit).
+
+        * bindings/v8/V8Binding.cpp:
+        (WebCore::enableStringImplCache):
+        (WebCore::getStringCache):
+        (WebCore::cachedStringCallback):
+        (WebCore::v8ExternalStringSlow):
+        * bindings/v8/V8Binding.h:
+        (WebCore::v8ExternalString):
+        * bindings/v8/V8GCController.cpp:
+        (WebCore::V8GCController::gcPrologue):
+
 2011-06-21  Pavel Feldman  <pfeld...@google.com>
 
         Reviewed by Yury Semikhatsky.

Modified: trunk/Source/WebCore/bindings/v8/V8Binding.cpp (89352 => 89353)


--- trunk/Source/WebCore/bindings/v8/V8Binding.cpp	2011-06-21 14:16:48 UTC (rev 89352)
+++ trunk/Source/WebCore/bindings/v8/V8Binding.cpp	2011-06-21 14:28:27 UTC (rev 89353)
@@ -463,6 +463,13 @@
     return AtomicString(v8NonStringValueToWebCoreString(object));
 }
 
+static bool stringImplCacheEnabled = false;
+
+void enableStringImplCache()
+{
+    stringImplCacheEnabled = true;
+}
+
 static v8::Local<v8::String> makeExternalString(const String& string)
 {
     WebCoreStringResource* stringResource = new WebCoreStringResource(string);
@@ -473,32 +480,43 @@
     return newString;
 }
 
+typedef HashMap<StringImpl*, v8::String*> StringCache;
+
+static StringCache& getStringCache()
+{
+    ASSERT(WTF::isMainThread());
+    DEFINE_STATIC_LOCAL(StringCache, mainThreadStringCache, ());
+    return mainThreadStringCache;
+}
+
 static void cachedStringCallback(v8::Persistent<v8::Value> wrapper, void* parameter)
 {
+    ASSERT(WTF::isMainThread());
     StringImpl* stringImpl = static_cast<StringImpl*>(parameter);
-    V8BindingPerIsolateData::current()->stringCache()->remove(stringImpl);
+    ASSERT(getStringCache().contains(stringImpl));
+    getStringCache().remove(stringImpl);
     wrapper.Dispose();
     stringImpl->deref();
 }
 
-void StringCache::remove(StringImpl* stringImpl) 
-{
-    ASSERT(m_stringCache.contains(stringImpl));
-    m_stringCache.remove(stringImpl);
-}
+RefPtr<StringImpl> lastStringImpl = 0;
+v8::Persistent<v8::String> lastV8String;
 
-
-v8::Local<v8::String> StringCache::v8ExternalStringSlow(StringImpl* stringImpl)
+v8::Local<v8::String> v8ExternalStringSlow(StringImpl* stringImpl)
 {
     if (!stringImpl->length())
         return v8::String::Empty();
 
-    v8::String* cachedV8String = m_stringCache.get(stringImpl);
+    if (!stringImplCacheEnabled)
+        return makeExternalString(String(stringImpl));
+
+    StringCache& stringCache = getStringCache();
+    v8::String* cachedV8String = stringCache.get(stringImpl);
     if (cachedV8String) {
         v8::Persistent<v8::String> handle(cachedV8String);
         if (!handle.IsNearDeath() && !handle.IsEmpty()) {
-            m_lastStringImpl = stringImpl;
-            m_lastV8String = handle;
+            lastStringImpl = stringImpl;
+            lastV8String = handle;
             return v8::Local<v8::String>::New(handle);
         }
     }
@@ -513,10 +531,10 @@
 
     stringImpl->ref();
     wrapper.MakeWeak(stringImpl, cachedStringCallback);
-    m_stringCache.set(stringImpl, *wrapper);
+    stringCache.set(stringImpl, *wrapper);
 
-    m_lastStringImpl = stringImpl;
-    m_lastV8String = wrapper;
+    lastStringImpl = stringImpl;
+    lastV8String = wrapper;
 
     return newString;
 }

Modified: trunk/Source/WebCore/bindings/v8/V8Binding.h (89352 => 89353)


--- trunk/Source/WebCore/bindings/v8/V8Binding.h	2011-06-21 14:16:48 UTC (rev 89352)
+++ trunk/Source/WebCore/bindings/v8/V8Binding.h	2011-06-21 14:28:27 UTC (rev 89353)
@@ -50,40 +50,6 @@
     };
     typedef BindingSecurity<V8Binding> V8BindingSecurity;
 
-    class StringCache {
-    public:
-        StringCache() { }
-
-        v8::Local<v8::String> v8ExternalString(StringImpl* stringImpl) 
-        {
-            if (m_lastStringImpl.get() == stringImpl) {
-                ASSERT(!m_lastV8String.IsNearDeath());
-                ASSERT(!m_lastV8String.IsEmpty());
-                return v8::Local<v8::String>::New(m_lastV8String);
-            }
-
-            return v8ExternalStringSlow(stringImpl);
-        }
-
-        void clearOnGC() 
-        {
-            m_lastStringImpl = 0;
-            m_lastV8String.Clear();
-        }
-
-        void remove(StringImpl*);
-
-    private:
-        v8::Local<v8::String> v8ExternalStringSlow(StringImpl*);
-
-        HashMap<StringImpl*, v8::String*> m_stringCache;
-        v8::Persistent<v8::String> m_lastV8String;
-        // Note: RefPtr is a must as we cache by StringImpl* equality, not identity
-        // hence lastStringImpl might be not a key of the cache (in sense of identity)
-        // and hence it's not refed on addition.
-        RefPtr<StringImpl> m_lastStringImpl;
-    };
-
     class V8BindingPerIsolateData {
     public:
         static V8BindingPerIsolateData* create(v8::Isolate*);
@@ -106,7 +72,6 @@
         TemplateMap& templateMap() { return m_templates; }
         v8::Persistent<v8::String>& toStringName() { return m_toStringName; }
         v8::Persistent<v8::FunctionTemplate>& toStringTemplate() { return m_toStringTemplate; }
-        StringCache* stringCache() { return &m_stringCache; }
 
     private:
         explicit V8BindingPerIsolateData(v8::Isolate*);
@@ -116,7 +81,6 @@
         TemplateMap m_templates;
         v8::Persistent<v8::String> m_toStringName;
         v8::Persistent<v8::FunctionTemplate> m_toStringTemplate;
-        StringCache m_stringCache;
     };
 
 
@@ -146,6 +110,13 @@
     AtomicString v8NonStringValueToAtomicWebCoreString(v8::Handle<v8::Value>);
     AtomicString v8ValueToAtomicWebCoreString(v8::Handle<v8::Value> value);
 
+    // Note: RefPtr is a must as we cache by StringImpl* equality, not identity
+    // hence lastStringImpl might be not a key of the cache (in sense of identity)
+    // and hence it's not refed on addition.
+    extern RefPtr<StringImpl> lastStringImpl;
+    extern v8::Persistent<v8::String> lastV8String;
+    v8::Local<v8::String> v8ExternalStringSlow(StringImpl* stringImpl);
+
     // Return a V8 external string that shares the underlying buffer with the given
     // WebCore string. The reference counting mechanism is used to keep the
     // underlying buffer alive while the string is still live in the V8 engine.
@@ -155,8 +126,13 @@
         if (!stringImpl)
             return v8::String::Empty();
 
-        V8BindingPerIsolateData* data = ""
-        return data->stringCache()->v8ExternalString(stringImpl);
+        if (lastStringImpl.get() == stringImpl) {
+            ASSERT(!lastV8String.IsNearDeath());
+            ASSERT(!lastV8String.IsEmpty());
+            return v8::Local<v8::String>::New(lastV8String);
+        }
+
+        return v8ExternalStringSlow(stringImpl);
     }
 
     // Convert a string to a V8 string.

Modified: trunk/Source/WebCore/bindings/v8/V8GCController.cpp (89352 => 89353)


--- trunk/Source/WebCore/bindings/v8/V8GCController.cpp	2011-06-21 14:16:48 UTC (rev 89352)
+++ trunk/Source/WebCore/bindings/v8/V8GCController.cpp	2011-06-21 14:28:27 UTC (rev 89353)
@@ -467,8 +467,8 @@
     grouperVisitor.applyGrouping();
 
     // Clean single element cache for string conversions.
-    V8BindingPerIsolateData* data = ""
-    data->stringCache()->clearOnGC();
+    lastStringImpl = 0;
+    lastV8String.Clear();
 }
 
 class GCEpilogueVisitor : public DOMWrapperMap<void>::Visitor {

Modified: trunk/Source/WebKit/chromium/ChangeLog (89352 => 89353)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-06-21 14:16:48 UTC (rev 89352)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-06-21 14:28:27 UTC (rev 89353)
@@ -1,3 +1,15 @@
+2011-06-21  Sheriff Bot  <webkit.review....@gmail.com>
+
+        Unreviewed, rolling out r89185.
+        http://trac.webkit.org/changeset/89185
+        https://bugs.webkit.org/show_bug.cgi?id=63068
+
+        For breaking navigation with inspector opened. (Requested by
+        pfeldman on #webkit).
+
+        * src/WebScriptController.cpp:
+        (WebKit::WebScriptController::enableV8SingleThreadMode):
+
 2011-06-20  Scott Byer  <scottb...@chromium.org>
 
         Reviewed by Adam Barth.

Modified: trunk/Source/WebKit/chromium/src/WebScriptController.cpp (89352 => 89353)


--- trunk/Source/WebKit/chromium/src/WebScriptController.cpp	2011-06-21 14:16:48 UTC (rev 89352)
+++ trunk/Source/WebKit/chromium/src/WebScriptController.cpp	2011-06-21 14:28:27 UTC (rev 89353)
@@ -48,6 +48,7 @@
 
 void WebScriptController::enableV8SingleThreadMode()
 {
+    enableStringImplCache();
     enableFasterDOMStoreAccess();
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to