[email protected] | 0f24e53e | 2012-10-29 01:04:09 | [diff] [blame] | 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 | ||||
3 | // found in the LICENSE file. | ||||
4 | |||||
5 | #include "base/sys_info.h" | ||||
6 | |||||
[email protected] | 35b4f0c | 2014-06-26 16:55:27 | [diff] [blame] | 7 | #include "base/base_switches.h" |
8 | #include "base/command_line.h" | ||||
9 | #include "base/lazy_instance.h" | ||||
cnwan | d4270e8 | 2015-05-06 06:11:45 | [diff] [blame] | 10 | #include "base/metrics/field_trial.h" |
[email protected] | 35b4f0c | 2014-06-26 16:55:27 | [diff] [blame] | 11 | #include "base/strings/string_number_conversions.h" |
cnwan | d4270e8 | 2015-05-06 06:11:45 | [diff] [blame] | 12 | #include "base/strings/string_util.h" |
[email protected] | 35b4f0c | 2014-06-26 16:55:27 | [diff] [blame] | 13 | #include "base/sys_info_internal.h" |
[email protected] | 8f9a3a5 | 2013-06-28 15:14:18 | [diff] [blame] | 14 | #include "base/time/time.h" |
avi | 9b6f4293 | 2015-12-26 22:15:14 | [diff] [blame] | 15 | #include "build/build_config.h" |
[email protected] | 0f24e53e | 2012-10-29 01:04:09 | [diff] [blame] | 16 | |
17 | namespace base { | ||||
18 | |||||
[email protected] | 35b4f0c | 2014-06-26 16:55:27 | [diff] [blame] | 19 | #if !defined(OS_ANDROID) |
20 | |||||
21 | static const int kLowMemoryDeviceThresholdMB = 512; | ||||
22 | |||||
23 | bool DetectLowEndDevice() { | ||||
24 | CommandLine* command_line = CommandLine::ForCurrentProcess(); | ||||
ssid | feb3f47d | 2014-12-16 16:04:02 | [diff] [blame] | 25 | if (command_line->HasSwitch(switches::kEnableLowEndDeviceMode)) |
[email protected] | 35b4f0c | 2014-06-26 16:55:27 | [diff] [blame] | 26 | return true; |
ssid | feb3f47d | 2014-12-16 16:04:02 | [diff] [blame] | 27 | if (command_line->HasSwitch(switches::kDisableLowEndDeviceMode)) |
[email protected] | 35b4f0c | 2014-06-26 16:55:27 | [diff] [blame] | 28 | return false; |
29 | |||||
30 | int ram_size_mb = SysInfo::AmountOfPhysicalMemoryMB(); | ||||
mariakhomenko | 0064e5e | 2016-04-28 19:25:33 | [diff] [blame] | 31 | return (ram_size_mb > 0 && ram_size_mb <= kLowMemoryDeviceThresholdMB); |
[email protected] | 35b4f0c | 2014-06-26 16:55:27 | [diff] [blame] | 32 | } |
33 | |||||
34 | static LazyInstance< | ||||
35 | internal::LazySysInfoValue<bool, DetectLowEndDevice> >::Leaky | ||||
36 | g_lazy_low_end_device = LAZY_INSTANCE_INITIALIZER; | ||||
37 | |||||
38 | // static | ||||
39 | bool SysInfo::IsLowEndDevice() { | ||||
cnwan | d4270e8 | 2015-05-06 06:11:45 | [diff] [blame] | 40 | const std::string group_name = |
41 | base::FieldTrialList::FindFullName("MemoryReduction"); | ||||
42 | |||||
43 | // Low End Device Mode will be enabled if this client is assigned to | ||||
44 | // one of those EnabledXXX groups. | ||||
brettw | 89365dc | 2015-06-16 05:52:47 | [diff] [blame] | 45 | if (StartsWith(group_name, "Enabled", CompareCase::SENSITIVE)) |
cnwan | d4270e8 | 2015-05-06 06:11:45 | [diff] [blame] | 46 | return true; |
47 | |||||
[email protected] | 35b4f0c | 2014-06-26 16:55:27 | [diff] [blame] | 48 | return g_lazy_low_end_device.Get().value(); |
49 | } | ||||
50 | #endif | ||||
51 | |||||
tdresser | ae416695 | 2015-07-16 15:41:04 | [diff] [blame] | 52 | #if (!defined(OS_MACOSX) || defined(OS_IOS)) && !defined(OS_ANDROID) |
jeremy | ba4eca9 | 2014-11-06 18:47:10 | [diff] [blame] | 53 | std::string SysInfo::HardwareModelName() { |
54 | return std::string(); | ||||
55 | } | ||||
56 | #endif | ||||
57 | |||||
[email protected] | 0f24e53e | 2012-10-29 01:04:09 | [diff] [blame] | 58 | // static |
sque | 0f78ba54 | 2015-11-05 00:01:03 | [diff] [blame] | 59 | base::TimeDelta SysInfo::Uptime() { |
[email protected] | 0f24e53e | 2012-10-29 01:04:09 | [diff] [blame] | 60 | // This code relies on an implementation detail of TimeTicks::Now() - that |
61 | // its return value happens to coincide with the system uptime value in | ||||
62 | // microseconds, on Win/Mac/iOS/Linux/ChromeOS and Android. | ||||
avi | dd4e61435 | 2015-12-09 00:44:49 | [diff] [blame] | 63 | int64_t uptime_in_microseconds = TimeTicks::Now().ToInternalValue(); |
sque | 0f78ba54 | 2015-11-05 00:01:03 | [diff] [blame] | 64 | return base::TimeDelta::FromMicroseconds(uptime_in_microseconds); |
[email protected] | 0f24e53e | 2012-10-29 01:04:09 | [diff] [blame] | 65 | } |
66 | |||||
67 | } // namespace base |