diff options
author | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-21 15:49:07 +0000 |
---|---|---|
committer | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-21 15:49:07 +0000 |
commit | 1bfb4a388c07230622dcf6e7842db9ca125d5b43 (patch) | |
tree | 5874a9697b2c73eadbdc1fc735b51ddb73ccfdc4 /webkit/port | |
parent | 19e3447e72a1e849ccc5fd01340fc8cf0ce96cad (diff) | |
download | chromium_src-1bfb4a388c07230622dcf6e7842db9ca125d5b43.zip chromium_src-1bfb4a388c07230622dcf6e7842db9ca125d5b43.tar.gz chromium_src-1bfb4a388c07230622dcf6e7842db9ca125d5b43.tar.bz2 |
- Exteranalize strings but not the results of toString() on non-strings.
This increases our score on the DOM Perf benchmarks by about 10%
Review URL: http://codereview.chromium.org/79055
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14103 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/port')
-rw-r--r-- | webkit/port/bindings/v8/v8_binding.cpp | 26 | ||||
-rw-r--r-- | webkit/port/bindings/v8/v8_binding.h | 9 |
2 files changed, 22 insertions, 13 deletions
diff --git a/webkit/port/bindings/v8/v8_binding.cpp b/webkit/port/bindings/v8/v8_binding.cpp index 3a36fc51..0df0839 100644 --- a/webkit/port/bindings/v8/v8_binding.cpp +++ b/webkit/port/bindings/v8/v8_binding.cpp @@ -37,7 +37,8 @@ class WebCoreStringResource: public v8::String::ExternalStringResource { String impl_; }; -String v8StringToWebCoreString(v8::Handle<v8::String> v8_str) { +String v8StringToWebCoreString( + v8::Handle<v8::String> v8_str, bool externalize) { if (v8_str->IsExternal()) { WebCoreStringResource* str_resource = static_cast<WebCoreStringResource*>( v8_str->GetExternalStringResource()); @@ -69,12 +70,14 @@ String v8StringToWebCoreString(v8::Handle<v8::String> v8_str) { // TODO(mbelshe): Disable string morphing because it causes mystery // perf regressions on intl1 and intl2 page cyclers. It works fine // on machines other than the buildbots. -// -// WebCoreStringResource* resource = new WebCoreStringResource(result); -// if (!v8_str->MakeExternal(resource)) { -// // In case of a failure delete the external resource as it was not used. -// delete resource; -// } + + if (externalize) { + WebCoreStringResource* resource = new WebCoreStringResource(result); + if (!v8_str->MakeExternal(resource)) { + // In case of a failure delete the external resource as it was not used. + delete resource; + } + } return result; } @@ -83,18 +86,19 @@ String v8ValueToWebCoreString(v8::Handle<v8::Value> obj) { v8::Handle<v8::String> v8_str; if (obj->IsString()) { v8_str = v8::Handle<v8::String>::Cast(obj); + return v8StringToWebCoreString(v8_str, true); } else { v8::TryCatch block; v8_str = obj->ToString(); if (v8_str.IsEmpty()) return ""; } - return v8StringToWebCoreString(v8_str); + return v8StringToWebCoreString(v8_str, false); } AtomicString v8StringToAtomicWebCoreString(v8::Handle<v8::String> v8_str) { - String str = v8StringToWebCoreString(v8_str); + String str = v8StringToWebCoreString(v8_str, true); return AtomicString(str); } @@ -108,13 +112,13 @@ AtomicString v8ValueToAtomicWebCoreString(v8::Handle<v8::Value> v8_str) { v8::Handle<v8::String> v8String(const String& str) { if (!str.length()) return v8::String::Empty(); - return v8::String::NewExternal(new WebCoreStringResource(str)); + return v8::String::NewExternal(new WebCoreStringResource(str)); } v8::Local<v8::String> v8ExternalString(const String& str) { if (!str.length()) return v8::String::Empty(); - return v8::String::NewExternal(new WebCoreStringResource(str)); + return v8::String::NewExternal(new WebCoreStringResource(str)); } } // namespace WebCore diff --git a/webkit/port/bindings/v8/v8_binding.h b/webkit/port/bindings/v8/v8_binding.h index 8300dd7..2882026 100644 --- a/webkit/port/bindings/v8/v8_binding.h +++ b/webkit/port/bindings/v8/v8_binding.h @@ -23,13 +23,18 @@ inline const uint16_t* FromWebCoreString(const String& str) { // Convert v8 types to a WebCore::String. If the V8 string is not already // an external string then it is transformed into an external string at this // point to avoid repeated conversions. -String v8StringToWebCoreString(v8::Handle<v8::String> obj); +String v8StringToWebCoreString( + v8::Handle<v8::String> obj, bool externalize); String v8ValueToWebCoreString(v8::Handle<v8::Value> obj); // TODO(mbelshe): drop this in favor of the type specific // v8ValueToWebCoreString when we rework the code generation. inline String ToWebCoreString(v8::Handle<v8::Value> obj) { - return v8ValueToWebCoreString(obj); + return v8ValueToWebCoreString(obj); +} + +inline String ToWebCoreString(v8::Handle<v8::String> string) { + return v8StringToWebCoreString(string, true); } // Convert v8 types to a WebCore::AtomicString. |