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

Commit 76add361 authored by Manjeet Rulhania's avatar Manjeet Rulhania Committed by Android (Google) Code Review
Browse files

Merge "Log sqlite read/write performance events" into main

parents be7fedfd 72f31db1
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -493,3 +493,9 @@ flag {
    bug: "341941666"
}

flag {
    name: "sqlite_discrete_op_event_logging_enabled"
    namespace: "permissions"
    description: "Collect sqlite performance metrics for discrete ops."
    bug: "377584611"
}
+22 −1
Original line number Diff line number Diff line
@@ -27,9 +27,13 @@ import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteRawStatement;
import android.os.Environment;
import android.os.SystemClock;
import android.permission.flags.Flags;
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;
@@ -76,6 +80,10 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
        if (opEvents.isEmpty()) {
            return;
        }
        long startTime = 0;
        if (Flags.sqliteDiscreteOpEventLoggingEnabled()) {
            startTime = SystemClock.elapsedRealtime();
        }

        SQLiteDatabase db = getWritableDatabase();
        // TODO (b/383157289) what if database is busy and can't start a transaction? will read
@@ -117,6 +125,11 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
                        + " file size (bytes) : " + getDatabaseFile().length(), exception);
            }
        }
        if (Flags.sqliteDiscreteOpEventLoggingEnabled()) {
            long timeTaken = SystemClock.elapsedRealtime() - startTime;
            FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_DISCRETE_OP_EVENT_REPORTED,
                    -1, timeTaken, getDatabaseFile().length());
        }
    }

    private void bindTextOrNull(SQLiteRawStatement statement, int index, @Nullable String text) {
@@ -181,7 +194,10 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
                uidFilter, packageNameFilter,
                attributionTagFilter, opCodesFilter, opFlagsFilter);
        String sql = buildSql(conditions, orderByColumn, limit);

        long startTime = 0;
        if (Flags.sqliteDiscreteOpEventLoggingEnabled()) {
            startTime = SystemClock.elapsedRealtime();
        }
        SQLiteDatabase db = getReadableDatabase();
        List<DiscreteOpsSqlRegistry.DiscreteOp> results = new ArrayList<>();
        db.beginTransactionReadOnly();
@@ -225,6 +241,11 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
        } finally {
            db.endTransaction();
        }
        if (Flags.sqliteDiscreteOpEventLoggingEnabled()) {
            long timeTaken = SystemClock.elapsedRealtime() - startTime;
            FrameworkStatsLog.write(FrameworkStatsLog.SQLITE_DISCRETE_OP_EVENT_REPORTED,
                    timeTaken, -1, getDatabaseFile().length());
        }
        return results;
    }