OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.base; | 5 package org.chromium.base; |
6 | 6 |
7 import android.os.Handler; | 7 import android.os.Handler; |
8 import android.os.Looper; | 8 import android.os.Looper; |
9 import android.os.Message; | 9 import android.os.Message; |
10 import android.os.MessageQueue; | 10 import android.os.MessageQueue; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 } | 77 } |
78 | 78 |
79 private void updateWhetherQueueHasBlockingSyncBarrier() { | 79 private void updateWhetherQueueHasBlockingSyncBarrier() { |
80 if (mMessageQueue == null) return; | 80 if (mMessageQueue == null) return; |
81 // As barrier detection is only used for tracing, early out when tracing | 81 // As barrier detection is only used for tracing, early out when tracing |
82 // is disabled to avoid any potential performance penalties. | 82 // is disabled to avoid any potential performance penalties. |
83 if (!TraceEvent.enabled()) { | 83 if (!TraceEvent.enabled()) { |
84 mQueueHasSyncBarrier = false; | 84 mQueueHasSyncBarrier = false; |
85 return; | 85 return; |
86 } | 86 } |
87 Message queueHead = (Message)getField(mMessageQueue, mMessageQueueMessag
eField); | 87 Message queueHead = (Message) getField(mMessageQueue, mMessageQueueMessa
geField); |
88 setqueueHasSyncBarrier(isSyncBarrierMessage(queueHead)); | 88 setqueueHasSyncBarrier(isSyncBarrierMessage(queueHead)); |
89 } | 89 } |
90 | 90 |
91 private boolean isSyncBarrierMessage(Message message) { | 91 private boolean isSyncBarrierMessage(Message message) { |
92 if (message == null) return false; | 92 if (message == null) return false; |
93 // Sync barrier messages have null targets. | 93 // Sync barrier messages have null targets. |
94 return getField(message, mMessageTargetField) == null; | 94 return getField(message, mMessageTargetField) == null; |
95 } | 95 } |
96 | 96 |
97 private void tryEnableSyncBarrierDetection() { | 97 private void tryEnableSyncBarrierDetection() { |
98 assert mMessageQueue == null; | 98 assert mMessageQueue == null; |
99 | 99 |
100 boolean success = false; | 100 boolean success = false; |
101 try { | 101 try { |
102 Method getQueueMethod = Looper.class.getMethod("getQueue", new Class
[]{}); | 102 Method getQueueMethod = Looper.class.getMethod("getQueue", new Class
[]{}); |
103 mMessageQueue = (MessageQueue)getQueueMethod.invoke(getLooper()); | 103 mMessageQueue = (MessageQueue) getQueueMethod.invoke(getLooper()); |
104 | 104 |
105 mMessageQueueMessageField = mMessageQueue.getClass().getDeclaredFiel
d("mMessages"); | 105 mMessageQueueMessageField = mMessageQueue.getClass().getDeclaredFiel
d("mMessages"); |
106 mMessageQueueMessageField.setAccessible(true); | 106 mMessageQueueMessageField.setAccessible(true); |
107 | 107 |
108 mMessageTargetField = Message.class.getDeclaredField("target"); | 108 mMessageTargetField = Message.class.getDeclaredField("target"); |
109 mMessageTargetField.setAccessible(true); | 109 mMessageTargetField.setAccessible(true); |
110 | 110 |
111 mSyncBarrierTraceId = hashCode(); | 111 mSyncBarrierTraceId = hashCode(); |
112 | 112 |
113 success = true; | 113 success = true; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 } | 157 } |
158 | 158 |
159 @CalledByNative | 159 @CalledByNative |
160 private static SystemMessageHandler create(long messagePumpDelegateNative) { | 160 private static SystemMessageHandler create(long messagePumpDelegateNative) { |
161 return new SystemMessageHandler(messagePumpDelegateNative); | 161 return new SystemMessageHandler(messagePumpDelegateNative); |
162 } | 162 } |
163 | 163 |
164 private native void nativeDoRunLoopOnce( | 164 private native void nativeDoRunLoopOnce( |
165 long messagePumpDelegateNative, long delayedScheduledTimeTicks); | 165 long messagePumpDelegateNative, long delayedScheduledTimeTicks); |
166 } | 166 } |
OLD | NEW |