diff options
| author | 2024-06-06 19:40:31 +0000 | |
|---|---|---|
| committer | 2024-06-06 19:40:31 +0000 | |
| commit | 011931932b721c52c5e480823abd9abce0fd31b4 (patch) | |
| tree | 8b41c67ea698c3d30ec4f6cca6a52d6224aa1b6c | |
| parent | 1be996920662003cec2e96a2becec09c1b7b3036 (diff) | |
| parent | 96b2e4b8be911131175e9ebd06122ea5ecafc63d (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.java | 35 |
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); + } } |