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
This commit is contained in:
Michael Wright
2020-03-19 19:10:57 +00:00
parent 962b460f1c
commit 324650d5fc

View File

@@ -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;