Loading api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -44695,6 +44695,7 @@ package android.util { method public static int getTagCode(java.lang.String); method public static java.lang.String getTagName(int); method public static void readEvents(int[], java.util.Collection<android.util.EventLog.Event>) throws java.io.IOException; method public static void readEventsOnWrapping(int[], long, java.util.Collection<android.util.EventLog.Event>) throws java.io.IOException; method public static int writeEvent(int, int); method public static int writeEvent(int, long); method public static int writeEvent(int, float); core/java/android/util/EventLog.java +15 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.util; import android.annotation.SystemApi; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; Loading Loading @@ -252,6 +254,19 @@ public class EventLog { public static native void readEvents(int[] tags, Collection<Event> output) throws IOException; /** * Read events from the log, filtered by type, blocking until logs are about to be overwritten. * @param tags to search for * @param timestamp timestamp allow logs before this time to be overwritten. * @param output container to add events into * @throws IOException if something goes wrong reading events * @hide */ @SystemApi public static native void readEventsOnWrapping(int[] tags, long timestamp, Collection<Event> output) throws IOException; /** * Get the name associated with an event type tag code. * @param tag code to look up Loading core/java/com/android/internal/logging/legacy/EventLogCollector.java +1 −1 Original line number Diff line number Diff line Loading @@ -178,7 +178,7 @@ public class EventLogCollector { public void readEvents(int[] tags, Collection<Event> events) throws IOException { // Testing in Android: the Static Final Class Strikes Back! ArrayList<EventLog.Event> nativeEvents = new ArrayList<>(); EventLog.readEvents(tags, nativeEvents); EventLog.readEventsOnWrapping(tags, 0L, nativeEvents); for (EventLog.Event nativeEvent : nativeEvents) { Event event = new Event(nativeEvent); events.add(event); Loading core/jni/android_util_EventLog.cpp +51 −16 Original line number Diff line number Diff line Loading @@ -144,26 +144,22 @@ static jint android_util_EventLog_writeEvent_Array(JNIEnv* env, jobject clazz, return ctx.write(); } /* * In class android.util.EventLog: * static native void readEvents(int[] tags, Collection<Event> output) * * Reads events from the event log */ static void android_util_EventLog_readEvents(JNIEnv* env, jobject clazz UNUSED, jintArray tags, jobject out) { if (tags == NULL || out == NULL) { jniThrowNullPointerException(env, NULL); static void readEvents(JNIEnv* env, int loggerMode, jintArray tags, jlong startTime, jobject out) { struct logger_list *logger_list; if (startTime) { logger_list = android_logger_list_alloc_time(loggerMode, log_time(startTime / NS_PER_SEC, startTime % NS_PER_SEC), 0); } else { logger_list = android_logger_list_alloc(loggerMode, 0, 0); } if (!logger_list) { jniThrowIOException(env, errno); return; } struct logger_list *logger_list = android_logger_list_open( LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 0, 0); if (!logger_list) { if (!android_logger_open(logger_list, LOG_ID_EVENTS)) { jniThrowIOException(env, errno); android_logger_list_free(logger_list); return; } Loading Loading @@ -227,6 +223,41 @@ static void android_util_EventLog_readEvents(JNIEnv* env, jobject clazz UNUSED, env->ReleaseIntArrayElements(tags, tagValues, 0); } /* * In class android.util.EventLog: * static native void readEvents(int[] tags, Collection<Event> output) * * Reads events from the event log */ static void android_util_EventLog_readEvents(JNIEnv* env, jobject clazz UNUSED, jintArray tags, jobject out) { if (tags == NULL || out == NULL) { jniThrowNullPointerException(env, NULL); return; } readEvents(env, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, tags, 0, out); } /* * In class android.util.EventLog: * static native void readEventsOnWrapping(int[] tags, long timestamp, Collection<Event> output) * * Reads events from the event log, blocking until events after timestamp are to be overwritten. */ static void android_util_EventLog_readEventsOnWrapping(JNIEnv* env, jobject clazz UNUSED, jintArray tags, jlong timestamp, jobject out) { if (tags == NULL || out == NULL) { jniThrowNullPointerException(env, NULL); return; } readEvents(env, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK | ANDROID_LOG_WRAP, tags, timestamp, out); } /* * JNI registration. */ Loading @@ -247,6 +278,10 @@ static const JNINativeMethod gRegisterMethods[] = { "([ILjava/util/Collection;)V", (void*) android_util_EventLog_readEvents }, { "readEventsOnWrapping", "([IJLjava/util/Collection;)V", (void*) android_util_EventLog_readEventsOnWrapping }, }; static struct { const char *name; jclass *clazz; } gClasses[] = { Loading Loading
api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -44695,6 +44695,7 @@ package android.util { method public static int getTagCode(java.lang.String); method public static java.lang.String getTagName(int); method public static void readEvents(int[], java.util.Collection<android.util.EventLog.Event>) throws java.io.IOException; method public static void readEventsOnWrapping(int[], long, java.util.Collection<android.util.EventLog.Event>) throws java.io.IOException; method public static int writeEvent(int, int); method public static int writeEvent(int, long); method public static int writeEvent(int, float);
core/java/android/util/EventLog.java +15 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.util; import android.annotation.SystemApi; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; Loading Loading @@ -252,6 +254,19 @@ public class EventLog { public static native void readEvents(int[] tags, Collection<Event> output) throws IOException; /** * Read events from the log, filtered by type, blocking until logs are about to be overwritten. * @param tags to search for * @param timestamp timestamp allow logs before this time to be overwritten. * @param output container to add events into * @throws IOException if something goes wrong reading events * @hide */ @SystemApi public static native void readEventsOnWrapping(int[] tags, long timestamp, Collection<Event> output) throws IOException; /** * Get the name associated with an event type tag code. * @param tag code to look up Loading
core/java/com/android/internal/logging/legacy/EventLogCollector.java +1 −1 Original line number Diff line number Diff line Loading @@ -178,7 +178,7 @@ public class EventLogCollector { public void readEvents(int[] tags, Collection<Event> events) throws IOException { // Testing in Android: the Static Final Class Strikes Back! ArrayList<EventLog.Event> nativeEvents = new ArrayList<>(); EventLog.readEvents(tags, nativeEvents); EventLog.readEventsOnWrapping(tags, 0L, nativeEvents); for (EventLog.Event nativeEvent : nativeEvents) { Event event = new Event(nativeEvent); events.add(event); Loading
core/jni/android_util_EventLog.cpp +51 −16 Original line number Diff line number Diff line Loading @@ -144,26 +144,22 @@ static jint android_util_EventLog_writeEvent_Array(JNIEnv* env, jobject clazz, return ctx.write(); } /* * In class android.util.EventLog: * static native void readEvents(int[] tags, Collection<Event> output) * * Reads events from the event log */ static void android_util_EventLog_readEvents(JNIEnv* env, jobject clazz UNUSED, jintArray tags, jobject out) { if (tags == NULL || out == NULL) { jniThrowNullPointerException(env, NULL); static void readEvents(JNIEnv* env, int loggerMode, jintArray tags, jlong startTime, jobject out) { struct logger_list *logger_list; if (startTime) { logger_list = android_logger_list_alloc_time(loggerMode, log_time(startTime / NS_PER_SEC, startTime % NS_PER_SEC), 0); } else { logger_list = android_logger_list_alloc(loggerMode, 0, 0); } if (!logger_list) { jniThrowIOException(env, errno); return; } struct logger_list *logger_list = android_logger_list_open( LOG_ID_EVENTS, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 0, 0); if (!logger_list) { if (!android_logger_open(logger_list, LOG_ID_EVENTS)) { jniThrowIOException(env, errno); android_logger_list_free(logger_list); return; } Loading Loading @@ -227,6 +223,41 @@ static void android_util_EventLog_readEvents(JNIEnv* env, jobject clazz UNUSED, env->ReleaseIntArrayElements(tags, tagValues, 0); } /* * In class android.util.EventLog: * static native void readEvents(int[] tags, Collection<Event> output) * * Reads events from the event log */ static void android_util_EventLog_readEvents(JNIEnv* env, jobject clazz UNUSED, jintArray tags, jobject out) { if (tags == NULL || out == NULL) { jniThrowNullPointerException(env, NULL); return; } readEvents(env, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, tags, 0, out); } /* * In class android.util.EventLog: * static native void readEventsOnWrapping(int[] tags, long timestamp, Collection<Event> output) * * Reads events from the event log, blocking until events after timestamp are to be overwritten. */ static void android_util_EventLog_readEventsOnWrapping(JNIEnv* env, jobject clazz UNUSED, jintArray tags, jlong timestamp, jobject out) { if (tags == NULL || out == NULL) { jniThrowNullPointerException(env, NULL); return; } readEvents(env, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK | ANDROID_LOG_WRAP, tags, timestamp, out); } /* * JNI registration. */ Loading @@ -247,6 +278,10 @@ static const JNINativeMethod gRegisterMethods[] = { "([ILjava/util/Collection;)V", (void*) android_util_EventLog_readEvents }, { "readEventsOnWrapping", "([IJLjava/util/Collection;)V", (void*) android_util_EventLog_readEventsOnWrapping }, }; static struct { const char *name; jclass *clazz; } gClasses[] = { Loading