summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Will Brazil <willbrazil@google.com> 2017-06-09 12:22:53 -0700
committer Eino-Ville Talvala <etalvala@google.com> 2017-06-12 19:02:52 +0000
commitcd92f92fa48571195d9d048aa52d27bc7bb315e8 (patch)
tree86c7cb57f632e080f788962515ae870fbd245bb0
parent7c41ddb9750c74541d4df9134064f418dd347fe8 (diff)
Camera2: Cache method list in MethodNameInvoker.
Retrieving list of methods in every invoke() call is very expensive. Caching the list inside the constructor prevents several unnecessary calls to Class.getMethods(). Test: Run camera2 CTS Bug: 62490715 Change-Id: Ib2a93af0f364b055df2eab9bd7870730428429ad
-rw-r--r--core/java/android/hardware/camera2/dispatch/MethodNameInvoker.java8
1 files changed, 5 insertions, 3 deletions
diff --git a/core/java/android/hardware/camera2/dispatch/MethodNameInvoker.java b/core/java/android/hardware/camera2/dispatch/MethodNameInvoker.java
index c66a3a40718f..8296b7a915a4 100644
--- a/core/java/android/hardware/camera2/dispatch/MethodNameInvoker.java
+++ b/core/java/android/hardware/camera2/dispatch/MethodNameInvoker.java
@@ -15,13 +15,13 @@
*/
package android.hardware.camera2.dispatch;
+import static com.android.internal.util.Preconditions.checkNotNull;
+
import android.hardware.camera2.utils.UncheckedThrow;
import java.lang.reflect.Method;
import java.util.concurrent.ConcurrentHashMap;
-import static com.android.internal.util.Preconditions.*;
-
/**
* Invoke a method on a dispatchable by its name (without knowing the {@code Method} ahead of time).
*
@@ -31,6 +31,7 @@ public class MethodNameInvoker<T> {
private final Dispatchable<T> mTarget;
private final Class<T> mTargetClass;
+ private final Method[] mTargetClassMethods;
private final ConcurrentHashMap<String, Method> mMethods =
new ConcurrentHashMap<>();
@@ -42,6 +43,7 @@ public class MethodNameInvoker<T> {
*/
public MethodNameInvoker(Dispatchable<T> target, Class<T> targetClass) {
mTargetClass = targetClass;
+ mTargetClassMethods = targetClass.getMethods();
mTarget = target;
}
@@ -68,7 +70,7 @@ public class MethodNameInvoker<T> {
Method targetMethod = mMethods.get(methodName);
if (targetMethod == null) {
- for (Method method : mTargetClass.getMethods()) {
+ for (Method method : mTargetClassMethods) {
// TODO future: match types of params if possible
if (method.getName().equals(methodName) &&
(params.length == method.getParameterTypes().length) ) {