Loading services/core/java/com/android/server/appop/AppOpHistoryDbHelper.java +28 −1 Original line number Diff line number Diff line Loading @@ -28,10 +28,13 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteRawStatement; import android.os.SystemClock; import android.os.Trace; import android.util.IntArray; import android.util.Slog; import com.android.internal.util.FrameworkStatsLog; import java.io.File; import java.util.ArrayList; import java.util.List; Loading Loading @@ -78,10 +81,12 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper { public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } void insertAppOpHistory(@NonNull List<AggregatedAppOpAccessEvent> appOpEvents) { void insertAppOpHistory(@NonNull List<AggregatedAppOpAccessEvent> appOpEvents, int writeSource) { if (appOpEvents.isEmpty()) { return; } long startTime = SystemClock.elapsedRealtime(); Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "AppOpHistoryDbHelper_" + mAggregationTimeWindow + "_Write"); try { Loading Loading @@ -140,6 +145,18 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper { Slog.e(LOG_TAG, "Couldn't insert app op records in " + mDatabaseFile.getName(), ex); } finally { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); long writeTimeMillis = SystemClock.elapsedRealtime() - startTime; FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED, /* read_time= */ -1, writeTimeMillis, mDatabaseFile.length(), getDatabaseType(mAggregationTimeWindow), writeSource); } } private int getDatabaseType(AggregationTimeWindow aggregationTimeWindow) { if (aggregationTimeWindow == AggregationTimeWindow.SHORT) { return FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__DATABASE_TYPE__DB_SHORT_INTERVAL; } else { return FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__DATABASE_TYPE__DB_LONG_INTERVAL; } } Loading @@ -156,6 +173,7 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper { String sql = AppOpHistoryQueryHelper.buildSqlQuery( AppOpHistoryTable.SELECT_TABLE_DATA, conditions, orderByColumn, ascending, limit); long startTime = SystemClock.elapsedRealtime(); try { SQLiteDatabase db = getReadableDatabase(); db.beginTransactionReadOnly(); Loading @@ -171,6 +189,15 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper { } } catch (Exception ex) { Slog.e(LOG_TAG, "Couldn't read app op records from " + mDatabaseFile.getName(), ex); } finally { long readTimeMillis = SystemClock.elapsedRealtime() - startTime; FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED, readTimeMillis, /* write_time= */ -1, mDatabaseFile.length(), getDatabaseType(mAggregationTimeWindow), FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_UNKNOWN); } if (HistoricalRegistry.DEBUG) { Slog.i(LOG_TAG, "Read " + results.size() + " records from " + mDatabaseFile.getName()); } return results; } Loading services/core/java/com/android/server/appop/AppOpHistoryHelper.java +23 −9 Original line number Diff line number Diff line Loading @@ -23,6 +23,11 @@ import static android.app.AppOpsManager.ATTRIBUTION_FLAG_TRUSTED; import static android.app.AppOpsManager.flagsToString; import static android.app.AppOpsManager.getUidStateName; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_CACHE_FULL; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_MIGRATION; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_PERIODIC; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_SHUTDOWN; import static com.android.server.appop.HistoricalRegistry.AggregationTimeWindow; import android.annotation.NonNull; Loading Loading @@ -211,9 +216,11 @@ public class AppOpHistoryHelper { IntArray opCodes = AppOpHistoryQueryHelper.getAppOpCodes(filter, opNamesFilter); // flush the cache into database before read. if (opCodes != null) { mDbHelper.insertAppOpHistory(mCache.evict(opCodes)); mDbHelper.insertAppOpHistory(mCache.evict(opCodes), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); } else { mDbHelper.insertAppOpHistory(mCache.evictAll()); mDbHelper.insertAppOpHistory(mCache.evictAll(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); } // Adjust begin & end time to time window's boundary. beginTimeMillis = Math.max(discretizeTimestamp(beginTimeMillis), Loading @@ -237,7 +244,8 @@ public class AppOpHistoryHelper { void shutdown() { mSqliteWriteHandler.removeAllPendingMessages(); mDbHelper.insertAppOpHistory(mCache.evictAll()); mDbHelper.insertAppOpHistory(mCache.evictAll(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_SHUTDOWN); mDbHelper.close(); } Loading @@ -262,7 +270,8 @@ public class AppOpHistoryHelper { } void migrateDiscreteAppOpHistory(List<AggregatedAppOpAccessEvent> appOpEvents) { mDbHelper.insertAppOpHistory(appOpEvents); mDbHelper.insertAppOpHistory(appOpEvents, SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_MIGRATION); } @VisibleForTesting Loading @@ -284,9 +293,11 @@ public class AppOpHistoryHelper { IntArray opCodes = AppOpHistoryQueryHelper.getAppOpCodes(filter, opNamesFilter); // flush the cache into database before read. if (opCodes != null) { mDbHelper.insertAppOpHistory(mCache.evict(opCodes)); mDbHelper.insertAppOpHistory(mCache.evict(opCodes), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); } else { mDbHelper.insertAppOpHistory(mCache.evictAll()); mDbHelper.insertAppOpHistory(mCache.evictAll(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); } // Adjust begin & end time to time window's boundary. beginTimeMillis = Math.max(discretizeTimestamp(beginTimeMillis), Loading Loading @@ -323,7 +334,8 @@ public class AppOpHistoryHelper { @AppOpsManager.HistoricalOpsRequestFilter int filter, @NonNull SimpleDateFormat sdf, @NonNull Date date, int limit) { // flush caches to the database mDbHelper.insertAppOpHistory(mCache.evictAll()); mDbHelper.insertAppOpHistory(mCache.evictAll(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); long currentTime = System.currentTimeMillis(); long beginTimeMillis = discretizeTimestamp(currentTime - mHistoryRetentionMillis); IntArray opCodes = new IntArray(); Loading Loading @@ -381,7 +393,8 @@ public class AppOpHistoryHelper { switch (msg.what) { case WRITE_DATABASE_PERIODIC -> { try { mDbHelper.insertAppOpHistory(mCache.evict()); mDbHelper.insertAppOpHistory(mCache.evict(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_PERIODIC); } finally { ensurePeriodicJobsAreScheduled(); } Loading @@ -397,7 +410,8 @@ public class AppOpHistoryHelper { evictedEvents.addAll(mCache.evictAll()); } } mDbHelper.insertAppOpHistory(evictedEvents); mDbHelper.insertAppOpHistory(evictedEvents, SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_CACHE_FULL); } finally { ensurePeriodicJobsAreScheduled(); } Loading Loading
services/core/java/com/android/server/appop/AppOpHistoryDbHelper.java +28 −1 Original line number Diff line number Diff line Loading @@ -28,10 +28,13 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteRawStatement; import android.os.SystemClock; import android.os.Trace; import android.util.IntArray; import android.util.Slog; import com.android.internal.util.FrameworkStatsLog; import java.io.File; import java.util.ArrayList; import java.util.List; Loading Loading @@ -78,10 +81,12 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper { public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } void insertAppOpHistory(@NonNull List<AggregatedAppOpAccessEvent> appOpEvents) { void insertAppOpHistory(@NonNull List<AggregatedAppOpAccessEvent> appOpEvents, int writeSource) { if (appOpEvents.isEmpty()) { return; } long startTime = SystemClock.elapsedRealtime(); Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "AppOpHistoryDbHelper_" + mAggregationTimeWindow + "_Write"); try { Loading Loading @@ -140,6 +145,18 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper { Slog.e(LOG_TAG, "Couldn't insert app op records in " + mDatabaseFile.getName(), ex); } finally { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); long writeTimeMillis = SystemClock.elapsedRealtime() - startTime; FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED, /* read_time= */ -1, writeTimeMillis, mDatabaseFile.length(), getDatabaseType(mAggregationTimeWindow), writeSource); } } private int getDatabaseType(AggregationTimeWindow aggregationTimeWindow) { if (aggregationTimeWindow == AggregationTimeWindow.SHORT) { return FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__DATABASE_TYPE__DB_SHORT_INTERVAL; } else { return FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__DATABASE_TYPE__DB_LONG_INTERVAL; } } Loading @@ -156,6 +173,7 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper { String sql = AppOpHistoryQueryHelper.buildSqlQuery( AppOpHistoryTable.SELECT_TABLE_DATA, conditions, orderByColumn, ascending, limit); long startTime = SystemClock.elapsedRealtime(); try { SQLiteDatabase db = getReadableDatabase(); db.beginTransactionReadOnly(); Loading @@ -171,6 +189,15 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper { } } catch (Exception ex) { Slog.e(LOG_TAG, "Couldn't read app op records from " + mDatabaseFile.getName(), ex); } finally { long readTimeMillis = SystemClock.elapsedRealtime() - startTime; FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED, readTimeMillis, /* write_time= */ -1, mDatabaseFile.length(), getDatabaseType(mAggregationTimeWindow), FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_UNKNOWN); } if (HistoricalRegistry.DEBUG) { Slog.i(LOG_TAG, "Read " + results.size() + " records from " + mDatabaseFile.getName()); } return results; } Loading
services/core/java/com/android/server/appop/AppOpHistoryHelper.java +23 −9 Original line number Diff line number Diff line Loading @@ -23,6 +23,11 @@ import static android.app.AppOpsManager.ATTRIBUTION_FLAG_TRUSTED; import static android.app.AppOpsManager.flagsToString; import static android.app.AppOpsManager.getUidStateName; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_CACHE_FULL; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_MIGRATION; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_PERIODIC; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ; import static com.android.internal.util.FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_SHUTDOWN; import static com.android.server.appop.HistoricalRegistry.AggregationTimeWindow; import android.annotation.NonNull; Loading Loading @@ -211,9 +216,11 @@ public class AppOpHistoryHelper { IntArray opCodes = AppOpHistoryQueryHelper.getAppOpCodes(filter, opNamesFilter); // flush the cache into database before read. if (opCodes != null) { mDbHelper.insertAppOpHistory(mCache.evict(opCodes)); mDbHelper.insertAppOpHistory(mCache.evict(opCodes), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); } else { mDbHelper.insertAppOpHistory(mCache.evictAll()); mDbHelper.insertAppOpHistory(mCache.evictAll(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); } // Adjust begin & end time to time window's boundary. beginTimeMillis = Math.max(discretizeTimestamp(beginTimeMillis), Loading @@ -237,7 +244,8 @@ public class AppOpHistoryHelper { void shutdown() { mSqliteWriteHandler.removeAllPendingMessages(); mDbHelper.insertAppOpHistory(mCache.evictAll()); mDbHelper.insertAppOpHistory(mCache.evictAll(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_SHUTDOWN); mDbHelper.close(); } Loading @@ -262,7 +270,8 @@ public class AppOpHistoryHelper { } void migrateDiscreteAppOpHistory(List<AggregatedAppOpAccessEvent> appOpEvents) { mDbHelper.insertAppOpHistory(appOpEvents); mDbHelper.insertAppOpHistory(appOpEvents, SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_MIGRATION); } @VisibleForTesting Loading @@ -284,9 +293,11 @@ public class AppOpHistoryHelper { IntArray opCodes = AppOpHistoryQueryHelper.getAppOpCodes(filter, opNamesFilter); // flush the cache into database before read. if (opCodes != null) { mDbHelper.insertAppOpHistory(mCache.evict(opCodes)); mDbHelper.insertAppOpHistory(mCache.evict(opCodes), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); } else { mDbHelper.insertAppOpHistory(mCache.evictAll()); mDbHelper.insertAppOpHistory(mCache.evictAll(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); } // Adjust begin & end time to time window's boundary. beginTimeMillis = Math.max(discretizeTimestamp(beginTimeMillis), Loading Loading @@ -323,7 +334,8 @@ public class AppOpHistoryHelper { @AppOpsManager.HistoricalOpsRequestFilter int filter, @NonNull SimpleDateFormat sdf, @NonNull Date date, int limit) { // flush caches to the database mDbHelper.insertAppOpHistory(mCache.evictAll()); mDbHelper.insertAppOpHistory(mCache.evictAll(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_READ); long currentTime = System.currentTimeMillis(); long beginTimeMillis = discretizeTimestamp(currentTime - mHistoryRetentionMillis); IntArray opCodes = new IntArray(); Loading Loading @@ -381,7 +393,8 @@ public class AppOpHistoryHelper { switch (msg.what) { case WRITE_DATABASE_PERIODIC -> { try { mDbHelper.insertAppOpHistory(mCache.evict()); mDbHelper.insertAppOpHistory(mCache.evict(), SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_PERIODIC); } finally { ensurePeriodicJobsAreScheduled(); } Loading @@ -397,7 +410,8 @@ public class AppOpHistoryHelper { evictedEvents.addAll(mCache.evictAll()); } } mDbHelper.insertAppOpHistory(evictedEvents); mDbHelper.insertAppOpHistory(evictedEvents, SQLITE_APP_OP_EVENT_REPORTED__WRITE_TYPE__WRITE_CACHE_FULL); } finally { ensurePeriodicJobsAreScheduled(); } Loading