| 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 "base/metrics/field_trial.h" | 5 #include "base/metrics/field_trial.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/base_switches.h" | 10 #include "base/base_switches.h" |
| 11 #include "base/build_time.h" | 11 #include "base/build_time.h" |
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 13 #include "base/debug/activity_tracker.h" | 13 #include "base/debug/activity_tracker.h" |
| 14 #include "base/debug/crash_logging.h" | |
| 15 #include "base/logging.h" | 14 #include "base/logging.h" |
| 16 #include "base/metrics/field_trial_param_associator.h" | 15 #include "base/metrics/field_trial_param_associator.h" |
| 17 #include "base/process/memory.h" | 16 #include "base/process/memory.h" |
| 18 #include "base/rand_util.h" | 17 #include "base/rand_util.h" |
| 19 #include "base/strings/string_number_conversions.h" | 18 #include "base/strings/string_number_conversions.h" |
| 20 #include "base/strings/string_split.h" | 19 #include "base/strings/string_split.h" |
| 21 #include "base/strings/string_util.h" | 20 #include "base/strings/string_util.h" |
| 22 #include "base/strings/stringprintf.h" | 21 #include "base/strings/stringprintf.h" |
| 23 #include "base/strings/utf_string_conversions.h" | 22 #include "base/strings/utf_string_conversions.h" |
| 24 #include "base/unguessable_token.h" | 23 #include "base/unguessable_token.h" |
| (...skipping 1248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1273 return; | 1272 return; |
| 1274 | 1273 |
| 1275 SharedMemoryCreateOptions options; | 1274 SharedMemoryCreateOptions options; |
| 1276 options.size = kFieldTrialAllocationSize; | 1275 options.size = kFieldTrialAllocationSize; |
| 1277 options.share_read_only = true; | 1276 options.share_read_only = true; |
| 1278 #if defined(OS_MACOSX) && !defined(OS_IOS) | 1277 #if defined(OS_MACOSX) && !defined(OS_IOS) |
| 1279 options.type = SharedMemoryHandle::POSIX; | 1278 options.type = SharedMemoryHandle::POSIX; |
| 1280 #endif | 1279 #endif |
| 1281 | 1280 |
| 1282 std::unique_ptr<SharedMemory> shm(new SharedMemory()); | 1281 std::unique_ptr<SharedMemory> shm(new SharedMemory()); |
| 1283 if (!shm->Create(options)) { | 1282 if (!shm->Create(options)) |
| 1284 #if !defined(OS_NACL) | |
| 1285 // Temporary for http://crbug.com/703649. | |
| 1286 base::debug::ScopedCrashKey crash_key( | |
| 1287 "field_trial_shmem_create_error", | |
| 1288 base::IntToString(static_cast<int>(shm->get_last_error()))); | |
| 1289 #endif | |
| 1290 OnOutOfMemory(kFieldTrialAllocationSize); | 1283 OnOutOfMemory(kFieldTrialAllocationSize); |
| 1291 } | |
| 1292 | 1284 |
| 1293 if (!shm->Map(kFieldTrialAllocationSize)) { | 1285 if (!shm->Map(kFieldTrialAllocationSize)) |
| 1294 #if !defined(OS_NACL) | |
| 1295 // Temporary for http://crbug.com/703649. | |
| 1296 base::debug::ScopedCrashKey crash_key( | |
| 1297 "field_trial_shmem_map_error", | |
| 1298 base::IntToString(static_cast<int>(shm->get_last_error()))); | |
| 1299 #endif | |
| 1300 OnOutOfMemory(kFieldTrialAllocationSize); | 1286 OnOutOfMemory(kFieldTrialAllocationSize); |
| 1301 } | |
| 1302 | 1287 |
| 1303 global_->field_trial_allocator_.reset( | 1288 global_->field_trial_allocator_.reset( |
| 1304 new FieldTrialAllocator(std::move(shm), 0, kAllocatorName, false)); | 1289 new FieldTrialAllocator(std::move(shm), 0, kAllocatorName, false)); |
| 1305 global_->field_trial_allocator_->CreateTrackingHistograms(kAllocatorName); | 1290 global_->field_trial_allocator_->CreateTrackingHistograms(kAllocatorName); |
| 1306 | 1291 |
| 1307 // Add all existing field trials. | 1292 // Add all existing field trials. |
| 1308 for (const auto& registered : global_->registered_) { | 1293 for (const auto& registered : global_->registered_) { |
| 1309 AddToAllocatorWhileLocked(global_->field_trial_allocator_.get(), | 1294 AddToAllocatorWhileLocked(global_->field_trial_allocator_.get(), |
| 1310 registered.second); | 1295 registered.second); |
| 1311 } | 1296 } |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1423 return; | 1408 return; |
| 1424 } | 1409 } |
| 1425 AutoLock auto_lock(global_->lock_); | 1410 AutoLock auto_lock(global_->lock_); |
| 1426 CHECK(!global_->PreLockedFind(trial->trial_name())) << trial->trial_name(); | 1411 CHECK(!global_->PreLockedFind(trial->trial_name())) << trial->trial_name(); |
| 1427 trial->AddRef(); | 1412 trial->AddRef(); |
| 1428 trial->SetTrialRegistered(); | 1413 trial->SetTrialRegistered(); |
| 1429 global_->registered_[trial->trial_name()] = trial; | 1414 global_->registered_[trial->trial_name()] = trial; |
| 1430 } | 1415 } |
| 1431 | 1416 |
| 1432 } // namespace base | 1417 } // namespace base |
| OLD | NEW |