Camera: Cache camera facing to id mapping
Camera facing queries depending on camera implementation can be
expensive and involve additional IPC with side effects. Cache front&
back camera ids as early as possible.
Bug: 112563820
Test: Manual using application
Change-Id: If56f391e2c8b750fc072aa933da2185cbbbae9de
diff --git a/src/com/android/camera/one/v2/Camera2OneCameraManagerImpl.java b/src/com/android/camera/one/v2/Camera2OneCameraManagerImpl.java
index a4b5a9b..031c610 100644
--- a/src/com/android/camera/one/v2/Camera2OneCameraManagerImpl.java
+++ b/src/com/android/camera/one/v2/Camera2OneCameraManagerImpl.java
@@ -34,6 +34,8 @@
import com.android.camera.util.ApiHelper;
import com.google.common.base.Optional;
+import java.util.Hashtable;
+
import javax.annotation.Nonnull;
/**
@@ -62,9 +64,19 @@
}
private final CameraManager mCameraManager;
+ private Hashtable<Facing, String> mCameraFacingCache = new Hashtable<Facing, String>();
public Camera2OneCameraManagerImpl(CameraManager cameraManger) {
mCameraManager = cameraManger;
+
+ //Camera facing queries depending on camera implementation can be
+ //expensive and involve additional IPC with side effects. Cache front&
+ //back camera ids as early as possible.
+ if (mCameraManager != null) {
+ mCameraFacingCache.clear();
+ findFirstCameraFacing(Facing.BACK);
+ findFirstCameraFacing(Facing.FRONT);
+ }
}
@Override
@@ -122,11 +134,19 @@
/** Returns the ID of the first camera facing the given direction. */
private String findCameraId(Facing facing) {
- if (facing == Facing.FRONT) {
- return findFirstFrontCameraId();
- } else {
- return findFirstBackCameraId();
+ String id = mCameraFacingCache.get(facing);
+ if (id != null) {
+ return id;
}
+
+ if (facing == Facing.FRONT) {
+ id = findFirstFrontCameraId();
+ } else {
+ id = findFirstBackCameraId();
+ }
+
+ mCameraFacingCache.put(facing, id);
+ return id;
}
/** Returns the ID of the first back-facing camera. */