Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c9359ebb authored by mrulhania's avatar mrulhania
Browse files

SQLite appops minor fixes

This CL use intern() for string stored in memory,
and use uptimeMillis for caculating more accurate
time for read/write operations.

Bug: 377584611
Flag: EXEMPT bug fix
Test: presubmit
Change-Id: I790cdfad7940d05446cb862219c938ed3badf45c
parent 066854b8
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.os.Trace;
import android.util.IntArray;
import android.util.Slog;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.FrameworkStatsLog;

import java.io.File;
@@ -88,7 +89,7 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper {
        if (appOpEvents.isEmpty()) {
            return;
        }
        long startTime = SystemClock.elapsedRealtime();
        long startTime = SystemClock.uptimeMillis();
        Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER,
                "AppOpHistoryDbHelper_" + mAggregationTimeWindow + "_Write");
        try {
@@ -147,7 +148,7 @@ 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;
            long writeTimeMillis = SystemClock.uptimeMillis() - startTime;
            FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED, /* read_time= */
                    -1, writeTimeMillis,
                    mDatabaseFile.length(), getDatabaseType(mAggregationTimeWindow), writeSource);
@@ -187,7 +188,7 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper {
        String sql = AppOpHistoryQueryHelper.buildSqlQuery(
                AppOpHistoryTable.SELECT_TABLE_DATA, conditions, orderByColumn, ascending, limit);

        long startTime = SystemClock.elapsedRealtime();
        long startTime = SystemClock.uptimeMillis();
        try {
            SQLiteDatabase db = getReadableDatabase();
            db.beginTransactionReadOnly();
@@ -204,7 +205,7 @@ 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;
            long readTimeMillis = SystemClock.uptimeMillis() - startTime;
            FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_APP_OP_EVENT_REPORTED,
                    readTimeMillis, /* write_time= */ -1,
                    mDatabaseFile.length(), getDatabaseType(mAggregationTimeWindow),
@@ -242,6 +243,7 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper {
        return chainId;
    }

    @VisibleForTesting
    List<AggregatedAppOpAccessEvent> getAppOpHistory() {
        List<AggregatedAppOpAccessEvent> results = new ArrayList<>();

@@ -301,7 +303,8 @@ class AppOpHistoryDbHelper extends SQLiteOpenHelper {
        int totalRejectCount = statement.getColumnInt(13);

        return new AggregatedAppOpAccessEvent(uid,
                packageName, opCode, deviceId, attributionTag,
                packageName != null ? packageName.intern() : null, opCode, deviceId.intern(),
                attributionTag != null ? attributionTag.intern() : null,
                opFlags, uidState, attributionFlags, attributionChainId, accessTime,
                duration, totalDuration, totalAccessCount, totalRejectCount);
    }
+8 −1
Original line number Diff line number Diff line
@@ -222,7 +222,8 @@ public class AppOpHistoryHelper {
    }

    private List<AggregatedAppOpAccessEvent> getAppOpHistory(AppOpsManager.HistoricalOps result,
            long beginTimeMillis, long endTimeMillis, int filter, int uidFilter,
            long beginTimeMillis, long endTimeMillis,
            @AppOpsManager.HistoricalOpsRequestFilter int filter, int uidFilter,
            @Nullable String packageNameFilter,
            @Nullable String[] opNamesFilter,
            @Nullable String attributionTagFilter, int opFlagsFilter) {
@@ -635,6 +636,12 @@ public class AppOpHistoryHelper {
            if (mPackageName != null) {
                mPackageName = mPackageName.intern();
            }
            if (mAttributionTag != null) {
                mAttributionTag = mAttributionTag.intern();
            }
            if (mDeviceId != null) {
                mDeviceId = mDeviceId.intern();
            }
        }

        @Override
+4 −4
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
        }
        long startTime = 0;
        if (Flags.sqliteDiscreteOpEventLoggingEnabled()) {
            startTime = SystemClock.elapsedRealtime();
            startTime = SystemClock.uptimeMillis();
        }

        Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "DiscreteOpsWrite");
@@ -137,7 +137,7 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
            Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
        }
        if (Flags.sqliteDiscreteOpEventLoggingEnabled()) {
            long timeTaken = SystemClock.elapsedRealtime() - startTime;
            long timeTaken = SystemClock.uptimeMillis() - startTime;
            FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_DISCRETE_OP_EVENT_REPORTED,
                    -1, timeTaken, getDatabaseFile().length());
        }
@@ -217,7 +217,7 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
                ascending, limit);
        long startTime = 0;
        if (Flags.sqliteDiscreteOpEventLoggingEnabled()) {
            startTime = SystemClock.elapsedRealtime();
            startTime = SystemClock.uptimeMillis();
        }
        SQLiteDatabase db = getReadableDatabase();
        List<DiscreteOpsSqlRegistry.DiscreteOp> results = new ArrayList<>();
@@ -250,7 +250,7 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
            db.endTransaction();
        }
        if (Flags.sqliteDiscreteOpEventLoggingEnabled()) {
            long timeTaken = SystemClock.elapsedRealtime() - startTime;
            long timeTaken = SystemClock.uptimeMillis() - startTime;
            FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_DISCRETE_OP_EVENT_REPORTED,
                    timeTaken, -1, getDatabaseFile().length());
        }