diff options
author | Makoto Onuki <omakoto@google.com> | 2023-05-18 11:34:26 -0700 |
---|---|---|
committer | Makoto Onuki <omakoto@google.com> | 2023-05-23 12:15:42 -0700 |
commit | 37ebcd9c8c07070203c3bbad8302124dbba7601c (patch) | |
tree | 68be0ee30de1b02b4769611b09a1df80921d4163 | |
parent | 198236e095e42c3efe9e12e0253d9335f660a6ae (diff) | |
download | ContactsProvider-37ebcd9c8c07070203c3bbad8302124dbba7601c.tar.gz |
Log GAL provider calls
Test: atest ContactsProviderTests CtsContactsProviderTestCases
Bug: 161166785
Change-Id: I9e6b46ccd936bc31c1c5f55504a628944c8aecc7
4 files changed, 52 insertions, 6 deletions
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java index c38cc364..56162916 100644 --- a/src/com/android/providers/contacts/ContactsProvider2.java +++ b/src/com/android/providers/contacts/ContactsProvider2.java @@ -1373,6 +1373,7 @@ public class ContactsProvider2 extends AbstractContactsProvider String authority; String accountName; String accountType; + String packageName; } /** @@ -2366,7 +2367,8 @@ public class ContactsProvider2 extends AbstractContactsProvider .setUriType(sUriMatcher.match(uri)) .setCallerIsSyncAdapter(readBooleanQueryParameter( uri, ContactsContract.CALLER_IS_SYNCADAPTER, false)) - .setStartNanos(SystemClock.elapsedRealtimeNanos()); + .setStartNanos(SystemClock.elapsedRealtimeNanos()) + .setUid(Binder.getCallingUid()); Uri resultUri = null; try { @@ -2405,7 +2407,8 @@ public class ContactsProvider2 extends AbstractContactsProvider .setUriType(sUriMatcher.match(uri)) .setCallerIsSyncAdapter(readBooleanQueryParameter( uri, ContactsContract.CALLER_IS_SYNCADAPTER, false)) - .setStartNanos(SystemClock.elapsedRealtimeNanos()); + .setStartNanos(SystemClock.elapsedRealtimeNanos()) + .setUid(Binder.getCallingUid()); int updates = 0; try { @@ -2443,7 +2446,8 @@ public class ContactsProvider2 extends AbstractContactsProvider .setUriType(sUriMatcher.match(uri)) .setCallerIsSyncAdapter(readBooleanQueryParameter( uri, ContactsContract.CALLER_IS_SYNCADAPTER, false)) - .setStartNanos(SystemClock.elapsedRealtimeNanos()); + .setStartNanos(SystemClock.elapsedRealtimeNanos()) + .setUid(Binder.getCallingUid()); int deletes = 0; try { @@ -5661,7 +5665,8 @@ public class ContactsProvider2 extends AbstractContactsProvider .setUriType(sUriMatcher.match(uri)) .setCallerIsSyncAdapter(readBooleanQueryParameter( uri, ContactsContract.CALLER_IS_SYNCADAPTER, false)) - .setStartNanos(SystemClock.elapsedRealtimeNanos()); + .setStartNanos(SystemClock.elapsedRealtimeNanos()) + .setUid(Binder.getCallingUid()); Cursor cursor = null; try { @@ -5960,8 +5965,20 @@ public class ContactsProvider2 extends AbstractContactsProvider if (projection == null) { projection = getDefaultProjection(uri); } + int galUid = -1; + try { + galUid = getContext().getPackageManager().getPackageUid(directoryInfo.packageName, + PackageManager.MATCH_ALL); + } catch (NameNotFoundException e) { + // Shouldn't happen, but just in case. + Log.w(TAG, "getPackageUid() failed", e); + } + final LogFields.Builder logBuilder = LogFields.Builder.aLogFields() + .setApiType(LogUtils.ApiType.GAL_CALL) + .setUriType(sUriMatcher.match(uri)) + .setUid(galUid); - Cursor cursor; + Cursor cursor = null; try { if (VERBOSE_LOGGING) { Log.v(TAG, "Making directory query: uri=" + directoryUri + @@ -5979,6 +5996,9 @@ public class ContactsProvider2 extends AbstractContactsProvider } catch (RuntimeException e) { Log.w(TAG, "Directory query failed", e); return null; + } finally { + LogUtils.log( + logBuilder.setResultCount(cursor == null ? 0 : cursor.getCount()).build()); } if (cursor.getCount() > 0) { @@ -6132,7 +6152,8 @@ public class ContactsProvider2 extends AbstractContactsProvider Directory._ID, Directory.DIRECTORY_AUTHORITY, Directory.ACCOUNT_NAME, - Directory.ACCOUNT_TYPE + Directory.ACCOUNT_TYPE, + Directory.PACKAGE_NAME }; public static final int DIRECTORY_ID = 0; @@ -6158,6 +6179,8 @@ public class ContactsProvider2 extends AbstractContactsProvider info.authority = cursor.getString(DirectoryQuery.AUTHORITY); info.accountName = cursor.getString(DirectoryQuery.ACCOUNT_NAME); info.accountType = cursor.getString(DirectoryQuery.ACCOUNT_TYPE); + info.packageName = + cursor.getString(cursor.getColumnIndex(Directory.PACKAGE_NAME)); mDirectoryCache.put(id, info); } } finally { diff --git a/src/com/android/providers/contacts/util/LogFields.java b/src/com/android/providers/contacts/util/LogFields.java index fc05c847..1672d3db 100644 --- a/src/com/android/providers/contacts/util/LogFields.java +++ b/src/com/android/providers/contacts/util/LogFields.java @@ -37,6 +37,8 @@ public final class LogFields { private int resultCount; + private int uid; + public LogFields( int apiType, int uriType, int taskType, boolean callerIsSyncAdapter, long startNanos) { this.apiType = apiType; @@ -78,6 +80,10 @@ public final class LogFields { return resultCount; } + public int getUid() { + return uid; + } + public static final class Builder { private int apiType; private int uriType; @@ -88,6 +94,8 @@ public final class LogFields { private Uri resultUri; private int resultCount; + private int uid; + private Builder() { } @@ -135,12 +143,18 @@ public final class LogFields { return this; } + public Builder setUid(int uid) { + this.uid = uid; + return this; + } + public LogFields build() { LogFields logFields = new LogFields(apiType, uriType, taskType, callerIsSyncAdapter, startNanos); logFields.resultCount = this.resultCount; logFields.exception = this.exception; logFields.resultUri = this.resultUri; + logFields.uid = this.uid; return logFields; } } diff --git a/src/com/android/providers/contacts/util/LogUtils.java b/src/com/android/providers/contacts/util/LogUtils.java index a2301006..41409645 100644 --- a/src/com/android/providers/contacts/util/LogUtils.java +++ b/src/com/android/providers/contacts/util/LogUtils.java @@ -37,6 +37,8 @@ public class LogUtils { int INSERT = 2; int UPDATE = 3; int DELETE = 4; + int CALL = 5; + int GAL_CALL = 6; } // Keep in sync with ContactsProviderStatus#TaskType in @@ -66,6 +68,8 @@ public class LogUtils { .writeInt(logFields.getResultCount()) .writeLong(getLatencyMicros(logFields.getStartNanos())) .writeInt(logFields.getTaskType()) + .writeInt(0) // Not used yet. + .writeInt(logFields.getUid()) .usePooledBuffer() .build()); } diff --git a/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java b/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java index 6210229e..62f17eab 100644 --- a/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java +++ b/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java @@ -156,4 +156,9 @@ public class ContactsMockPackageManager extends MockPackageManager { UserHandle user) { return new ArrayList<>(); } + + @Override + public int getPackageUid(String packageName, int flags) throws NameNotFoundException { + return 123; + } } |