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

Side by Side Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 2090783002: Limit InterProcessTimeTicksConverter to platforms that require it (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor comment fix Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « base/time/time_win.cc ('k') | content/child/resource_dispatcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/frame_host/render_frame_host_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 1293 matching lines...) Expand 10 before | Expand all | Expand 10 after
1304 if (!is_waiting_for_beforeunload_ack_) { 1304 if (!is_waiting_for_beforeunload_ack_) {
1305 return; 1305 return;
1306 } 1306 }
1307 DCHECK(!send_before_unload_start_time_.is_null()); 1307 DCHECK(!send_before_unload_start_time_.is_null());
1308 1308
1309 // Sets a default value for before_unload_end_time so that the browser 1309 // Sets a default value for before_unload_end_time so that the browser
1310 // survives a hacked renderer. 1310 // survives a hacked renderer.
1311 base::TimeTicks before_unload_end_time = renderer_before_unload_end_time; 1311 base::TimeTicks before_unload_end_time = renderer_before_unload_end_time;
1312 if (!renderer_before_unload_start_time.is_null() && 1312 if (!renderer_before_unload_start_time.is_null() &&
1313 !renderer_before_unload_end_time.is_null()) { 1313 !renderer_before_unload_end_time.is_null()) {
1314 // When passing TimeTicks across process boundaries, we need to compensate
1315 // for any skew between the processes. Here we are converting the
1316 // renderer's notion of before_unload_end_time to TimeTicks in the browser
1317 // process. See comments in inter_process_time_ticks_converter.h for more.
1318 base::TimeTicks receive_before_unload_ack_time = base::TimeTicks::Now(); 1314 base::TimeTicks receive_before_unload_ack_time = base::TimeTicks::Now();
1319 InterProcessTimeTicksConverter converter(
1320 LocalTimeTicks::FromTimeTicks(send_before_unload_start_time_),
1321 LocalTimeTicks::FromTimeTicks(receive_before_unload_ack_time),
1322 RemoteTimeTicks::FromTimeTicks(renderer_before_unload_start_time),
1323 RemoteTimeTicks::FromTimeTicks(renderer_before_unload_end_time));
1324 LocalTimeTicks browser_before_unload_end_time =
1325 converter.ToLocalTimeTicks(
1326 RemoteTimeTicks::FromTimeTicks(renderer_before_unload_end_time));
1327 before_unload_end_time = browser_before_unload_end_time.ToTimeTicks();
1328 1315
1329 // Collect UMA on the inter-process skew. 1316 if (!base::TimeTicks::IsConsistentAcrossProcesses()) {
1330 bool is_skew_additive = false; 1317 // TimeTicks is not consistent across processes and we are passing
1331 if (converter.IsSkewAdditiveForMetrics()) { 1318 // TimeTicks across process boundaries so we need to compensate for any
1332 is_skew_additive = true; 1319 // skew between the processes. Here we are converting the renderer's
1333 base::TimeDelta skew = converter.GetSkewForMetrics(); 1320 // notion of before_unload_end_time to TimeTicks in the browser process.
1334 if (skew >= base::TimeDelta()) { 1321 // See comments in inter_process_time_ticks_converter.h for more.
1335 UMA_HISTOGRAM_TIMES( 1322 InterProcessTimeTicksConverter converter(
1336 "InterProcessTimeTicks.BrowserBehind_RendererToBrowser", skew); 1323 LocalTimeTicks::FromTimeTicks(send_before_unload_start_time_),
1337 } else { 1324 LocalTimeTicks::FromTimeTicks(receive_before_unload_ack_time),
1338 UMA_HISTOGRAM_TIMES( 1325 RemoteTimeTicks::FromTimeTicks(renderer_before_unload_start_time),
1339 "InterProcessTimeTicks.BrowserAhead_RendererToBrowser", -skew); 1326 RemoteTimeTicks::FromTimeTicks(renderer_before_unload_end_time));
1327 LocalTimeTicks browser_before_unload_end_time =
1328 converter.ToLocalTimeTicks(
1329 RemoteTimeTicks::FromTimeTicks(renderer_before_unload_end_time));
1330 before_unload_end_time = browser_before_unload_end_time.ToTimeTicks();
1331
1332 // Collect UMA on the inter-process skew.
1333 bool is_skew_additive = false;
1334 if (converter.IsSkewAdditiveForMetrics()) {
1335 is_skew_additive = true;
1336 base::TimeDelta skew = converter.GetSkewForMetrics();
1337 if (skew >= base::TimeDelta()) {
1338 UMA_HISTOGRAM_TIMES(
1339 "InterProcessTimeTicks.BrowserBehind_RendererToBrowser", skew);
1340 } else {
1341 UMA_HISTOGRAM_TIMES(
1342 "InterProcessTimeTicks.BrowserAhead_RendererToBrowser", -skew);
1343 }
1340 } 1344 }
1345 UMA_HISTOGRAM_BOOLEAN(
1346 "InterProcessTimeTicks.IsSkewAdditive_RendererToBrowser",
1347 is_skew_additive);
1341 } 1348 }
1342 UMA_HISTOGRAM_BOOLEAN(
1343 "InterProcessTimeTicks.IsSkewAdditive_RendererToBrowser",
1344 is_skew_additive);
1345 1349
1346 base::TimeDelta on_before_unload_overhead_time = 1350 base::TimeDelta on_before_unload_overhead_time =
1347 (receive_before_unload_ack_time - send_before_unload_start_time_) - 1351 (receive_before_unload_ack_time - send_before_unload_start_time_) -
1348 (renderer_before_unload_end_time - renderer_before_unload_start_time); 1352 (renderer_before_unload_end_time - renderer_before_unload_start_time);
1349 UMA_HISTOGRAM_TIMES("Navigation.OnBeforeUnloadOverheadTime", 1353 UMA_HISTOGRAM_TIMES("Navigation.OnBeforeUnloadOverheadTime",
1350 on_before_unload_overhead_time); 1354 on_before_unload_overhead_time);
1351 1355
1352 frame_tree_node_->navigator()->LogBeforeUnloadTime( 1356 frame_tree_node_->navigator()->LogBeforeUnloadTime(
1353 renderer_before_unload_start_time, renderer_before_unload_end_time); 1357 renderer_before_unload_start_time, renderer_before_unload_end_time);
1354 } 1358 }
(...skipping 1551 matching lines...) Expand 10 before | Expand all | Expand 10 after
2906 // handler after it's destroyed so it can't run after the RFHI is destroyed. 2910 // handler after it's destroyed so it can't run after the RFHI is destroyed.
2907 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind( 2911 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind(
2908 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this))); 2912 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this)));
2909 } 2913 }
2910 2914
2911 void RenderFrameHostImpl::DeleteWebBluetoothService() { 2915 void RenderFrameHostImpl::DeleteWebBluetoothService() {
2912 web_bluetooth_service_.reset(); 2916 web_bluetooth_service_.reset();
2913 } 2917 }
2914 2918
2915 } // namespace content 2919 } // namespace content
OLDNEW
« no previous file with comments | « base/time/time_win.cc ('k') | content/child/resource_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698