Chromium Code Reviews| 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 |