Check CPU time_in_state from one place
Move the check whether CPU eBPF tracking is supported to one place to avoid repeating it in every reader. Bug: 179485697 Test: existing tests pass Change-Id: Id6d23614c3d1dde86b66de14bc09f5976f183625
This commit is contained in:
26
core/java/com/android/internal/os/KernelCpuBpfTracking.java
Normal file
26
core/java/com/android/internal/os/KernelCpuBpfTracking.java
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.internal.os;
|
||||
|
||||
/** CPU tracking using eBPF. */
|
||||
public final class KernelCpuBpfTracking {
|
||||
private KernelCpuBpfTracking() {
|
||||
}
|
||||
|
||||
/** Returns whether CPU tracking using eBPF is supported. */
|
||||
public static native boolean isSupported();
|
||||
}
|
||||
@@ -23,9 +23,6 @@ public final class KernelCpuTotalBpfMapReader {
|
||||
private KernelCpuTotalBpfMapReader() {
|
||||
}
|
||||
|
||||
/** Returns whether total CPU time is measured. */
|
||||
public static native boolean isSupported();
|
||||
|
||||
/** Reads total CPU time from bpf map. */
|
||||
public static native boolean read(Callback callback);
|
||||
|
||||
|
||||
@@ -184,6 +184,7 @@ cc_library_shared {
|
||||
"com_android_internal_net_NetworkUtilsInternal.cpp",
|
||||
"com_android_internal_os_ClassLoaderFactory.cpp",
|
||||
"com_android_internal_os_FuseAppLoop.cpp",
|
||||
"com_android_internal_os_KernelCpuBpfTracking.cpp",
|
||||
"com_android_internal_os_KernelCpuTotalBpfMapReader.cpp",
|
||||
"com_android_internal_os_KernelCpuUidBpfMapReader.cpp",
|
||||
"com_android_internal_os_KernelSingleProcessCpuThreadReader.cpp",
|
||||
|
||||
@@ -190,6 +190,7 @@ extern int register_com_android_internal_content_om_OverlayConfig(JNIEnv *env);
|
||||
extern int register_com_android_internal_net_NetworkUtilsInternal(JNIEnv* env);
|
||||
extern int register_com_android_internal_os_ClassLoaderFactory(JNIEnv* env);
|
||||
extern int register_com_android_internal_os_FuseAppLoop(JNIEnv* env);
|
||||
extern int register_com_android_internal_os_KernelCpuBpfTracking(JNIEnv* env);
|
||||
extern int register_com_android_internal_os_KernelCpuTotalBpfMapReader(JNIEnv* env);
|
||||
extern int register_com_android_internal_os_KernelCpuUidBpfMapReader(JNIEnv *env);
|
||||
extern int register_com_android_internal_os_KernelSingleProcessCpuThreadReader(JNIEnv* env);
|
||||
@@ -1586,6 +1587,7 @@ static const RegJNIRec gRegJNI[] = {
|
||||
REG_JNI(register_android_security_Scrypt),
|
||||
REG_JNI(register_com_android_internal_content_NativeLibraryHelper),
|
||||
REG_JNI(register_com_android_internal_os_FuseAppLoop),
|
||||
REG_JNI(register_com_android_internal_os_KernelCpuBpfTracking),
|
||||
REG_JNI(register_com_android_internal_os_KernelCpuTotalBpfMapReader),
|
||||
REG_JNI(register_com_android_internal_os_KernelCpuUidBpfMapReader),
|
||||
REG_JNI(register_com_android_internal_os_KernelSingleProcessCpuThreadReader),
|
||||
|
||||
36
core/jni/com_android_internal_os_KernelCpuBpfTracking.cpp
Normal file
36
core/jni/com_android_internal_os_KernelCpuBpfTracking.cpp
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "core_jni_helpers.h"
|
||||
|
||||
#include <cputimeinstate.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
static jboolean KernelCpuBpfTracking_isSupported(JNIEnv *, jobject) {
|
||||
return android::bpf::isTrackingUidTimesSupported() ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
static const JNINativeMethod methods[] = {
|
||||
{"isSupported", "()Z", (void *)KernelCpuBpfTracking_isSupported},
|
||||
};
|
||||
|
||||
int register_com_android_internal_os_KernelCpuBpfTracking(JNIEnv *env) {
|
||||
return RegisterMethodsOrDie(env, "com/android/internal/os/KernelCpuBpfTracking", methods,
|
||||
NELEM(methods));
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
@@ -20,10 +20,6 @@
|
||||
|
||||
namespace android {
|
||||
|
||||
static jboolean KernelCpuTotalBpfMapReader_isSupported(JNIEnv *, jobject) {
|
||||
return android::bpf::isTrackingUidTimesSupported() ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
static jboolean KernelCpuTotalBpfMapReader_read(JNIEnv *env, jobject, jobject callback) {
|
||||
jclass callbackClass = env->GetObjectClass(callback);
|
||||
jmethodID callbackMethod = env->GetMethodID(callbackClass, "accept", "(IIJ)V");
|
||||
@@ -51,7 +47,6 @@ static jboolean KernelCpuTotalBpfMapReader_read(JNIEnv *env, jobject, jobject ca
|
||||
static const JNINativeMethod methods[] = {
|
||||
{"read", "(Lcom/android/internal/os/KernelCpuTotalBpfMapReader$Callback;)Z",
|
||||
(void *)KernelCpuTotalBpfMapReader_read},
|
||||
{"isSupported", "()Z", (void *)KernelCpuTotalBpfMapReader_isSupported},
|
||||
};
|
||||
|
||||
int register_com_android_internal_os_KernelCpuTotalBpfMapReader(JNIEnv *env) {
|
||||
|
||||
@@ -139,6 +139,7 @@ import com.android.internal.os.BackgroundThread;
|
||||
import com.android.internal.os.BatterySipper;
|
||||
import com.android.internal.os.BatteryStatsHelper;
|
||||
import com.android.internal.os.BinderCallsStats.ExportedCallStat;
|
||||
import com.android.internal.os.KernelCpuBpfTracking;
|
||||
import com.android.internal.os.KernelCpuThreadReader;
|
||||
import com.android.internal.os.KernelCpuThreadReaderDiff;
|
||||
import com.android.internal.os.KernelCpuThreadReaderSettingsObserver;
|
||||
@@ -1455,7 +1456,7 @@ public class StatsPullAtomService extends SystemService {
|
||||
}
|
||||
|
||||
private void registerCpuTimePerClusterFreq() {
|
||||
if (KernelCpuTotalBpfMapReader.isSupported()) {
|
||||
if (KernelCpuBpfTracking.isSupported()) {
|
||||
int tagId = FrameworkStatsLog.CPU_TIME_PER_CLUSTER_FREQ;
|
||||
PullAtomMetadata metadata = new PullAtomMetadata.Builder()
|
||||
.setAdditiveFields(new int[] {3})
|
||||
@@ -1660,17 +1661,18 @@ public class StatsPullAtomService extends SystemService {
|
||||
}
|
||||
|
||||
private void registerCpuCyclesPerThreadGroupCluster() {
|
||||
// TODO(b/173227907): Register only when supported.
|
||||
int tagId = FrameworkStatsLog.CPU_CYCLES_PER_THREAD_GROUP_CLUSTER;
|
||||
PullAtomMetadata metadata = new PullAtomMetadata.Builder()
|
||||
.setAdditiveFields(new int[] {3, 4})
|
||||
.build();
|
||||
mStatsManager.setPullAtomCallback(
|
||||
tagId,
|
||||
metadata,
|
||||
DIRECT_EXECUTOR,
|
||||
mStatsCallbackImpl
|
||||
);
|
||||
if (KernelCpuBpfTracking.isSupported()) {
|
||||
int tagId = FrameworkStatsLog.CPU_CYCLES_PER_THREAD_GROUP_CLUSTER;
|
||||
PullAtomMetadata metadata = new PullAtomMetadata.Builder()
|
||||
.setAdditiveFields(new int[] {3, 4})
|
||||
.build();
|
||||
mStatsManager.setPullAtomCallback(
|
||||
tagId,
|
||||
metadata,
|
||||
DIRECT_EXECUTOR,
|
||||
mStatsCallbackImpl
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
int pullCpuCyclesPerThreadGroupCluster(int atomTag, List<StatsEvent> pulledData) {
|
||||
|
||||
Reference in New Issue
Block a user