From ee46b5831c49e7249e53dc00a17b168a8bc46123 Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Mon, 4 Apr 2016 12:26:40 -0700 Subject: [PATCH] Camera2: Unlink camera device death listener on disconnect Not removing the listener causes warning logging, which is especially heavy when a lot of camera connect/disconnects are happening. Bug: 27217534 Fixes: 28000512 Change-Id: I4911f27cc0f69301975b110a9b456977050ce5bc --- .../java/android/hardware/camera2/impl/CameraDeviceImpl.java | 1 + .../hardware/camera2/impl/ICameraDeviceUserWrapper.java | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java index d84a6fcbd16fe..d2e820e17776f 100644 --- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java @@ -974,6 +974,7 @@ public class CameraDeviceImpl extends CameraDevice if (mRemoteDevice != null) { mRemoteDevice.disconnect(); + mRemoteDevice.unlinkToDeath(this, /*flags*/0); } // Only want to fire the onClosed callback once; diff --git a/core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java b/core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java index ddc3fd12b70d0..b2f6c1d4c289f 100644 --- a/core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java +++ b/core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java @@ -31,6 +31,7 @@ import android.hardware.camera2.ICameraDeviceUser; import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.camera2.params.OutputConfiguration; import android.hardware.camera2.utils.SubmitInfo; +import android.os.IBinder; import android.os.RemoteException; import android.view.Surface; @@ -53,6 +54,10 @@ public class ICameraDeviceUserWrapper { mRemoteDevice = remoteDevice; } + public void unlinkToDeath(IBinder.DeathRecipient recipient, int flags) { + mRemoteDevice.asBinder().unlinkToDeath(recipient, flags); + } + public void disconnect() { try { mRemoteDevice.disconnect();