From 324650d5fc53240fe7ef1eec4e01b3c07dbee4cb Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Thu, 19 Mar 2020 19:10:57 +0000 Subject: [PATCH] Skip unnecessary IPC when getting VibrationEffect. If we know there's no configured ringtone-specific effects, we can skip uncanonicalizing the URI, which normally incurs an IPC. Bug: 151696203 Test: atest android.os.VibrationEffectTest Change-Id: I0e3c8f5cd50761a90875d326cc57dcfd4597dd97 --- core/java/android/os/VibrationEffect.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/java/android/os/VibrationEffect.java b/core/java/android/os/VibrationEffect.java index 1992f1dc911ef..aa89b515adc6d 100644 --- a/core/java/android/os/VibrationEffect.java +++ b/core/java/android/os/VibrationEffect.java @@ -343,6 +343,14 @@ public abstract class VibrationEffect implements Parcelable { @TestApi @Nullable public static VibrationEffect get(Uri uri, Context context) { + String[] uris = context.getResources().getStringArray( + com.android.internal.R.array.config_ringtoneEffectUris); + + // Skip doing any IPC if we don't have any effects configured. + if (uris.length == 0) { + return null; + } + final ContentResolver cr = context.getContentResolver(); Uri uncanonicalUri = cr.uncanonicalize(uri); if (uncanonicalUri == null) { @@ -351,8 +359,7 @@ public abstract class VibrationEffect implements Parcelable { // place. uncanonicalUri = uri; } - String[] uris = context.getResources().getStringArray( - com.android.internal.R.array.config_ringtoneEffectUris); + for (int i = 0; i < uris.length && i < RINGTONES.length; i++) { if (uris[i] == null) { continue;