| // Copyright 2013 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "base/android/sys_utils.h" | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "base/android/build_info.h" | 
 | #include "base/process/process_metrics.h" | 
 | #include "base/sys_info.h" | 
 | #include "base/trace_event/trace_event.h" | 
 | #include "jni/SysUtils_jni.h" | 
 |  | 
 | namespace base { | 
 | namespace android { | 
 |  | 
 | bool SysUtils::IsLowEndDeviceFromJni() { | 
 |   JNIEnv* env = AttachCurrentThread(); | 
 |   return Java_SysUtils_isLowEndDevice(env); | 
 | } | 
 |  | 
 | bool SysUtils::IsCurrentlyLowMemory() { | 
 |   JNIEnv* env = AttachCurrentThread(); | 
 |   return Java_SysUtils_isCurrentlyLowMemory(env); | 
 | } | 
 |  | 
 | // Logs the number of minor / major page faults to tracing (and also the time to | 
 | // collect) the metrics. Does nothing if tracing is not enabled. | 
 | static void JNI_SysUtils_LogPageFaultCountToTracing( | 
 |     JNIEnv* env, | 
 |     const base::android::JavaParamRef<jclass>& jcaller) { | 
 |   // This is racy, but we are OK losing data, and collecting it is potentially | 
 |   // expensive (reading and parsing a file). | 
 |   bool enabled; | 
 |   TRACE_EVENT_CATEGORY_GROUP_ENABLED("startup", &enabled); | 
 |   if (!enabled) | 
 |     return; | 
 |   TRACE_EVENT_BEGIN2("memory", "CollectPageFaultCount", "minor", 0, "major", 0); | 
 |   std::unique_ptr<base::ProcessMetrics> process_metrics( | 
 |       base::ProcessMetrics::CreateProcessMetrics( | 
 |           base::GetCurrentProcessHandle())); | 
 |   base::PageFaultCounts counts; | 
 |   process_metrics->GetPageFaultCounts(&counts); | 
 |   TRACE_EVENT_END2("memory", "CollectPageFaults", "minor", counts.minor, | 
 |                    "major", counts.major); | 
 | } | 
 |  | 
 | }  // namespace android | 
 |  | 
 | }  // namespace base |