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/strings/string_number_conversions.h"
     11 #include "base/sys_info_internal.h"
     12 #include "base/time/time.h"
     13 
     14 namespace base {
     15 
     16 #if !defined(OS_ANDROID)
     17 
     18 static const int kLowMemoryDeviceThresholdMB = 512;
     19 
     20 bool DetectLowEndDevice() {
     21   CommandLine* command_line = CommandLine::ForCurrentProcess();
     22   int int_value = 0;
     23   if (command_line->HasSwitch(switches::kLowEndDeviceMode)) {
     24     std::string string_value =
     25       command_line->GetSwitchValueASCII(switches::kLowEndDeviceMode);
     26     StringToInt(string_value, &int_value);
     27   }
     28   if (int_value == 1)
     29     return true;
     30   if (int_value != 2)
     31     return false;
     32 
     33   int ram_size_mb = SysInfo::AmountOfPhysicalMemoryMB();
     34   return (ram_size_mb > 0 && ram_size_mb < kLowMemoryDeviceThresholdMB);
     35 }
     36 
     37 static LazyInstance<
     38   internal::LazySysInfoValue<bool, DetectLowEndDevice> >::Leaky
     39   g_lazy_low_end_device = LAZY_INSTANCE_INITIALIZER;
     40 
     41 // static
     42 bool SysInfo::IsLowEndDevice() {
     43   return g_lazy_low_end_device.Get().value();
     44 }
     45 #endif
     46 
     47 // static
     48 int64 SysInfo::Uptime() {
     49   // This code relies on an implementation detail of TimeTicks::Now() - that
     50   // its return value happens to coincide with the system uptime value in
     51   // microseconds, on Win/Mac/iOS/Linux/ChromeOS and Android.
     52   int64 uptime_in_microseconds = TimeTicks::Now().ToInternalValue();
     53   return uptime_in_microseconds / 1000;
     54 }
     55 
     56 }  // namespace base
     57