Loading boot/boot-image-profile-extra.txt +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ HSPLandroid/graphics/Color;->luminance()F # to include all hot MessageQueue methods, and the inner classes are profiled # as well. HSPLandroid/os/MessageQueue;->* HSPLandroid/os/MessageQueue$EnqueueOrder;->* HSPLandroid/os/MessageQueue$FileDescriptorRecord;->* HSPLandroid/os/MessageQueue$IdleHandler;->* HSPLandroid/os/MessageQueue$MessageCompare;->* Loading boot/preloaded-classes +1 −0 Original line number Diff line number Diff line Loading @@ -6602,6 +6602,7 @@ android.os.Looper android.os.MemoryFile android.os.Message$1 android.os.Message android.os.MessageQueue$EnqueueOrder android.os.MessageQueue$FileDescriptorRecord android.os.MessageQueue$IdleHandler android.os.MessageQueue$MatchAllFutureMessages Loading config/preloaded-classes +1 −0 Original line number Diff line number Diff line Loading @@ -6607,6 +6607,7 @@ android.os.Looper android.os.MemoryFile android.os.Message$1 android.os.Message android.os.MessageQueue$EnqueueOrder android.os.MessageQueue$FileDescriptorRecord android.os.MessageQueue$IdleHandler android.os.MessageQueue$MatchAllFutureMessages Loading core/java/android/os/CombinedMessageQueue/MessageQueue.java +38 −23 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.concurrent.ConcurrentSkipListSet; Loading Loading @@ -281,6 +282,32 @@ public final class MessageQueue { } } static final class EnqueueOrder implements Comparator<MessageNode> { @Override public int compare(MessageNode n1, MessageNode n2) { return compareMessages(n1.mMessage, n2.mMessage); } } private static final EnqueueOrder sEnqueueOrder = new EnqueueOrder(); static int compareMessages(@NonNull Message m1, @NonNull Message m2) { // Primary queue order is by when. // Messages with an earlier when should come first in the queue. final long whenDiff = m1.when - m2.when; if (whenDiff > 0) return 1; if (whenDiff < 0) return -1; // Secondary queue order is by insert sequence. // If two messages were inserted with the same `when`, the one inserted // first should come first in the queue. final long insertSeqDiff = m1.insertSeq - m2.insertSeq; if (insertSeqDiff > 0) return 1; if (insertSeqDiff < 0) return -1; return 0; } static final class MatchDeliverableMessages extends MessageCompare { @Override public boolean compareMessage(MessageNode n, Handler h, int what, Object object, Runnable r, Loading Loading @@ -731,7 +758,7 @@ public final class MessageQueue { Log.d(TAG_C, "Next found node" + " what: " + msg.what + " when: " + msg.when + " seq: " + msgNode.mInsertSeq + " seq: " + msgNode.mMessage.insertSeq + " barrier: " + msgNode.isBarrier() + " now: " + now); } Loading @@ -740,7 +767,7 @@ public final class MessageQueue { Log.d(TAG_C, "Next found async node" + " what: " + msg.what + " when: " + msg.when + " seq: " + asyncMsgNode.mInsertSeq + " seq: " + asyncMsgNode.mMessage.insertSeq + " barrier: " + asyncMsgNode.isBarrier() + " now: " + now); } Loading Loading @@ -790,7 +817,7 @@ public final class MessageQueue { Log.d(TAG_C, "Will deliver node" + " what: " + msg.what + " when: " + msg.when + " seq: " + found.mInsertSeq + " seq: " + found.mMessage.insertSeq + " barrier: " + found.isBarrier() + " async: " + found.isAsync() + " now: " + now); Loading @@ -802,7 +829,7 @@ public final class MessageQueue { Log.d(TAG_C, "Next node" + " what: " + msg.what + " when: " + msg.when + " seq: " + next.mInsertSeq + " seq: " + next.mMessage.insertSeq + " barrier: " + next.isBarrier() + " async: " + next.isAsync() + " now: " + now); Loading Loading @@ -2187,7 +2214,7 @@ public final class MessageQueue { Log.d(TAG_C, "** MessageNode what: " + msgNode.mMessage.what + " when " + msgNode.mMessage.when + " seq: " + msgNode.mInsertSeq); + " seq: " + msgNode.mMessage.insertSeq); } } Loading Loading @@ -2426,7 +2453,7 @@ public final class MessageQueue { private MessageNode pickEarliestNode(MessageNode nodeA, MessageNode nodeB) { if (nodeA != null && nodeB != null) { if (nodeA.compareTo(nodeB) < 0) { if (compareMessages(nodeA.mMessage, nodeB.mMessage) < 0) { return nodeA; } return nodeB; Loading Loading @@ -2584,12 +2611,11 @@ public final class MessageQueue { } } static final class MessageNode extends StackNode implements Comparable<MessageNode> { static final class MessageNode extends StackNode { private final Message mMessage; volatile StackNode mNext; StateNode mBottomOfStack; boolean mWokeUp; final long mInsertSeq; private static final VarHandle sRemovedFromStack; private volatile boolean mRemovedFromStackValue; static { Loading @@ -2606,7 +2632,7 @@ public final class MessageQueue { MessageNode(@NonNull Message message, long insertSeq) { super(STACK_NODE_MESSAGE); mMessage = message; mInsertSeq = insertSeq; message.insertSeq = insertSeq; } long getWhen() { Loading @@ -2624,17 +2650,6 @@ public final class MessageQueue { boolean isBarrier() { return mMessage.target == null; } @Override public int compareTo(@NonNull MessageNode messageNode) { Message other = messageNode.mMessage; int compared = Long.compare(mMessage.when, other.when); if (compared == 0) { compared = Long.compare(mInsertSeq, messageNode.mInsertSeq); } return compared; } } static class StateNode extends StackNode { Loading @@ -2660,9 +2675,9 @@ public final class MessageQueue { private volatile StackNode mStateValue = sStackStateParked; private final ConcurrentSkipListSet<MessageNode> mPriorityQueue = new ConcurrentSkipListSet<MessageNode>(); new ConcurrentSkipListSet<MessageNode>(sEnqueueOrder); private final ConcurrentSkipListSet<MessageNode> mAsyncPriorityQueue = new ConcurrentSkipListSet<MessageNode>(); new ConcurrentSkipListSet<MessageNode>(sEnqueueOrder); /* * This helps us ensure that messages with the same timestamp are inserted in FIFO order. Loading Loading @@ -2917,7 +2932,7 @@ public final class MessageQueue { Log.d(TAG_C, "Insert message" + " what: " + msg.what + " when: " + msg.when + " seq: " + node.mInsertSeq + " seq: " + node.mMessage.insertSeq + " barrier: " + node.isBarrier() + " async: " + node.isAsync() + " now: " + SystemClock.uptimeMillis()); Loading core/java/android/os/Message.java +1 −3 Original line number Diff line number Diff line Loading @@ -145,9 +145,7 @@ public final class Message implements Parcelable { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public long when; /** @hide */ @SuppressWarnings("unused") public long mInsertSeq; /*package*/ long insertSeq; /*package*/ Bundle data; Loading Loading
boot/boot-image-profile-extra.txt +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ HSPLandroid/graphics/Color;->luminance()F # to include all hot MessageQueue methods, and the inner classes are profiled # as well. HSPLandroid/os/MessageQueue;->* HSPLandroid/os/MessageQueue$EnqueueOrder;->* HSPLandroid/os/MessageQueue$FileDescriptorRecord;->* HSPLandroid/os/MessageQueue$IdleHandler;->* HSPLandroid/os/MessageQueue$MessageCompare;->* Loading
boot/preloaded-classes +1 −0 Original line number Diff line number Diff line Loading @@ -6602,6 +6602,7 @@ android.os.Looper android.os.MemoryFile android.os.Message$1 android.os.Message android.os.MessageQueue$EnqueueOrder android.os.MessageQueue$FileDescriptorRecord android.os.MessageQueue$IdleHandler android.os.MessageQueue$MatchAllFutureMessages Loading
config/preloaded-classes +1 −0 Original line number Diff line number Diff line Loading @@ -6607,6 +6607,7 @@ android.os.Looper android.os.MemoryFile android.os.Message$1 android.os.Message android.os.MessageQueue$EnqueueOrder android.os.MessageQueue$FileDescriptorRecord android.os.MessageQueue$IdleHandler android.os.MessageQueue$MatchAllFutureMessages Loading
core/java/android/os/CombinedMessageQueue/MessageQueue.java +38 −23 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.concurrent.ConcurrentSkipListSet; Loading Loading @@ -281,6 +282,32 @@ public final class MessageQueue { } } static final class EnqueueOrder implements Comparator<MessageNode> { @Override public int compare(MessageNode n1, MessageNode n2) { return compareMessages(n1.mMessage, n2.mMessage); } } private static final EnqueueOrder sEnqueueOrder = new EnqueueOrder(); static int compareMessages(@NonNull Message m1, @NonNull Message m2) { // Primary queue order is by when. // Messages with an earlier when should come first in the queue. final long whenDiff = m1.when - m2.when; if (whenDiff > 0) return 1; if (whenDiff < 0) return -1; // Secondary queue order is by insert sequence. // If two messages were inserted with the same `when`, the one inserted // first should come first in the queue. final long insertSeqDiff = m1.insertSeq - m2.insertSeq; if (insertSeqDiff > 0) return 1; if (insertSeqDiff < 0) return -1; return 0; } static final class MatchDeliverableMessages extends MessageCompare { @Override public boolean compareMessage(MessageNode n, Handler h, int what, Object object, Runnable r, Loading Loading @@ -731,7 +758,7 @@ public final class MessageQueue { Log.d(TAG_C, "Next found node" + " what: " + msg.what + " when: " + msg.when + " seq: " + msgNode.mInsertSeq + " seq: " + msgNode.mMessage.insertSeq + " barrier: " + msgNode.isBarrier() + " now: " + now); } Loading @@ -740,7 +767,7 @@ public final class MessageQueue { Log.d(TAG_C, "Next found async node" + " what: " + msg.what + " when: " + msg.when + " seq: " + asyncMsgNode.mInsertSeq + " seq: " + asyncMsgNode.mMessage.insertSeq + " barrier: " + asyncMsgNode.isBarrier() + " now: " + now); } Loading Loading @@ -790,7 +817,7 @@ public final class MessageQueue { Log.d(TAG_C, "Will deliver node" + " what: " + msg.what + " when: " + msg.when + " seq: " + found.mInsertSeq + " seq: " + found.mMessage.insertSeq + " barrier: " + found.isBarrier() + " async: " + found.isAsync() + " now: " + now); Loading @@ -802,7 +829,7 @@ public final class MessageQueue { Log.d(TAG_C, "Next node" + " what: " + msg.what + " when: " + msg.when + " seq: " + next.mInsertSeq + " seq: " + next.mMessage.insertSeq + " barrier: " + next.isBarrier() + " async: " + next.isAsync() + " now: " + now); Loading Loading @@ -2187,7 +2214,7 @@ public final class MessageQueue { Log.d(TAG_C, "** MessageNode what: " + msgNode.mMessage.what + " when " + msgNode.mMessage.when + " seq: " + msgNode.mInsertSeq); + " seq: " + msgNode.mMessage.insertSeq); } } Loading Loading @@ -2426,7 +2453,7 @@ public final class MessageQueue { private MessageNode pickEarliestNode(MessageNode nodeA, MessageNode nodeB) { if (nodeA != null && nodeB != null) { if (nodeA.compareTo(nodeB) < 0) { if (compareMessages(nodeA.mMessage, nodeB.mMessage) < 0) { return nodeA; } return nodeB; Loading Loading @@ -2584,12 +2611,11 @@ public final class MessageQueue { } } static final class MessageNode extends StackNode implements Comparable<MessageNode> { static final class MessageNode extends StackNode { private final Message mMessage; volatile StackNode mNext; StateNode mBottomOfStack; boolean mWokeUp; final long mInsertSeq; private static final VarHandle sRemovedFromStack; private volatile boolean mRemovedFromStackValue; static { Loading @@ -2606,7 +2632,7 @@ public final class MessageQueue { MessageNode(@NonNull Message message, long insertSeq) { super(STACK_NODE_MESSAGE); mMessage = message; mInsertSeq = insertSeq; message.insertSeq = insertSeq; } long getWhen() { Loading @@ -2624,17 +2650,6 @@ public final class MessageQueue { boolean isBarrier() { return mMessage.target == null; } @Override public int compareTo(@NonNull MessageNode messageNode) { Message other = messageNode.mMessage; int compared = Long.compare(mMessage.when, other.when); if (compared == 0) { compared = Long.compare(mInsertSeq, messageNode.mInsertSeq); } return compared; } } static class StateNode extends StackNode { Loading @@ -2660,9 +2675,9 @@ public final class MessageQueue { private volatile StackNode mStateValue = sStackStateParked; private final ConcurrentSkipListSet<MessageNode> mPriorityQueue = new ConcurrentSkipListSet<MessageNode>(); new ConcurrentSkipListSet<MessageNode>(sEnqueueOrder); private final ConcurrentSkipListSet<MessageNode> mAsyncPriorityQueue = new ConcurrentSkipListSet<MessageNode>(); new ConcurrentSkipListSet<MessageNode>(sEnqueueOrder); /* * This helps us ensure that messages with the same timestamp are inserted in FIFO order. Loading Loading @@ -2917,7 +2932,7 @@ public final class MessageQueue { Log.d(TAG_C, "Insert message" + " what: " + msg.what + " when: " + msg.when + " seq: " + node.mInsertSeq + " seq: " + node.mMessage.insertSeq + " barrier: " + node.isBarrier() + " async: " + node.isAsync() + " now: " + SystemClock.uptimeMillis()); Loading
core/java/android/os/Message.java +1 −3 Original line number Diff line number Diff line Loading @@ -145,9 +145,7 @@ public final class Message implements Parcelable { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public long when; /** @hide */ @SuppressWarnings("unused") public long mInsertSeq; /*package*/ long insertSeq; /*package*/ Bundle data; Loading