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

Unified Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 659773002: New histogram to track overhead time spent around beforeunload event + fixes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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: content/browser/frame_host/render_frame_host_impl.cc
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 436f4fbad1ac99df7ec45e782d7218d9f4df1774..89f04c0d20a45e8e6f1934fbe08822f463796288 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -822,15 +822,6 @@ void RenderFrameHostImpl::OnBeforeUnloadACK(
const base::TimeTicks& renderer_before_unload_end_time) {
TRACE_EVENT_ASYNC_END0(
"navigation", "RenderFrameHostImpl::BeforeUnload", this);
- // TODO(creis): Support beforeunload on subframes. For now just pretend that
- // the handler ran and allowed the navigation to proceed.
- if (GetParent()) {
- is_waiting_for_beforeunload_ack_ = false;
- frame_tree_node_->render_manager()->OnBeforeUnloadACK(
- unload_ack_is_for_cross_site_transition_, proceed,
- renderer_before_unload_end_time);
- return;
- }
render_view_host_->decrement_in_flight_event_count();
render_view_host_->StopHangMonitorTimeout();
@@ -849,16 +840,16 @@ void RenderFrameHostImpl::OnBeforeUnloadACK(
is_waiting_for_beforeunload_ack_ = false;
base::TimeTicks before_unload_end_time;
- if (!send_before_unload_start_time_.is_null() &&
carlosk 2014/10/15 12:29:04 This wasn't really working anyway.
- !renderer_before_unload_start_time.is_null() &&
+ if (!renderer_before_unload_start_time.is_null() &&
!renderer_before_unload_end_time.is_null()) {
// When passing TimeTicks across process boundaries, we need to compensate
// for any skew between the processes. Here we are converting the
// renderer's notion of before_unload_end_time to TimeTicks in the browser
// process. See comments in inter_process_time_ticks_converter.h for more.
+ base::TimeTicks receive_before_unload_ack_time = base::TimeTicks::Now();
InterProcessTimeTicksConverter converter(
LocalTimeTicks::FromTimeTicks(send_before_unload_start_time_),
- LocalTimeTicks::FromTimeTicks(base::TimeTicks::Now()),
+ LocalTimeTicks::FromTimeTicks(receive_before_unload_ack_time),
RemoteTimeTicks::FromTimeTicks(renderer_before_unload_start_time),
RemoteTimeTicks::FromTimeTicks(renderer_before_unload_end_time));
LocalTimeTicks browser_before_unload_end_time =
@@ -883,6 +874,12 @@ void RenderFrameHostImpl::OnBeforeUnloadACK(
"InterProcessTimeTicks.IsSkewAdditive_RendererToBrowser",
is_skew_additive);
+ base::TimeDelta on_before_unload_overhead_time =
+ (receive_before_unload_ack_time - send_before_unload_start_time_) -
+ (renderer_before_unload_end_time - renderer_before_unload_start_time);
+ UMA_HISTOGRAM_TIMES("Navigation.OnBeforeUnloadOverheadTime",
+ on_before_unload_overhead_time);
+
frame_tree_node_->navigator()->LogBeforeUnloadTime(
renderer_before_unload_start_time, renderer_before_unload_end_time);
}
@@ -1303,17 +1300,16 @@ void RenderFrameHostImpl::Stop() {
}
void RenderFrameHostImpl::DispatchBeforeUnload(bool for_cross_site_transition) {
- TRACE_EVENT_ASYNC_BEGIN0(
- "navigation", "RenderFrameHostImpl::BeforeUnload", this);
- // TODO(creis): Support subframes.
+ // TODO(creis): Support beforeunload on subframes. For now just pretend that
+ // the handler ran and allowed the navigation to proceed.
if (GetParent() || !IsRenderFrameLive()) {
// We don't have a live renderer, so just skip running beforeunload.
- is_waiting_for_beforeunload_ack_ = true;
- unload_ack_is_for_cross_site_transition_ = for_cross_site_transition;
- base::TimeTicks now = base::TimeTicks::Now();
- OnBeforeUnloadACK(true, now, now);
+ frame_tree_node_->render_manager()->OnBeforeUnloadACK(
+ for_cross_site_transition, true, base::TimeTicks::Now());
return;
}
+ TRACE_EVENT_ASYNC_BEGIN0(
+ "navigation", "RenderFrameHostImpl::BeforeUnload", this);
carlosk 2014/10/15 12:29:04 I moved this trace start down for it doesn't seem
// This may be called more than once (if the user clicks the tab close button
// several times, or if she clicks the tab close button then the browser close

Powered by Google App Engine
This is Rietveld 408576698