diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2018-03-25 07:21:05 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-03-25 07:21:05 +0000 |
commit | 726617e36284d39e5cf73851376d8a3cbf1b1e78 (patch) | |
tree | e9825359cfb9de4a0405c0e729aefd9a15ebaf60 | |
parent | cdba3e473d460d3022d5b35929283664fe753e3a (diff) | |
parent | 8b924e2e51c026e769343e883ee21a5c05d1eaa1 (diff) | |
download | ContactsProvider-726617e36284d39e5cf73851376d8a3cbf1b1e78.tar.gz |
Snap for 4677756 from 8b924e2e51c026e769343e883ee21a5c05d1eaa1 to pi-release
Change-Id: I9cb5807d0babcf333316f426ae3a5c95220b4a35
3 files changed, 33 insertions, 95 deletions
diff --git a/src/com/android/providers/contacts/AbstractContactsProvider.java b/src/com/android/providers/contacts/AbstractContactsProvider.java index ebf0a1b9..e00bd862 100644 --- a/src/com/android/providers/contacts/AbstractContactsProvider.java +++ b/src/com/android/providers/contacts/AbstractContactsProvider.java @@ -16,10 +16,6 @@ package com.android.providers.contacts; -import com.android.providers.contacts.ContactsDatabaseHelper.AccountsColumns; -import com.android.providers.contacts.ContactsDatabaseHelper.RawContactsColumns; -import com.android.providers.contacts.ContactsDatabaseHelper.Tables; - import android.content.ContentProvider; import android.content.ContentProviderOperation; import android.content.ContentProviderResult; @@ -38,8 +34,11 @@ import android.provider.BaseColumns; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.RawContacts; import android.util.Log; -import android.util.SparseBooleanArray; -import android.util.SparseLongArray; + +import com.android.internal.util.ProviderAccessStats; +import com.android.providers.contacts.ContactsDatabaseHelper.AccountsColumns; +import com.android.providers.contacts.ContactsDatabaseHelper.RawContactsColumns; +import com.android.providers.contacts.ContactsDatabaseHelper.Tables; import java.io.PrintWriter; import java.util.ArrayList; @@ -116,23 +115,8 @@ public abstract class AbstractContactsProvider extends ContentProvider */ private SQLiteTransactionListener mSerializedDbTransactionListener; - private final long mStartTime = SystemClock.elapsedRealtime(); - - private final Object mStatsLock = new Object(); - protected final SparseBooleanArray mAllCallingUids = new SparseBooleanArray(); - protected final SparseLongArray mQueryStats = new SparseLongArray(); - protected final SparseLongArray mBatchStats = new SparseLongArray(); - protected final SparseLongArray mInsertStats = new SparseLongArray(); - protected final SparseLongArray mUpdateStats = new SparseLongArray(); - protected final SparseLongArray mDeleteStats = new SparseLongArray(); - protected final SparseLongArray mInsertInBatchStats = new SparseLongArray(); - protected final SparseLongArray mUpdateInBatchStats = new SparseLongArray(); - protected final SparseLongArray mDeleteInBatchStats = new SparseLongArray(); - private final SparseLongArray mOperationDurationMicroStats = new SparseLongArray(); - - private final ThreadLocal<Integer> mOperationNest = ThreadLocal.withInitial(() -> 0); - private final ThreadLocal<Long> mOperationStartNs = ThreadLocal.withInitial(() -> 0L); + protected final ProviderAccessStats mStats = new ProviderAccessStats(); @Override public boolean onCreate() { @@ -158,47 +142,19 @@ public abstract class AbstractContactsProvider extends ContentProvider mSerializedDbTransactionListener = listener; } - protected final void incrementStats(SparseLongArray stats) { - final int callingUid = Binder.getCallingUid(); - synchronized (mStatsLock) { - stats.put(callingUid, stats.get(callingUid) + 1); - mAllCallingUids.put(callingUid, true); - - final int nest = mOperationNest.get(); - mOperationNest.set(nest + 1); - if (nest == 0) { - mOperationStartNs.set(SystemClock.elapsedRealtimeNanos()); - } - } + public ContactsTransaction getCurrentTransaction() { + return mTransactionHolder.get(); } - protected final void incrementStats(SparseLongArray statsNonBatch, - SparseLongArray statsInBatch) { + private boolean isInBatch() { final ContactsTransaction t = mTransactionHolder.get(); - final boolean inBatch = t != null && t.isBatch(); - incrementStats(inBatch ? statsInBatch : statsNonBatch); - } - - protected void finishOperation() { - final int callingUid = Binder.getCallingUid(); - synchronized (mStatsLock) { - final int nest = mOperationNest.get(); - mOperationNest.set(nest - 1); - if (nest == 1) { - final long duration = SystemClock.elapsedRealtimeNanos() - mOperationStartNs.get(); - mOperationDurationMicroStats.put(callingUid, - mOperationDurationMicroStats.get(callingUid) + duration / 1000L); - } - } - } - - public ContactsTransaction getCurrentTransaction() { - return mTransactionHolder.get(); + return t != null && t.isBatch(); } @Override public Uri insert(Uri uri, ContentValues values) { - incrementStats(mInsertStats, mInsertInBatchStats); + final int callingUid = Binder.getCallingUid(); + mStats.incrementInsertStats(callingUid, isInBatch()); try { ContactsTransaction transaction = startTransaction(false); try { @@ -212,13 +168,14 @@ public abstract class AbstractContactsProvider extends ContentProvider endTransaction(false); } } finally { - finishOperation(); + mStats.finishOperation(callingUid); } } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { - incrementStats(mDeleteStats, mDeleteInBatchStats); + final int callingUid = Binder.getCallingUid(); + mStats.incrementDeleteStats(callingUid, isInBatch()); try { ContactsTransaction transaction = startTransaction(false); try { @@ -232,13 +189,14 @@ public abstract class AbstractContactsProvider extends ContentProvider endTransaction(false); } } finally { - finishOperation(); + mStats.finishOperation(callingUid); } } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { - incrementStats(mUpdateStats, mUpdateInBatchStats); + final int callingUid = Binder.getCallingUid(); + mStats.incrementUpdateStats(callingUid, isInBatch()); try { ContactsTransaction transaction = startTransaction(false); try { @@ -252,13 +210,14 @@ public abstract class AbstractContactsProvider extends ContentProvider endTransaction(false); } } finally { - finishOperation(); + mStats.finishOperation(callingUid); } } @Override public int bulkInsert(Uri uri, ContentValues[] values) { - incrementStats(mBatchStats); + final int callingUid = Binder.getCallingUid(); + mStats.incrementBatchStats(callingUid); try { ContactsTransaction transaction = startTransaction(true); int numValues = values.length; @@ -282,14 +241,15 @@ public abstract class AbstractContactsProvider extends ContentProvider } return numValues; } finally { - finishOperation(); + mStats.finishOperation(callingUid); } } @Override public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations) throws OperationApplicationException { - incrementStats(mBatchStats); + final int callingUid = Binder.getCallingUid(); + mStats.incrementBatchStats(callingUid); try { if (VERBOSE_LOGGING) { Log.v(TAG, "applyBatch: " + operations.size() + " ops"); @@ -331,7 +291,7 @@ public abstract class AbstractContactsProvider extends ContentProvider endTransaction(true); } } finally { - finishOperation(); + mStats.finishOperation(callingUid); } } @@ -462,32 +422,7 @@ public abstract class AbstractContactsProvider extends ContentProvider pw.print("Database: "); pw.println(dbName); - pw.print(" Uptime: "); - pw.print((SystemClock.elapsedRealtime() - mStartTime) / (60 * 1000)); - pw.println(" minutes"); - - synchronized (mStatsLock) { - pw.println(); - pw.println(" Client activities:"); - pw.println(" UID Query Insert Update Delete Batch Insert Update Delete" - + " Sec"); - for (int i = 0; i < mAllCallingUids.size(); i++) { - final int uid = mAllCallingUids.keyAt(i); - pw.println(String.format( - " %-9d %6d %6d %6d %6d %6d %6d %6d %6d %12.3f", - uid, - mQueryStats.get(uid), - mInsertStats.get(uid), - mUpdateStats.get(uid), - mDeleteStats.get(uid), - mBatchStats.get(uid), - mInsertInBatchStats.get(uid), - mUpdateInBatchStats.get(uid), - mDeleteInBatchStats.get(uid), - (mOperationDurationMicroStats.get(uid) / 1000000.0) - )); - } - } + mStats.dump(pw, " "); if (mDbHelper == null) { pw.println("mDbHelper is null"); diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java index 1d5681ac..54b4a27d 100644 --- a/src/com/android/providers/contacts/ContactsProvider2.java +++ b/src/com/android/providers/contacts/ContactsProvider2.java @@ -5545,7 +5545,8 @@ public class ContactsProvider2 extends AbstractContactsProvider return mProfileProvider.query(uri, projection, selection, selectionArgs, sortOrder, cancellationSignal); } - incrementStats(mQueryStats); + final int callingUid = Binder.getCallingUid(); + mStats.incrementQueryStats(callingUid); try { // Otherwise proceed with a normal query against the contacts DB. switchToContactMode(); @@ -5553,7 +5554,7 @@ public class ContactsProvider2 extends AbstractContactsProvider return queryDirectoryIfNecessary(uri, projection, selection, selectionArgs, sortOrder, cancellationSignal); } finally { - finishOperation(); + mStats.finishOperation(callingUid); } } diff --git a/src/com/android/providers/contacts/ProfileProvider.java b/src/com/android/providers/contacts/ProfileProvider.java index 6c84e4b0..f3b6daf6 100644 --- a/src/com/android/providers/contacts/ProfileProvider.java +++ b/src/com/android/providers/contacts/ProfileProvider.java @@ -24,6 +24,7 @@ import android.content.res.AssetFileDescriptor; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; +import android.os.Binder; import android.os.CancellationSignal; import android.provider.ContactsContract.Intents; @@ -70,12 +71,13 @@ public class ProfileProvider extends AbstractContactsProvider { @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal) { - incrementStats(mQueryStats); + final int callingUid = Binder.getCallingUid(); + mStats.incrementQueryStats(callingUid); try { return mDelegate.queryLocal(uri, projection, selection, selectionArgs, sortOrder, -1, cancellationSignal); } finally { - finishOperation(); + mStats.finishOperation(callingUid); } } |