Merge "Change the framework to use the new camera preview path."
diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java
index 49b72fe..6d8be77 100644
--- a/core/java/android/os/Message.java
+++ b/core/java/android/os/Message.java
@@ -74,6 +74,10 @@
*/
public Messenger replyTo;
+ /*package*/ static final int FLAG_IN_USE = 1;
+
+ /*package*/ int flags;
+
/*package*/ long when;
/*package*/ Bundle data;
@@ -253,6 +257,7 @@
* target/callback of the original message.
*/
public void copyFrom(Message o) {
+ this.flags = o.flags;
this.what = o.what;
this.arg1 = o.arg1;
this.arg2 = o.arg2;
@@ -350,6 +355,7 @@
}
/*package*/ void clearForRecycle() {
+ flags = 0;
what = 0;
arg1 = 0;
arg2 = 0;
@@ -361,6 +367,14 @@
data = null;
}
+ /*package*/ boolean isInUse() {
+ return ((flags & FLAG_IN_USE) == FLAG_IN_USE);
+ }
+
+ /*package*/ void markInUse() {
+ flags |= FLAG_IN_USE;
+ }
+
/** Constructor (but the preferred way to get a Message is to call {@link #obtain() Message.obtain()}).
*/
public Message() {
@@ -453,4 +467,3 @@
replyTo = Messenger.readMessengerOrNullFromParcel(source);
}
}
-
diff --git a/core/java/android/os/MessageQueue.java b/core/java/android/os/MessageQueue.java
index adb11c8..75dfdd2 100644
--- a/core/java/android/os/MessageQueue.java
+++ b/core/java/android/os/MessageQueue.java
@@ -120,6 +120,7 @@
now = SystemClock.uptimeMillis();
Message msg = pullNextLocked(now);
if (msg != null) {
+ msg.markInUse();
return msg;
}
@@ -192,7 +193,7 @@
}
final boolean enqueueMessage(Message msg, long when) {
- if (msg.when != 0) {
+ if (msg.isInUse()) {
throw new AndroidRuntimeException(msg
+ " This message is already in use.");
}
diff --git a/core/tests/coretests/src/android/os/MessageQueueTest.java b/core/tests/coretests/src/android/os/MessageQueueTest.java
index b7c2d1f..12931ec 100644
--- a/core/tests/coretests/src/android/os/MessageQueueTest.java
+++ b/core/tests/coretests/src/android/os/MessageQueueTest.java
@@ -41,6 +41,10 @@
}
public void handleMessage(Message msg) {
+ if (!msg.isInUse()) {
+ failure(new RuntimeException(
+ "msg.isInuse is false, should always be true, #" + msg.what));
+ }
if (mCount <= mLastMessage) {
if (msg.what != mCount) {
failure(new RuntimeException(
@@ -100,4 +104,3 @@
tester.doTest(1000);
}
}
-