Index: chrome/browser/chrome_browser_field_trials.cc |
diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc |
index 3d8ea8bd6e93ed2367f84fa86d673f2aaf85a9ce..033f9818b661d5d4ca6345163a837ea8db29f1eb 100644 |
--- a/chrome/browser/chrome_browser_field_trials.cc |
+++ b/chrome/browser/chrome_browser_field_trials.cc |
@@ -61,18 +61,44 @@ void InstantiatePersistentHistograms() { |
if (!base::PathService::Get(chrome::DIR_USER_DATA, &metrics_dir)) |
return; |
- base::FilePath metrics_file; |
- base::FilePath active_file; |
- base::FilePath spare_file; |
+ // Remove any existing file from its legacy location. |
+ // TODO(bcwhite): Remove this block of code in M62 or later. |
+ base::FilePath legacy_file; |
base::GlobalHistogramAllocator::ConstructFilePaths( |
metrics_dir, ChromeMetricsServiceClient::kBrowserMetricsName, |
- &metrics_file, &active_file, &spare_file); |
+ &legacy_file, nullptr, nullptr); |
+ base::PostTaskWithTraits( |
+ FROM_HERE, |
+ {base::MayBlock(), base::TaskPriority::BACKGROUND, |
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}, |
+ base::BindOnce(base::IgnoreResult(&base::DeleteFile), |
+ base::Passed(&legacy_file), /*recursive=*/false)); |
+ |
+ // Create a directory for storing completed metrics files. Files in this |
+ // directory must have embedded system profiles. If the directory can't be |
+ // created, the file will just be deleted below. |
+ base::FilePath upload_dir = |
+ metrics_dir.AppendASCII(ChromeMetricsServiceClient::kBrowserMetricsName); |
+ base::CreateDirectory(upload_dir); |
+ |
+ // Metrics files are typically created as a |spare_file| in the profile |
+ // directory (e.g. "BrowserMetrics-spare.pma") and are then rotated into |
+ // the |active_file| (e.g. "BrowserMetrics-active.pma") location for use |
+ // during the browser run. It is then moved to a time-stamped file in a |
+ // subdirectory (e.g. "BrowserMetrics/BrowserMetrics-1234ABCD.pma") for |
+ // upload when convenient. |
+ base::FilePath upload_file; |
+ base::FilePath active_file; |
+ base::FilePath spare_file; |
+ base::GlobalHistogramAllocator::ConstructFilePathsForUploadDir( |
+ metrics_dir, upload_dir, ChromeMetricsServiceClient::kBrowserMetricsName, |
+ &upload_file, &active_file, &spare_file); |
// Move any existing "active" file to the final name from which it will be |
// read when reporting initial stability metrics. If there is no file to |
// move, remove any old, existing file from before the previous session. |
- if (!base::ReplaceFile(active_file, metrics_file, nullptr)) |
- base::DeleteFile(metrics_file, /*recursive=*/false); |
+ if (!base::ReplaceFile(active_file, upload_file, nullptr)) |
+ base::DeleteFile(active_file, /*recursive=*/false); |
// This is used to report results to an UMA histogram. |
enum InitResult { |