| 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/sys_info.h" | 5 #include "base/sys_info.h" | 
| 6 | 6 | 
| 7 #include "base/base_switches.h" | 7 #include "base/base_switches.h" | 
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" | 
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" | 
|  | 10 #include "base/metrics/field_trial.h" | 
| 10 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" | 
|  | 12 #include "base/strings/string_util.h" | 
| 11 #include "base/sys_info_internal.h" | 13 #include "base/sys_info_internal.h" | 
| 12 #include "base/time/time.h" | 14 #include "base/time/time.h" | 
| 13 | 15 | 
| 14 namespace base { | 16 namespace base { | 
| 15 | 17 | 
| 16 #if !defined(OS_ANDROID) | 18 #if !defined(OS_ANDROID) | 
| 17 | 19 | 
| 18 static const int kLowMemoryDeviceThresholdMB = 512; | 20 static const int kLowMemoryDeviceThresholdMB = 512; | 
| 19 | 21 | 
| 20 bool DetectLowEndDevice() { | 22 bool DetectLowEndDevice() { | 
| 21   CommandLine* command_line = CommandLine::ForCurrentProcess(); | 23   CommandLine* command_line = CommandLine::ForCurrentProcess(); | 
| 22   if (command_line->HasSwitch(switches::kEnableLowEndDeviceMode)) | 24   if (command_line->HasSwitch(switches::kEnableLowEndDeviceMode)) | 
| 23     return true; | 25     return true; | 
| 24   if (command_line->HasSwitch(switches::kDisableLowEndDeviceMode)) | 26   if (command_line->HasSwitch(switches::kDisableLowEndDeviceMode)) | 
| 25     return false; | 27     return false; | 
| 26 | 28 | 
| 27   int ram_size_mb = SysInfo::AmountOfPhysicalMemoryMB(); | 29   int ram_size_mb = SysInfo::AmountOfPhysicalMemoryMB(); | 
| 28   return (ram_size_mb > 0 && ram_size_mb < kLowMemoryDeviceThresholdMB); | 30   return (ram_size_mb > 0 && ram_size_mb < kLowMemoryDeviceThresholdMB); | 
| 29 } | 31 } | 
| 30 | 32 | 
| 31 static LazyInstance< | 33 static LazyInstance< | 
| 32   internal::LazySysInfoValue<bool, DetectLowEndDevice> >::Leaky | 34   internal::LazySysInfoValue<bool, DetectLowEndDevice> >::Leaky | 
| 33   g_lazy_low_end_device = LAZY_INSTANCE_INITIALIZER; | 35   g_lazy_low_end_device = LAZY_INSTANCE_INITIALIZER; | 
| 34 | 36 | 
| 35 // static | 37 // static | 
| 36 bool SysInfo::IsLowEndDevice() { | 38 bool SysInfo::IsLowEndDevice() { | 
|  | 39   const std::string group_name = | 
|  | 40       base::FieldTrialList::FindFullName("MemoryReduction"); | 
|  | 41 | 
|  | 42   // Low End Device Mode will be enabled if this client is assigned to | 
|  | 43   // one of those EnabledXXX groups. | 
|  | 44   if (StartsWithASCII(group_name, "Enabled", true)) | 
|  | 45     return true; | 
|  | 46 | 
| 37   return g_lazy_low_end_device.Get().value(); | 47   return g_lazy_low_end_device.Get().value(); | 
| 38 } | 48 } | 
| 39 #endif | 49 #endif | 
| 40 | 50 | 
| 41 #if !defined(OS_MACOSX) || defined(OS_IOS) | 51 #if !defined(OS_MACOSX) || defined(OS_IOS) | 
| 42 std::string SysInfo::HardwareModelName() { | 52 std::string SysInfo::HardwareModelName() { | 
| 43   return std::string(); | 53   return std::string(); | 
| 44 } | 54 } | 
| 45 #endif | 55 #endif | 
| 46 | 56 | 
| 47 // static | 57 // static | 
| 48 int64 SysInfo::Uptime() { | 58 int64 SysInfo::Uptime() { | 
| 49   // This code relies on an implementation detail of TimeTicks::Now() - that | 59   // This code relies on an implementation detail of TimeTicks::Now() - that | 
| 50   // its return value happens to coincide with the system uptime value in | 60   // its return value happens to coincide with the system uptime value in | 
| 51   // microseconds, on Win/Mac/iOS/Linux/ChromeOS and Android. | 61   // microseconds, on Win/Mac/iOS/Linux/ChromeOS and Android. | 
| 52   int64 uptime_in_microseconds = TimeTicks::Now().ToInternalValue(); | 62   int64 uptime_in_microseconds = TimeTicks::Now().ToInternalValue(); | 
| 53   return uptime_in_microseconds / 1000; | 63   return uptime_in_microseconds / 1000; | 
| 54 } | 64 } | 
| 55 | 65 | 
| 56 }  // namespace base | 66 }  // namespace base | 
| OLD | NEW | 
|---|