From 733ca8dfa76ac34d1f9caff8798d01a4a8f44002 Mon Sep 17 00:00:00 2001 From: Senpo Hu Date: Tue, 14 Oct 2014 14:19:08 -0700 Subject: Return more detailed debugging info for logging purposes. Change-Id: If71afbf8029e9e4d5560eb6a655ece990cf19a19 --- .../portability/AndroidCamera2AgentImpl.java | 11 +++++++---- .../portability/AndroidCameraAgentImpl.java | 22 +++++++++++++++------- .../portability/CameraExceptionHandler.java | 12 ++++++++---- .../ex/camera2/portability/HistoryHandler.java | 4 ++++ 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java index c57716d..2fc4ad3 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java @@ -222,8 +222,9 @@ class AndroidCamera2AgentImpl extends CameraAgent { public void handleMessage(final Message msg) { super.handleMessage(msg); Log.v(TAG, "handleMessage - action = '" + CameraActions.stringify(msg.what) + "'"); + int cameraAction = msg.what; try { - switch(msg.what) { + switch (cameraAction) { case CameraActions.OPEN_CAMERA: case CameraActions.RECONNECT: { CameraOpenCallback openCallback = (CameraOpenCallback) msg.obj; @@ -640,12 +641,12 @@ class AndroidCamera2AgentImpl extends CameraAgent { } } } catch (final Exception ex) { - if (msg.what != CameraActions.RELEASE && mCamera != null) { + if (cameraAction != CameraActions.RELEASE && mCamera != null) { // TODO: Handle this better mCamera.close(); mCamera = null; } else if (mCamera == null) { - if (msg.what == CameraActions.OPEN_CAMERA) { + if (cameraAction == CameraActions.OPEN_CAMERA) { if (mOpenCallback != null) { mOpenCallback.onDeviceOpenFailure(mCameraIndex, generateHistoryString(mCameraIndex)); @@ -657,7 +658,9 @@ class AndroidCamera2AgentImpl extends CameraAgent { } if (ex instanceof RuntimeException) { - mExceptionHandler.onCameraException((RuntimeException) ex); + String commandHistory = generateHistoryString(Integer.parseInt(mCameraId)); + mExceptionHandler.onCameraException((RuntimeException) ex, commandHistory, + cameraAction, mCameraState.getState()); } } finally { WaitDoneBundle.unblockSyncWaiters(msg); diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java index 515add5..9910dd9 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java @@ -239,7 +239,7 @@ class AndroidCameraAgentImpl extends CameraAgent { private class CameraHandler extends HistoryHandler implements Camera.ErrorCallback { private CameraAgent mAgent; private Camera mCamera; - private int mCameraId; + private int mCameraId = -1; private ParametersCache mParameterCache; private int mCancelAfPending = 0; @@ -311,7 +311,12 @@ class AndroidCameraAgentImpl extends CameraAgent { public void onError(final int errorCode, Camera camera) { mExceptionHandler.onCameraError(errorCode); if (errorCode == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) { - mExceptionHandler.onCameraException(new RuntimeException("Media server died.")); + int lastCameraAction = getCurrentMessage(); + mExceptionHandler.onCameraException( + new RuntimeException("Media server died."), + generateHistoryString(mCameraId), + lastCameraAction, + mCameraState.getState()); } } @@ -329,8 +334,9 @@ class AndroidCameraAgentImpl extends CameraAgent { } Log.v(TAG, "handleMessage - action = '" + CameraActions.stringify(msg.what) + "'"); + int cameraAction = msg.what; try { - switch (msg.what) { + switch (cameraAction) { case CameraActions.OPEN_CAMERA: { final CameraOpenCallback openCallback = (CameraOpenCallback) msg.obj; final int cameraId = msg.arg1; @@ -371,6 +377,7 @@ class AndroidCameraAgentImpl extends CameraAgent { mCamera.release(); mCameraState.setState(AndroidCameraStateHolder.CAMERA_UNOPENED); mCamera = null; + mCameraId = -1; } else { Log.w(TAG, "Releasing camera without any camera opened."); } @@ -587,10 +594,9 @@ class AndroidCameraAgentImpl extends CameraAgent { } } } catch (final RuntimeException ex) { - String cameraAction = CameraActions.stringify(msg.what); int cameraState = mCameraState.getState(); - String errorContext = - "CameraAction[" + cameraAction + "] at CameraState[" + cameraState + "]"; + String errorContext = "CameraAction[" + CameraActions.stringify(cameraAction) + + "] at CameraState[" + cameraState + "]"; Log.e(TAG, "RuntimeException during " + errorContext, ex); // Be conservative by invalidating both CameraAgent and CameraProxy objects. @@ -615,7 +621,9 @@ class AndroidCameraAgentImpl extends CameraAgent { msg.arg1, generateHistoryString(cameraId)); } } else { - mAgent.getCameraExceptionHandler().onCameraException(ex); + CameraExceptionHandler exceptionHandler = mAgent.getCameraExceptionHandler(); + exceptionHandler.onCameraException( + ex, generateHistoryString(mCameraId), cameraAction, cameraState); } } finally { WaitDoneBundle.unblockSyncWaiters(msg); diff --git a/camera2/portability/src/com/android/ex/camera2/portability/CameraExceptionHandler.java b/camera2/portability/src/com/android/ex/camera2/portability/CameraExceptionHandler.java index 1fcf3b5..dc71b4b 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/CameraExceptionHandler.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/CameraExceptionHandler.java @@ -31,7 +31,8 @@ public class CameraExceptionHandler { public void onCameraError(int errorCode) { } @Override - public void onCameraException(RuntimeException e) { + public void onCameraException( + RuntimeException e, String commandHistory, int action, int state) { throw e; } @Override @@ -45,7 +46,8 @@ public class CameraExceptionHandler { */ public static interface CameraExceptionCallback { public void onCameraError(int errorCode); - public void onCameraException(RuntimeException e); + public void onCameraException( + RuntimeException e, String commandHistory, int action, int state); public void onDispatchThreadException(RuntimeException e); } @@ -92,11 +94,13 @@ public class CameraExceptionHandler { * * @param ex The runtime exception object. */ - public void onCameraException(final RuntimeException ex) { + public void onCameraException( + final RuntimeException ex, final String commandHistory, + final int action, final int state) { mHandler.post(new Runnable() { @Override public void run() { - mCallback.onCameraException(ex); + mCallback.onCameraException(ex, commandHistory, action, state); } }); } diff --git a/camera2/portability/src/com/android/ex/camera2/portability/HistoryHandler.java b/camera2/portability/src/com/android/ex/camera2/portability/HistoryHandler.java index ec2a555..6b1c5ab 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/HistoryHandler.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/HistoryHandler.java @@ -35,6 +35,10 @@ class HistoryHandler extends Handler { mMsgHistory.offerLast(-1); } + Integer getCurrentMessage() { + return mMsgHistory.peekLast(); + } + String generateHistoryString(int cameraId) { String info = new String("HIST"); info += "_ID" + cameraId; -- cgit v1.2.3