- 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();
}