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 3855d7ee223446aa05e556519fe12961131e149a..f06415aed8090a0d676d146c4ef382f2ea7dc43f 100644 |
--- a/content/browser/frame_host/render_frame_host_impl.cc |
+++ b/content/browser/frame_host/render_frame_host_impl.cc |
@@ -1311,37 +1311,41 @@ void RenderFrameHostImpl::OnBeforeUnloadACK( |
base::TimeTicks before_unload_end_time = renderer_before_unload_end_time; |
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(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 = |
- converter.ToLocalTimeTicks( |
- RemoteTimeTicks::FromTimeTicks(renderer_before_unload_end_time)); |
- before_unload_end_time = browser_before_unload_end_time.ToTimeTicks(); |
- |
- // Collect UMA on the inter-process skew. |
- bool is_skew_additive = false; |
- if (converter.IsSkewAdditiveForMetrics()) { |
- is_skew_additive = true; |
- base::TimeDelta skew = converter.GetSkewForMetrics(); |
- if (skew >= base::TimeDelta()) { |
- UMA_HISTOGRAM_TIMES( |
- "InterProcessTimeTicks.BrowserBehind_RendererToBrowser", skew); |
- } else { |
- UMA_HISTOGRAM_TIMES( |
- "InterProcessTimeTicks.BrowserAhead_RendererToBrowser", -skew); |
+ |
+ if (!base::TimeTicks::IsConsistentAcrossProcesses()) { |
+ // TimeTicks is not consistent across processes and we are passing |
+ // TimeTicks across process boundaries so 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. |
+ InterProcessTimeTicksConverter converter( |
+ LocalTimeTicks::FromTimeTicks(send_before_unload_start_time_), |
+ 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 = |
+ converter.ToLocalTimeTicks( |
+ RemoteTimeTicks::FromTimeTicks(renderer_before_unload_end_time)); |
+ before_unload_end_time = browser_before_unload_end_time.ToTimeTicks(); |
+ |
+ // Collect UMA on the inter-process skew. |
+ bool is_skew_additive = false; |
+ if (converter.IsSkewAdditiveForMetrics()) { |
+ is_skew_additive = true; |
+ base::TimeDelta skew = converter.GetSkewForMetrics(); |
+ if (skew >= base::TimeDelta()) { |
+ UMA_HISTOGRAM_TIMES( |
+ "InterProcessTimeTicks.BrowserBehind_RendererToBrowser", skew); |
+ } else { |
+ UMA_HISTOGRAM_TIMES( |
+ "InterProcessTimeTicks.BrowserAhead_RendererToBrowser", -skew); |
+ } |
} |
+ UMA_HISTOGRAM_BOOLEAN( |
+ "InterProcessTimeTicks.IsSkewAdditive_RendererToBrowser", |
+ is_skew_additive); |
} |
- UMA_HISTOGRAM_BOOLEAN( |
- "InterProcessTimeTicks.IsSkewAdditive_RendererToBrowser", |
- is_skew_additive); |
base::TimeDelta on_before_unload_overhead_time = |
(receive_before_unload_ack_time - send_before_unload_start_time_) - |