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

Unified Diff: content/renderer/java/gin_java_bridge_object.cc

Issue 969353004: [Android] Cache function templates in GinJavaBridgeObject to avoid memory leak (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « content/renderer/java/gin_java_bridge_object.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/java/gin_java_bridge_object.cc
diff --git a/content/renderer/java/gin_java_bridge_object.cc b/content/renderer/java/gin_java_bridge_object.cc
index 7c43276a2037e1d99e56dd9b7da4965852625d4b..8786cff342a529c4928c7a2de02e76953b26b10e 100644
--- a/content/renderer/java/gin_java_bridge_object.cc
+++ b/content/renderer/java/gin_java_bridge_object.cc
@@ -66,7 +66,8 @@ GinJavaBridgeObject::GinJavaBridgeObject(
: gin::NamedPropertyInterceptor(isolate, this),
dispatcher_(dispatcher),
object_id_(object_id),
- converter_(new GinJavaBridgeValueConverter()) {
+ converter_(new GinJavaBridgeValueConverter()),
+ template_cache_(isolate) {
}
GinJavaBridgeObject::~GinJavaBridgeObject() {
@@ -91,15 +92,10 @@ v8::Local<v8::Value> GinJavaBridgeObject::GetNamedProperty(
}
known_methods_[property] = dispatcher_->HasJavaMethod(object_id_, property);
}
- if (known_methods_[property]) {
- return gin::CreateFunctionTemplate(
- isolate,
- base::Bind(&GinJavaBridgeObject::InvokeMethod,
- base::Unretained(this),
- property))->GetFunction();
- } else {
+ if (known_methods_[property])
+ return GetFunctionTemplate(isolate, property)->GetFunction();
+ else
return v8::Local<v8::Value>();
- }
}
std::vector<std::string> GinJavaBridgeObject::EnumerateNamedProperties(
@@ -110,6 +106,19 @@ std::vector<std::string> GinJavaBridgeObject::EnumerateNamedProperties(
return std::vector<std::string> (method_names.begin(), method_names.end());
}
+v8::Local<v8::FunctionTemplate> GinJavaBridgeObject::GetFunctionTemplate(
+ v8::Isolate* isolate,
+ const std::string& name) {
+ v8::Local<v8::FunctionTemplate> function_template = template_cache_.Get(name);
+ if (!function_template.IsEmpty())
+ return function_template;
+ function_template = gin::CreateFunctionTemplate(
+ isolate, base::Bind(&GinJavaBridgeObject::InvokeMethod,
+ base::Unretained(this), name));
+ template_cache_.Set(name, function_template);
+ return function_template;
+}
+
v8::Handle<v8::Value> GinJavaBridgeObject::InvokeMethod(
const std::string& name,
gin::Arguments* args) {
« no previous file with comments | « content/renderer/java/gin_java_bridge_object.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698