Browse Source

cache routing_id so we can look up the render_view in RunDestructor with no v8 calls

Andy Dill 8 years ago
parent
commit
067aa3dbef
2 changed files with 8 additions and 2 deletions
  1. 7 2
      atom/common/api/remote_object_freer.cc
  2. 1 0
      atom/common/api/remote_object_freer.h

+ 7 - 2
atom/common/api/remote_object_freer.cc

@@ -41,14 +41,19 @@ void RemoteObjectFreer::BindTo(
 RemoteObjectFreer::RemoteObjectFreer(
     v8::Isolate* isolate, v8::Local<v8::Object> target, int object_id)
     : ObjectLifeMonitor(isolate, target),
-      object_id_(object_id) {
+      object_id_(object_id),
+      routing_id_(0) {
+  content::RenderView* render_view = GetCurrentRenderView();
+  if (render_view) {
+    routing_id_ = render_view->GetRoutingID();
+  }
 }
 
 RemoteObjectFreer::~RemoteObjectFreer() {
 }
 
 void RemoteObjectFreer::RunDestructor() {
-  content::RenderView* render_view = GetCurrentRenderView();
+  content::RenderView* render_view = content::RenderView::FromRoutingID(routing_id_);
   if (!render_view)
     return;
 

+ 1 - 0
atom/common/api/remote_object_freer.h

@@ -23,6 +23,7 @@ class RemoteObjectFreer : public ObjectLifeMonitor {
 
  private:
   int object_id_;
+  int routing_id_;
 
   DISALLOW_COPY_AND_ASSIGN(RemoteObjectFreer);
 };