OSDN Git Service

Initialize MD5 in logging in background
authorHall Liu <hallliu@google.com>
Fri, 8 Jan 2016 01:35:54 +0000 (17:35 -0800)
committerHall Liu <hallliu@google.com>
Tue, 12 Jan 2016 01:28:08 +0000 (17:28 -0800)
Use a background task to call MessageDigest.getInstance in order to
avoid a possible disk read on initialization.

Bug: 26069217
Change-Id: I0091ce012bcd811dfca0e85c21a12c54913ed919

telecomm/java/android/telecom/Log.java
telecomm/java/android/telecom/TelecomManager.java

index 73cc4a5..3f32dbe 100644 (file)
@@ -16,6 +16,8 @@
 
 package android.telecom;
 
+import android.os.AsyncTask;
+
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.IllegalFormatException;
@@ -38,8 +40,26 @@ final public class Log {
     public static final boolean WARN = isLoggable(android.util.Log.WARN);
     public static final boolean ERROR = isLoggable(android.util.Log.ERROR);
 
+    private static MessageDigest sMessageDigest;
+
     private Log() {}
 
+    public static void initMd5Sum() {
+        new AsyncTask<Void, Void, Void>() {
+            @Override
+            public Void doInBackground(Void... args) {
+                MessageDigest md;
+                try {
+                    md = MessageDigest.getInstance("SHA-1");
+                } catch (NoSuchAlgorithmException e) {
+                    md = null;
+                }
+                sMessageDigest = md;
+                return null;
+            }
+        }.execute();
+    }
+
     public static boolean isLoggable(int level) {
         return FORCE_LOGGING || android.util.Log.isLoggable(TAG, level);
     }
@@ -137,15 +157,14 @@ final public class Log {
     }
 
     private static String secureHash(byte[] input) {
-        MessageDigest messageDigest;
-        try {
-            messageDigest = MessageDigest.getInstance("SHA-1");
-        } catch (NoSuchAlgorithmException e) {
-            return null;
+        if (sMessageDigest != null) {
+            sMessageDigest.reset();
+            sMessageDigest.update(input);
+            byte[] result = sMessageDigest.digest();
+            return encodeHex(result);
+        } else {
+            return "Uninitialized SHA1";
         }
-        messageDigest.update(input);
-        byte[] result = messageDigest.digest();
-        return encodeHex(result);
     }
 
     private static String encodeHex(byte[] bytes) {
index b07b018..999753f 100644 (file)
@@ -463,6 +463,7 @@ public class TelecomManager {
         } else {
             mContext = context;
         }
+        android.telecom.Log.initMd5Sum();
     }
 
     /**