summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@android.com>2010-08-24 11:46:47 -0700
committerBrad Fitzpatrick <bradfitz@android.com>2010-08-24 11:47:19 -0700
commit97461bd25c3821f3fb6af9705f0612259c6b4492 (patch)
treefa090d0495b22759bc751f0f9ef6061bc9e9a0cd
parent2703a42d16af0e62da1bba02b6c935d98debf936 (diff)
downloadframeworks_base-97461bd25c3821f3fb6af9705f0612259c6b4492.zip
frameworks_base-97461bd25c3821f3fb6af9705f0612259c6b4492.tar.gz
frameworks_base-97461bd25c3821f3fb6af9705f0612259c6b4492.tar.bz2
Some StrictMode API changes.
* rename setThreadBlockingPolicy to setThreadPolicy (opens the way to using StrictMode for non-blocking-related things in the future?) * add allowThreadDiskWrites() and allowThreadDiskReads() to modify the current policy mask and return the old one. this will allow turning off part of StrictMode during certain regions of code. (for instance, writing to disk in Activity onPause...) Change-Id: Ia1878153713f79299971fdab567fa15b3cb9d56c
-rw-r--r--api/current.xml62
-rw-r--r--core/java/android/app/ActivityThread.java2
-rw-r--r--core/java/android/os/StrictMode.java44
3 files changed, 81 insertions, 27 deletions
diff --git a/api/current.xml b/api/current.xml
index bd87087..38756d3 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -129270,7 +129270,7 @@
deprecated="not deprecated"
visibility="public"
>
-<method name="getThreadBlockingPolicy"
+<method name="allowThreadDiskReads"
return="int"
abstract="false"
native="false"
@@ -129281,7 +129281,29 @@
visibility="public"
>
</method>
-<method name="setThreadBlockingPolicy"
+<method name="allowThreadDiskWrites"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="getThreadPolicy"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="setThreadPolicy"
return="void"
abstract="false"
native="false"
@@ -258023,7 +258045,7 @@
>
<parameter name="numBits" type="int">
</parameter>
-<parameter name="rnd" type="java.util.Random">
+<parameter name="random" type="java.util.Random">
</parameter>
</constructor>
<constructor name="BigInteger"
@@ -258037,7 +258059,7 @@
</parameter>
<parameter name="certainty" type="int">
</parameter>
-<parameter name="rnd" type="java.util.Random">
+<parameter name="unused" type="java.util.Random">
</parameter>
</constructor>
<constructor name="BigInteger"
@@ -258047,7 +258069,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.lang.String">
+<parameter name="value" type="java.lang.String">
</parameter>
</constructor>
<constructor name="BigInteger"
@@ -258057,7 +258079,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.lang.String">
+<parameter name="value" type="java.lang.String">
</parameter>
<parameter name="radix" type="int">
</parameter>
@@ -258081,7 +258103,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="byte[]">
+<parameter name="value" type="byte[]">
</parameter>
</constructor>
<method name="abs"
@@ -258105,7 +258127,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="and"
@@ -258118,7 +258140,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="andNot"
@@ -258131,7 +258153,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="bitCount"
@@ -258179,7 +258201,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="divide"
@@ -258253,7 +258275,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="getLowestSetBit"
@@ -258312,7 +258334,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="min"
@@ -258325,7 +258347,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="mod"
@@ -258379,7 +258401,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="negate"
@@ -258425,7 +258447,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="pow"
@@ -258453,7 +258475,7 @@
>
<parameter name="bitLength" type="int">
</parameter>
-<parameter name="rnd" type="java.util.Random">
+<parameter name="unused" type="java.util.Random">
</parameter>
</method>
<method name="remainder"
@@ -258529,7 +258551,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<method name="testBit"
@@ -258579,7 +258601,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="long">
+<parameter name="value" type="long">
</parameter>
</method>
<method name="xor"
@@ -258592,7 +258614,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="val" type="java.math.BigInteger">
+<parameter name="value" type="java.math.BigInteger">
</parameter>
</method>
<field name="ONE"
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index c96d562..c07e3d3 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -3106,7 +3106,7 @@ public final class ActivityThread {
(ApplicationInfo.FLAG_SYSTEM |
ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0 &&
!"user".equals(Build.TYPE)) {
- StrictMode.setThreadBlockingPolicy(
+ StrictMode.setThreadPolicy(
StrictMode.DISALLOW_DISK_WRITE |
StrictMode.DISALLOW_DISK_READ |
StrictMode.DISALLOW_NETWORK |
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index ac12e10..7f7b02b 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -114,7 +114,7 @@ public final class StrictMode {
*
* @param policyMask a bitmask of DISALLOW_* and PENALTY_* values.
*/
- public static void setThreadBlockingPolicy(final int policyMask) {
+ public static void setThreadPolicy(final int policyMask) {
// In addition to the Java-level thread-local in Dalvik's
// BlockGuard, we also need to keep a native thread-local in
// Binder in order to propagate the value across Binder calls,
@@ -164,11 +164,43 @@ public final class StrictMode {
*
* @return the bitmask of all the DISALLOW_* and PENALTY_* bits currently enabled
*/
- public static int getThreadBlockingPolicy() {
+ public static int getThreadPolicy() {
return BlockGuard.getThreadPolicy().getPolicyMask();
}
/**
+ * Updates the current thread's policy mask to allow reading &amp;
+ * writing to disk.
+ *
+ * @return the old policy mask, to be passed to setThreadPolicy to
+ * restore the policy.
+ */
+ public static int allowThreadDiskWrites() {
+ int oldPolicy = getThreadPolicy();
+ int newPolicy = oldPolicy & ~(DISALLOW_DISK_WRITE | DISALLOW_DISK_READ);
+ if (newPolicy != oldPolicy) {
+ setThreadPolicy(newPolicy);
+ }
+ return oldPolicy;
+ }
+
+ /**
+ * Updates the current thread's policy mask to allow reading from
+ * disk.
+ *
+ * @return the old policy mask, to be passed to setThreadPolicy to
+ * restore the policy.
+ */
+ public static int allowThreadDiskReads() {
+ int oldPolicy = getThreadPolicy();
+ int newPolicy = oldPolicy & ~(DISALLOW_DISK_READ);
+ if (newPolicy != oldPolicy) {
+ setThreadPolicy(newPolicy);
+ }
+ return oldPolicy;
+ }
+
+ /**
* Parses the BlockGuard policy mask out from the Exception's
* getMessage() String value. Kinda gross, but least
* invasive. :/
@@ -413,13 +445,13 @@ public final class StrictMode {
if (violationMaskSubset != 0) {
int violationBit = parseViolationFromMessage(info.crashInfo.exceptionMessage);
violationMaskSubset |= violationBit;
- final int savedPolicy = getThreadBlockingPolicy();
+ final int savedPolicy = getThreadPolicy();
try {
// First, remove any policy before we call into the Activity Manager,
// otherwise we'll infinite recurse as we try to log policy violations
// to disk, thus violating policy, thus requiring logging, etc...
// We restore the current policy below, in the finally block.
- setThreadBlockingPolicy(0);
+ setThreadPolicy(0);
ActivityManagerNative.getDefault().handleApplicationStrictModeViolation(
RuntimeInit.getApplicationObject(),
@@ -429,7 +461,7 @@ public final class StrictMode {
Log.e(TAG, "RemoteException trying to handle StrictMode violation", e);
} finally {
// Restore the policy.
- setThreadBlockingPolicy(savedPolicy);
+ setThreadPolicy(savedPolicy);
}
}
@@ -487,7 +519,7 @@ public final class StrictMode {
new LogStackTrace().printStackTrace(new PrintWriter(sw));
String ourStack = sw.toString();
- int policyMask = getThreadBlockingPolicy();
+ int policyMask = getThreadPolicy();
boolean currentlyGathering = (policyMask & PENALTY_GATHER) != 0;
int numViolations = p.readInt();