Merge "Add new StrictMode thread policy - DETECT_UNBUFFERED_IO" am: c60c70dcf9

am: 8297d74de5

Change-Id: Ic0778b573e1d9f0b1a9af6257ce91f9251beec30
This commit is contained in:
Przemyslaw Szczepaniak
2016-09-30 08:55:55 +00:00
committed by android-build-merger
4 changed files with 61 additions and 1 deletions

View File

@@ -29169,6 +29169,7 @@ package android.os {
method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites(); method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork(); method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches(); 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 penaltyDeath();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork(); method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog(); 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 permitDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork(); method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches(); method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
} }
public static final class StrictMode.VmPolicy { public static final class StrictMode.VmPolicy {

View File

@@ -31637,6 +31637,7 @@ package android.os {
method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites(); method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork(); method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches(); 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 penaltyDeath();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork(); method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog(); 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 permitDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork(); method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches(); method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
} }
public static final class StrictMode.VmPolicy { public static final class StrictMode.VmPolicy {

View File

@@ -29238,6 +29238,7 @@ package android.os {
method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites(); method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork(); method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches(); 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 penaltyDeath();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork(); method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog(); 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 permitDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork(); method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches(); method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
} }
public static final class StrictMode.VmPolicy { public static final class StrictMode.VmPolicy {

View File

@@ -191,9 +191,14 @@ public final class StrictMode {
*/ */
public static final int DETECT_RESOURCE_MISMATCH = 0x10; // for ThreadPolicy 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 = private static final int ALL_THREAD_DETECT_BITS =
DETECT_DISK_WRITE | DETECT_DISK_READ | DETECT_NETWORK | DETECT_CUSTOM | DETECT_DISK_WRITE | DETECT_DISK_READ | DETECT_NETWORK | DETECT_CUSTOM |
DETECT_RESOURCE_MISMATCH; DETECT_RESOURCE_MISMATCH | DETECT_UNBUFFERED_IO;
// Byte 2: Process-policy // Byte 2: Process-policy
@@ -464,6 +469,20 @@ public final class StrictMode {
return disable(DETECT_RESOURCE_MISMATCH); 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 * Enables detection of mismatches between defined resource types
* and getter calls. * 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. * Returns the bitmask of the current thread's policy.
* *
@@ -1281,6 +1309,20 @@ public final class StrictMode {
startHandlingViolationException(e); 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: // Part of BlockGuard.Policy interface:
public void onReadFromDisk() { public void onReadFromDisk() {
if ((mPolicyMask & DETECT_DISK_READ) == 0) { if ((mPolicyMask & DETECT_DISK_READ) == 0) {
@@ -2205,6 +2247,18 @@ public final class StrictMode {
((AndroidBlockGuardPolicy) policy).onResourceMismatch(tag); ((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 * @hide
*/ */