summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-06-06 19:40:31 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2024-06-06 19:40:31 +0000
commit011931932b721c52c5e480823abd9abce0fd31b4 (patch)
tree8b41c67ea698c3d30ec4f6cca6a52d6224aa1b6c
parent1be996920662003cec2e96a2becec09c1b7b3036 (diff)
parent96b2e4b8be911131175e9ebd06122ea5ecafc63d (diff)
Merge "profcollect: Trace on camera open events" into main am: 96b2e4b8be
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3115077 Change-Id: I90f7499d93beb6e3f9da2fb5a211ca6e5a9dc409 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java35
1 files changed, 35 insertions, 0 deletions
diff --git a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java
index 33bf4bd1cc02..c0259135132b 100644
--- a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java
+++ b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java
@@ -25,6 +25,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.hardware.camera2.CameraManager;
import android.os.Handler;
import android.os.IBinder.DeathRecipient;
import android.os.Looper;
@@ -258,6 +259,7 @@ public final class ProfcollectForwardingService extends SystemService {
BackgroundThread.get().getThreadHandler().post(
() -> {
registerAppLaunchObserver();
+ registerCameraOpenObserver();
registerDex2oatObserver();
registerOTAObserver();
});
@@ -371,4 +373,37 @@ public final class ProfcollectForwardingService extends SystemService {
pfs.getContext().sendBroadcast(intent);
});
}
+
+ private void registerCameraOpenObserver() {
+ CameraManager cm = getContext().getSystemService(CameraManager.class);
+ cm.registerAvailabilityCallback(new CameraManager.AvailabilityCallback() {
+ @Override
+ public void onCameraOpened(String cameraId, String packageId) {
+ Log.d(LOG_TAG, "Received camera open event from: " + packageId);
+ // Skip face auth and Android System Intelligence, since they trigger way too
+ // often.
+ if (packageId.startsWith("client.pid")
+ || packageId.equals("com.google.android.as")) {
+ return;
+ }
+ // Sample for a fraction of camera events.
+ final int traceFrequency =
+ DeviceConfig.getInt(DeviceConfig.NAMESPACE_PROFCOLLECT_NATIVE_BOOT,
+ "camera_trace_freq", 10);
+ int randomNum = ThreadLocalRandom.current().nextInt(100);
+ if (randomNum >= traceFrequency) {
+ return;
+ }
+ BackgroundThread.get().getThreadHandler().post(() -> {
+ try {
+ // Wait for a short time before starting tracing.
+ Thread.sleep(1000);
+ mIProfcollect.trace_once("camera");
+ } catch (RemoteException | InterruptedException e) {
+ Log.e(LOG_TAG, "Failed to initiate trace: " + e.getMessage());
+ }
+ });
+ }
+ }, null);
+ }
}