|  | // 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 |