OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/chrome_browser_field_trials.h" | 5 #include "chrome/browser/chrome_browser_field_trials.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/feature_list.h" | 10 #include "base/feature_list.h" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 InitResult result; | 66 InitResult result; |
67 | 67 |
68 // Create persistent/shared memory and allow histograms to be stored in | 68 // Create persistent/shared memory and allow histograms to be stored in |
69 // it. Memory that is not actualy used won't be physically mapped by the | 69 // it. Memory that is not actualy used won't be physically mapped by the |
70 // system. BrowserMetrics usage, as reported in UMA, peaked around 3.0MiB | 70 // system. BrowserMetrics usage, as reported in UMA, peaked around 3.0MiB |
71 // as of 2016-12-20. | 71 // as of 2016-12-20. |
72 const size_t kAllocSize = 5 << 20; // 5 MiB | 72 const size_t kAllocSize = 5 << 20; // 5 MiB |
73 const uint32_t kAllocId = 0x935DDD43; // SHA1(BrowserMetrics) | 73 const uint32_t kAllocId = 0x935DDD43; // SHA1(BrowserMetrics) |
74 std::string storage = variations::GetVariationParamValueByFeature( | 74 std::string storage = variations::GetVariationParamValueByFeature( |
75 base::kPersistentHistogramsFeature, "storage"); | 75 base::kPersistentHistogramsFeature, "storage"); |
| 76 |
76 if (storage == "MappedFile") { | 77 if (storage == "MappedFile") { |
77 // If for some reason the existing "active" file could not be moved above | 78 // If for some reason the existing "active" file could not be moved above |
78 // then it is essential it be scheduled for deletion when possible and the | 79 // then it is essential it be scheduled for deletion when possible and the |
79 // contents ignored. Because this shouldn't happen but can on an OS like | 80 // contents ignored. Because this shouldn't happen but can on an OS like |
80 // Windows where another process reading the file (backup, AV, etc.) can | 81 // Windows where another process reading the file (backup, AV, etc.) can |
81 // prevent its alteration, it's necessary to handle this case by switching | 82 // prevent its alteration, it's necessary to handle this case by switching |
82 // to the equivalent of "LocalMemory" for this run. | 83 // to the equivalent of "LocalMemory" for this run. |
83 if (base::PathExists(active_file)) { | 84 if (base::PathExists(active_file)) { |
84 base::File file(active_file, base::File::FLAG_OPEN | | 85 base::File file(active_file, base::File::FLAG_OPEN | |
85 base::File::FLAG_READ | | 86 base::File::FLAG_READ | |
86 base::File::FLAG_DELETE_ON_CLOSE); | 87 base::File::FLAG_DELETE_ON_CLOSE); |
87 result = MAPPED_FILE_EXISTS; | 88 result = MAPPED_FILE_EXISTS; |
88 base::GlobalHistogramAllocator::CreateWithLocalMemory( | 89 base::GlobalHistogramAllocator::CreateWithLocalMemory( |
89 kAllocSize, kAllocId, | 90 kAllocSize, kAllocId, |
90 ChromeMetricsServiceClient::kBrowserMetricsName); | 91 ChromeMetricsServiceClient::kBrowserMetricsName); |
91 } else { | 92 } else { |
92 // Create global allocator with the "active" file. | 93 // Create global allocator with the "active" file. |
93 if (base::GlobalHistogramAllocator::CreateWithFile( | 94 if (base::GlobalHistogramAllocator::CreateWithFile( |
94 active_file, kAllocSize, kAllocId, | 95 active_file, kAllocSize, kAllocId, |
95 ChromeMetricsServiceClient::kBrowserMetricsName)) { | 96 ChromeMetricsServiceClient::kBrowserMetricsName)) { |
96 result = MAPPED_FILE_SUCCESS; | 97 result = MAPPED_FILE_SUCCESS; |
97 } else { | 98 } else { |
98 result = MAPPED_FILE_FAILED; | 99 result = MAPPED_FILE_FAILED; |
99 } | 100 } |
100 } | 101 } |
101 } else if (storage == "LocalMemory") { | 102 } else if (storage.empty() || storage == "LocalMemory") { |
102 // Use local memory for storage even though it will not persist across | 103 // Use local memory for storage even though it will not persist across |
103 // an unclean shutdown. | 104 // an unclean shutdown. |
104 base::GlobalHistogramAllocator::CreateWithLocalMemory( | 105 base::GlobalHistogramAllocator::CreateWithLocalMemory( |
105 kAllocSize, kAllocId, ChromeMetricsServiceClient::kBrowserMetricsName); | 106 kAllocSize, kAllocId, ChromeMetricsServiceClient::kBrowserMetricsName); |
106 result = LOCAL_MEMORY_SUCCESS; | 107 result = LOCAL_MEMORY_SUCCESS; |
107 } else { | 108 } else { |
108 // Persistent metric storage is disabled. | 109 // Persistent metric storage is disabled. |
109 return; | 110 return; |
110 } | 111 } |
111 | 112 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 bool has_seed, | 165 bool has_seed, |
165 base::FeatureList* feature_list) { | 166 base::FeatureList* feature_list) { |
166 CreateFallbackSamplingTrialIfNeeded(has_seed, feature_list); | 167 CreateFallbackSamplingTrialIfNeeded(has_seed, feature_list); |
167 } | 168 } |
168 | 169 |
169 void ChromeBrowserFieldTrials::InstantiateDynamicTrials() { | 170 void ChromeBrowserFieldTrials::InstantiateDynamicTrials() { |
170 // Persistent histograms must be enabled as soon as possible. | 171 // Persistent histograms must be enabled as soon as possible. |
171 InstantiatePersistentHistograms(); | 172 InstantiatePersistentHistograms(); |
172 tracing::SetupBackgroundTracingFieldTrial(); | 173 tracing::SetupBackgroundTracingFieldTrial(); |
173 } | 174 } |
OLD | NEW |