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

Unified Diff: chrome/browser/performance_monitor/performance_monitor.cc

Issue 10987040: Fix CPM casting issue; refactor renderer crash events (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Nit fixes, latest master Created 8 years, 2 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: chrome/browser/performance_monitor/performance_monitor.cc
diff --git a/chrome/browser/performance_monitor/performance_monitor.cc b/chrome/browser/performance_monitor/performance_monitor.cc
index d9fee3f38150530415bca0697c78965529f06e03..9b6475bbe607f837b2f23c3d3ee5302dab5fae83 100644
--- a/chrome/browser/performance_monitor/performance_monitor.cc
+++ b/chrome/browser/performance_monitor/performance_monitor.cc
@@ -35,6 +35,8 @@
#include "content/public/browser/load_notification_details.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
+#include "content/public/browser/render_widget_host.h"
+#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "net/url_request/url_request.h"
@@ -491,15 +493,23 @@ void PerformanceMonitor::Observe(int type,
break;
}
case content::NOTIFICATION_RENDERER_PROCESS_HANG: {
- content::WebContents* contents =
- content::Source<content::WebContents>(source).ptr();
- AddEvent(util::CreateRendererFreezeEvent(base::Time::Now(),
- contents->GetURL().spec()));
+ std::string url;
+ content::RenderWidgetHost* widget =
+ content::Source<content::RenderWidgetHost>(source).ptr();
+ if (widget->IsRenderView()) {
+ url = content::WebContents::FromRenderViewHost(
+ content::RenderViewHost::From(widget))->GetURL().spec();
+ }
+ AddEvent(util::CreateRendererFailureEvent(base::Time::Now(),
+ EVENT_RENDERER_HANG,
+ url));
break;
}
case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: {
- AddCrashEvent(*content::Details<
- content::RenderProcessHost::RendererClosedDetails>(details).ptr());
+ AddRendererClosedEvent(
+ content::Source<content::RenderProcessHost>(source).ptr(),
+ *content::Details<content::RenderProcessHost::RendererClosedDetails>(
+ details).ptr());
break;
}
case chrome::NOTIFICATION_PROFILE_ADDED: {
@@ -556,7 +566,8 @@ void PerformanceMonitor::AddExtensionEvent(EventType type,
extension->description()));
}
-void PerformanceMonitor::AddCrashEvent(
+void PerformanceMonitor::AddRendererClosedEvent(
+ content::RenderProcessHost* host,
const content::RenderProcessHost::RendererClosedDetails& details) {
// We only care if this is an invalid termination.
if (details.status == base::TERMINATION_STATUS_NORMAL_TERMINATION ||
@@ -566,9 +577,32 @@ void PerformanceMonitor::AddCrashEvent(
// Determine the type of crash.
EventType type =
details.status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED ?
- EVENT_KILLED_BY_OS_CRASH : EVENT_RENDERER_CRASH;
+ EVENT_RENDERER_KILLED : EVENT_RENDERER_CRASH;
+
+ content::RenderProcessHost::RenderWidgetHostsIterator iter =
+ host->GetRenderWidgetHostsIterator();
+
+ // A RenderProcessHost may contain multiple render views - for each valid
+ // render view, extract the url, and append it to the string, comma-separating
+ // the entries.
+ std::string url;
+ for (; !iter.IsAtEnd(); iter.Advance()) {
+ const content::RenderWidgetHost* widget = iter.GetCurrentValue();
+ DCHECK(widget);
+ if (!widget || !widget->IsRenderView())
+ continue;
+
+ content::RenderViewHost* view =
+ content::RenderViewHost::From(
+ const_cast<content::RenderWidgetHost*>(widget));
+
+ if (!url.empty())
+ url += ", ";
+
+ url += content::WebContents::FromRenderViewHost(view)->GetURL().spec();
+ }
- AddEvent(util::CreateCrashEvent(base::Time::Now(), type));
+ AddEvent(util::CreateRendererFailureEvent(base::Time::Now(), type, url));
}
} // namespace performance_monitor

Powered by Google App Engine
This is Rietveld 408576698