From d6d914d6d7b5385c1d965db01de4bc1a6eef9866 Mon Sep 17 00:00:00 2001 From: Lee Shombert Date: Sun, 18 Sep 2022 18:17:26 -0700 Subject: [PATCH] Enable recording resource access times Bug: 246953799 Monitor AssetManager.getResourceValue and AssetManager.retrieveAttributes. The ResourceTimer loop is started from ResourcesManagerService, which runs only on system_server. Publication of the collected resource statistics will be done in a subsequent commit. For now, collected statistics values are logged. Test: atest * androidfw_lib Change-Id: I47b349900429969a6ae8436dc6b00416e9dd76fc --- core/jni/android_util_AssetManager.cpp | 3 +++ .../com/android/server/resources/ResourcesManagerService.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index 8c23b214b8fe0..764338faef643 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -39,6 +39,7 @@ #include "androidfw/AssetManager2.h" #include "androidfw/AttributeResolution.h" #include "androidfw/MutexGuard.h" +#include #include "androidfw/ResourceTypes.h" #include "androidfw/ResourceUtils.h" @@ -630,6 +631,7 @@ static jint NativeGetResourceValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, jin jshort density, jobject typed_value, jboolean resolve_references) { ScopedLock assetmanager(AssetManagerFromLong(ptr)); + ResourceTimer _tag(ResourceTimer::Counter::GetResourceValue); auto value = assetmanager->GetResource(static_cast(resid), false /*may_be_bag*/, static_cast(density)); if (!value.has_value()) { @@ -1232,6 +1234,7 @@ static jboolean NativeRetrieveAttributes(JNIEnv* env, jclass /*clazz*/, jlong pt } ScopedLock assetmanager(AssetManagerFromLong(ptr)); + ResourceTimer _tag(ResourceTimer::Counter::RetrieveAttributes); ResXMLParser* xml_parser = reinterpret_cast(xml_parser_ptr); auto result = RetrieveAttributes(assetmanager.get(), xml_parser, reinterpret_cast(attrs), diff --git a/services/core/java/com/android/server/resources/ResourcesManagerService.java b/services/core/java/com/android/server/resources/ResourcesManagerService.java index cc275466a5ff7..eec3a0259a3e3 100644 --- a/services/core/java/com/android/server/resources/ResourcesManagerService.java +++ b/services/core/java/com/android/server/resources/ResourcesManagerService.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.content.res.IResourcesManager; +import android.content.res.ResourceTimer; import android.os.Binder; import android.os.IBinder; import android.os.ParcelFileDescriptor; @@ -55,7 +56,7 @@ public class ResourcesManagerService extends SystemService { @Override public void onStart() { - // Intentionally left empty. + ResourceTimer.start(); } private final IBinder mService = new IResourcesManager.Stub() {