summaryrefslogtreecommitdiffstats
path: root/webkit/port
diff options
context:
space:
mode:
authordavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-21 15:49:07 +0000
committerdavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-21 15:49:07 +0000
commit1bfb4a388c07230622dcf6e7842db9ca125d5b43 (patch)
tree5874a9697b2c73eadbdc1fc735b51ddb73ccfdc4 /webkit/port
parent19e3447e72a1e849ccc5fd01340fc8cf0ce96cad (diff)
downloadchromium_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.cpp26
-rw-r--r--webkit/port/bindings/v8/v8_binding.h9
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.