Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp

Issue 2873543002: First implementation of lazily cached accessor for DOM attributes. (Closed)
Patch Set: whitespace and renaming fixes Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp b/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp
index 6ba91f90f2b367f41ae0b675ab5120949308f498..fcbfe30665c93732a58fbb67a0a89ef6936f5e67 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp
@@ -157,6 +157,7 @@ v8::Local<FunctionOrTemplate> CreateAccessorFunctionOrTemplate(
v8::Isolate*,
v8::FunctionCallback,
V8DOMConfiguration::CachedPropertyKey,
+ V8DOMConfiguration::CachedAccessorInitCallback,
v8::Local<v8::Value> data,
v8::Local<v8::Signature>,
int length);
@@ -167,15 +168,23 @@ CreateAccessorFunctionOrTemplate<v8::FunctionTemplate>(
v8::Isolate* isolate,
v8::FunctionCallback callback,
V8DOMConfiguration::CachedPropertyKey cached_property_key,
+ V8DOMConfiguration::CachedAccessorInitCallback
+ cached_accessor_init_callback,
v8::Local<v8::Value> data,
v8::Local<v8::Signature> signature,
int length) {
v8::Local<v8::FunctionTemplate> function_template;
if (callback) {
if (cached_property_key) {
- function_template = v8::FunctionTemplate::NewWithCache(
- isolate, callback, cached_property_key(isolate), data, signature,
- length);
+ if (cached_accessor_init_callback) {
+ function_template = v8::FunctionTemplate::NewWithLazyCache(
+ isolate, callback, cached_property_key(isolate),
+ cached_accessor_init_callback, data, signature, length);
+ } else {
+ function_template = v8::FunctionTemplate::NewWithCache(
+ isolate, callback, cached_property_key(isolate), data, signature,
+ length);
+ }
} else {
function_template =
v8::FunctionTemplate::New(isolate, callback, data, signature, length);
@@ -194,6 +203,7 @@ v8::Local<v8::Function> CreateAccessorFunctionOrTemplate<v8::Function>(
v8::Isolate* isolate,
v8::FunctionCallback callback,
V8DOMConfiguration::CachedPropertyKey,
+ V8DOMConfiguration::CachedAccessorInitCallback,
v8::Local<v8::Value> data,
v8::Local<v8::Signature> signature,
int length) {
@@ -202,7 +212,7 @@ v8::Local<v8::Function> CreateAccessorFunctionOrTemplate<v8::Function>(
v8::Local<v8::FunctionTemplate> function_template =
CreateAccessorFunctionOrTemplate<v8::FunctionTemplate>(
- isolate, callback, nullptr, data, signature, length);
+ isolate, callback, nullptr, nullptr, data, signature, length);
if (function_template.IsEmpty())
return v8::Local<v8::Function>();
@@ -228,8 +238,11 @@ void InstallAccessorInternal(
v8::FunctionCallback getter_callback = accessor.getter;
v8::FunctionCallback setter_callback = accessor.setter;
V8DOMConfiguration::CachedPropertyKey cached_property_key = nullptr;
+ V8DOMConfiguration::CachedAccessorInitCallback cached_accessor_init_callback =
+ nullptr;
if (world.IsMainWorld()) {
cached_property_key = accessor.cached_property_key;
+ cached_accessor_init_callback = accessor.cached_accessor_init_callback;
}
// Support [LenientThis] by not specifying the signature. V8 does not do
@@ -246,10 +259,11 @@ void InstallAccessorInternal(
(V8DOMConfiguration::kOnInstance | V8DOMConfiguration::kOnPrototype)) {
v8::Local<FunctionOrTemplate> getter =
CreateAccessorFunctionOrTemplate<FunctionOrTemplate>(
- isolate, getter_callback, cached_property_key, data, signature, 0);
+ isolate, getter_callback, cached_property_key,
+ cached_accessor_init_callback, data, signature, 0);
v8::Local<FunctionOrTemplate> setter =
CreateAccessorFunctionOrTemplate<FunctionOrTemplate>(
- isolate, setter_callback, nullptr, data, signature, 1);
+ isolate, setter_callback, nullptr, nullptr, data, signature, 1);
if (accessor.property_location_configuration &
V8DOMConfiguration::kOnInstance) {
instance_or_template->SetAccessorProperty(
@@ -270,12 +284,12 @@ void InstallAccessorInternal(
// type check against a holder.
v8::Local<FunctionOrTemplate> getter =
CreateAccessorFunctionOrTemplate<FunctionOrTemplate>(
- isolate, getter_callback, nullptr, data, v8::Local<v8::Signature>(),
- 0);
+ isolate, getter_callback, nullptr, nullptr, data,
+ v8::Local<v8::Signature>(), 0);
v8::Local<FunctionOrTemplate> setter =
CreateAccessorFunctionOrTemplate<FunctionOrTemplate>(
- isolate, setter_callback, nullptr, data, v8::Local<v8::Signature>(),
- 1);
+ isolate, setter_callback, nullptr, nullptr, data,
+ v8::Local<v8::Signature>(), 1);
interface_or_template->SetAccessorProperty(
name, getter, setter,
static_cast<v8::PropertyAttribute>(accessor.attribute));

Powered by Google App Engine
This is Rietveld 408576698