From e362e501ee5d8f892d705c0762eff0a584cfb439 Mon Sep 17 00:00:00 2001 From: Hall Liu Date: Thu, 7 Jan 2016 17:35:54 -0800 Subject: [PATCH] Initialize MD5 in logging in background 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 | 35 ++++++++++++++----- .../java/android/telecom/TelecomManager.java | 1 + 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/telecomm/java/android/telecom/Log.java b/telecomm/java/android/telecom/Log.java index 73cc4a5f6138f..3f32dbe0fdbeb 100644 --- a/telecomm/java/android/telecom/Log.java +++ b/telecomm/java/android/telecom/Log.java @@ -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() { + @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) { diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index f1cbb9ab73d3f..9f478df2063ed 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -498,6 +498,7 @@ public class TelecomManager { mContext = context; } mTelecomServiceOverride = telecomServiceImpl; + android.telecom.Log.initMd5Sum(); } /**