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

Commit c60c70dc authored by Przemyslaw Szczepaniak's avatar Przemyslaw Szczepaniak Committed by Gerrit Code Review
Browse files

Merge "Add new StrictMode thread policy - DETECT_UNBUFFERED_IO"

parents 1efb3e93 c95b2c85
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -29169,6 +29169,7 @@ package android.os {
    method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
    method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
    method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
    method public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
    method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
    method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
    method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
@@ -29181,6 +29182,7 @@ package android.os {
    method public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
    method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
    method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
    method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
  }
  public static final class StrictMode.VmPolicy {
+2 −0
Original line number Diff line number Diff line
@@ -31637,6 +31637,7 @@ package android.os {
    method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
    method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
    method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
    method public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
    method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
    method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
    method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
@@ -31649,6 +31650,7 @@ package android.os {
    method public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
    method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
    method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
    method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
  }
  public static final class StrictMode.VmPolicy {
+2 −0
Original line number Diff line number Diff line
@@ -29238,6 +29238,7 @@ package android.os {
    method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
    method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
    method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
    method public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
    method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
    method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
    method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
@@ -29250,6 +29251,7 @@ package android.os {
    method public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
    method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
    method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
    method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
  }
  public static final class StrictMode.VmPolicy {
+55 −1
Original line number Diff line number Diff line
@@ -191,9 +191,14 @@ public final class StrictMode {
     */
    public static final int DETECT_RESOURCE_MISMATCH = 0x10;  // for ThreadPolicy

    /**
     * @hide
     */
    public static final int DETECT_UNBUFFERED_IO = 0x20;  // for ThreadPolicy

    private static final int ALL_THREAD_DETECT_BITS =
            DETECT_DISK_WRITE | DETECT_DISK_READ | DETECT_NETWORK | DETECT_CUSTOM |
            DETECT_RESOURCE_MISMATCH;
            DETECT_RESOURCE_MISMATCH | DETECT_UNBUFFERED_IO;

    // Byte 2: Process-policy

@@ -464,6 +469,20 @@ public final class StrictMode {
                return disable(DETECT_RESOURCE_MISMATCH);
            }

            /**
             * Detect unbuffered input/output operations.
             */
            public Builder detectUnbufferedIo() {
                return enable(DETECT_UNBUFFERED_IO);
            }

            /**
             * Detect unbuffered input/output operations.
             */
            public Builder permitUnbufferedIo() {
                return disable(DETECT_UNBUFFERED_IO);
            }

            /**
             * Enables detection of mismatches between defined resource types
             * and getter calls.
@@ -973,6 +992,15 @@ public final class StrictMode {
        }
    }

    /**
     * @hide
     */
    private static class StrictModeUnbufferedIOViolation extends StrictModeViolation {
        public StrictModeUnbufferedIOViolation(int policyMask) {
            super(policyMask, DETECT_UNBUFFERED_IO, null);
        }
    }

    /**
     * Returns the bitmask of the current thread's policy.
     *
@@ -1281,6 +1309,20 @@ public final class StrictMode {
            startHandlingViolationException(e);
        }

        // Part of BlockGuard.Policy; just part of StrictMode:
        public void onUnbufferedIO() {
            if ((mPolicyMask & DETECT_UNBUFFERED_IO) == 0) {
                return;
            }
            if (tooManyViolationsThisLoop()) {
                return;
            }
            BlockGuard.BlockGuardPolicyException e =
                    new StrictModeUnbufferedIOViolation(mPolicyMask);
            e.fillInStackTrace();
            startHandlingViolationException(e);
        }

        // Part of BlockGuard.Policy interface:
        public void onReadFromDisk() {
            if ((mPolicyMask & DETECT_DISK_READ) == 0) {
@@ -2205,6 +2247,18 @@ public final class StrictMode {
        ((AndroidBlockGuardPolicy) policy).onResourceMismatch(tag);
    }

    /**
     * @hide
     */
    public static void noteUnbufferedIO() {
        BlockGuard.Policy policy = BlockGuard.getThreadPolicy();
        if (!(policy instanceof AndroidBlockGuardPolicy)) {
            // StrictMode not enabled.
            return;
        }
        ((AndroidBlockGuardPolicy) policy).onUnbufferedIO();
    }

    /**
     * @hide
     */