/** A previously logged event read from the logs. Instances are thread safe. */
public static final class Event {
private final ByteBuffer mBuffer;
+ private Exception mLastWtf;
// Layout of event log entry received from Android logger.
// see system/core/include/log/logger.h
offset = V1_PAYLOAD_START;
}
mBuffer.limit(offset + mBuffer.getShort(LENGTH_OFFSET));
+ if ((offset + DATA_OFFSET) >= mBuffer.limit()) {
+ // no payload
+ return null;
+ }
mBuffer.position(offset + DATA_OFFSET); // Just after the tag.
return decodeObject();
} catch (IllegalArgumentException e) {
Log.wtf(TAG, "Illegal entry payload: tag=" + getTag(), e);
+ mLastWtf = e;
return null;
} catch (BufferUnderflowException e) {
Log.wtf(TAG, "Truncated entry payload: tag=" + getTag(), e);
+ mLastWtf = e;
return null;
}
}
return new String(mBuffer.array(), start, length, "UTF-8");
} catch (UnsupportedEncodingException e) {
Log.wtf(TAG, "UTF-8 is not supported", e);
+ mLastWtf = e;
return null;
}
byte[] bytes = mBuffer.array();
return Arrays.copyOf(bytes, bytes.length);
}
+
+ /**
+ * Retreive the last WTF error generated by this object.
+ * @hide
+ */
+ //VisibleForTesting
+ public Exception getLastError() {
+ return mLastWtf;
+ }
+
+ /**
+ * Clear the error state for this object.
+ * @hide
+ */
+ //VisibleForTesting
+ public void clearError() {
+ mLastWtf = null;
+ }
}
// We assume that the native methods deal with any concurrency issues.