diff options
| author | Mark Salyzyn <salyzyn@google.com> | 2014-04-25 13:25:18 -0700 |
|---|---|---|
| committer | Mark Salyzyn <salyzyn@google.com> | 2014-04-25 13:45:03 -0700 |
| commit | 747802f8aa4d373885161724d9c2c61dcd4f8010 (patch) | |
| tree | 56be897f61beb5368f19c20a3099934e3a5e7f0b /core/java/android | |
| parent | adcf38c9936fa372309d413cec03a1413e797c7a (diff) | |
EventLog: event log translation errors
- Deal with L using v3 event log format, or K using v1 or v2 event log format
Change-Id: Id4fb205f51b7e506135888d565acf1604497b91f
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/util/EventLog.java | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/core/java/android/util/EventLog.java b/core/java/android/util/EventLog.java index 29c0ba2f3008..aefced8a6260 100644 --- a/core/java/android/util/EventLog.java +++ b/core/java/android/util/EventLog.java @@ -56,16 +56,18 @@ public class EventLog { public static final class Event { private final ByteBuffer mBuffer; - // Layout of event log entry received from kernel. + // Layout of event log entry received from Android logger. + // see system/core/include/log/logger.h private static final int LENGTH_OFFSET = 0; + private static final int HEADER_SIZE_OFFSET = 2; private static final int PROCESS_OFFSET = 4; private static final int THREAD_OFFSET = 8; private static final int SECONDS_OFFSET = 12; private static final int NANOSECONDS_OFFSET = 16; - private static final int PAYLOAD_START = 20; - private static final int TAG_OFFSET = 20; - private static final int DATA_START = 24; + // Layout for event log v1 format, v2 and v3 use HEADER_SIZE_OFFSET + private static final int V1_PAYLOAD_START = 20; + private static final int DATA_OFFSET = 4; // Value types private static final byte INT_TYPE = 0; @@ -97,14 +99,22 @@ public class EventLog { /** @return the type tag code of the entry */ public int getTag() { - return mBuffer.getInt(TAG_OFFSET); + int offset = mBuffer.getShort(HEADER_SIZE_OFFSET); + if (offset == 0) { + offset = V1_PAYLOAD_START; + } + return mBuffer.getInt(offset); } /** @return one of Integer, Long, String, null, or Object[] of same. */ public synchronized Object getData() { try { - mBuffer.limit(PAYLOAD_START + mBuffer.getShort(LENGTH_OFFSET)); - mBuffer.position(DATA_START); // Just after the tag. + int offset = mBuffer.getShort(HEADER_SIZE_OFFSET); + if (offset == 0) { + offset = V1_PAYLOAD_START; + } + mBuffer.limit(offset + mBuffer.getShort(LENGTH_OFFSET)); + mBuffer.position(offset + DATA_OFFSET); // Just after the tag. return decodeObject(); } catch (IllegalArgumentException e) { Log.wtf(TAG, "Illegal entry payload: tag=" + getTag(), e); |
