Home | History | Annotate | Download | only in base
      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 
      7 #include "base/base_switches.h"
      8 #include "base/command_line.h"
      9 #include "base/lazy_instance.h"
     10 #include "base/metrics/field_trial.h"
     11 #include "base/strings/string_number_conversions.h"
     12 #include "base/strings/string_util.h"
     13 #include "base/sys_info_internal.h"
     14 #include "base/time/time.h"
     15 #include "build/build_config.h"
     16 
     17 namespace base {
     18 
     19 #if !defined(OS_ANDROID)
     20 
     21 static const int kLowMemoryDeviceThresholdMB = 512;
     22 
     23 bool DetectLowEndDevice() {
     24   CommandLine* command_line = CommandLine::ForCurrentProcess();
     25   if (command_line->HasSwitch(switches::kEnableLowEndDeviceMode))
     26     return true;
     27   if (command_line->HasSwitch(switches::kDisableLowEndDeviceMode))
     28     return false;
     29 
     30   int ram_size_mb = SysInfo::AmountOfPhysicalMemoryMB();
     31   return (ram_size_mb > 0 && ram_size_mb <= kLowMemoryDeviceThresholdMB);
     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() {
     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.
     45   if (StartsWith(group_name, "Enabled", CompareCase::SENSITIVE))
     46     return true;
     47 
     48   return g_lazy_low_end_device.Get().value();
     49 }
     50 #endif
     51 
     52 #if (!defined(OS_MACOSX) || defined(OS_IOS)) && !defined(OS_ANDROID)
     53 std::string SysInfo::HardwareModelName() {
     54   return std::string();
     55 }
     56 #endif
     57 
     58 // static
     59 base::TimeDelta SysInfo::Uptime() {
     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.
     63   int64_t uptime_in_microseconds = TimeTicks::Now().ToInternalValue();
     64   return base::TimeDelta::FromMicroseconds(uptime_in_microseconds);
     65 }
     66 
     67 }  // namespace base
     68