From 3e089e8a262aae1b47fac0611e2ee6d392acf72e Mon Sep 17 00:00:00 2001 From: vadimt Date: Wed, 6 May 2020 11:58:51 -0700 Subject: [PATCH] Restarting event reader after reaching the end of stream This should'n happen, but happens. The best we can do is to re-run the logcat command. Change-Id: I471d9f0188243c81585b75f81dd03450c1f7ad9b --- .../launcher3/tapl/LogEventChecker.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/tests/tapl/com/android/launcher3/tapl/LogEventChecker.java b/tests/tapl/com/android/launcher3/tapl/LogEventChecker.java index 053847cba9..bbba4fb6c6 100644 --- a/tests/tapl/com/android/launcher3/tapl/LogEventChecker.java +++ b/tests/tapl/com/android/launcher3/tapl/LogEventChecker.java @@ -85,18 +85,27 @@ public class LogEventChecker { } private void onRun() { + while (true) readEvents(); + } + + private void readEvents() { try { // Note that we use Runtime.exec to start the log reading process instead of running // it via UIAutomation, so that we can directly access the "Process" object and // ensure that the instrumentation is not stuck forever. final String cmd = "logcat -s " + TestProtocol.TAPL_EVENTS_TAG; + final Process logcatProcess = Runtime.getRuntime().exec(cmd); try (BufferedReader reader = new BufferedReader(new InputStreamReader( - Runtime.getRuntime().exec(cmd).getInputStream()))) { - for (; ; ) { + logcatProcess.getInputStream()))) { + while (true) { // Skip everything before the next start command. for (; ; ) { final String event = reader.readLine(); + if (event == null) { + Log.d(SKIP_EVENTS_TAG, "Read a null line while waiting for start"); + return; + } if (event.contains(mStartCommand)) { Log.d(SKIP_EVENTS_TAG, "Read start: " + event); break; @@ -106,6 +115,12 @@ public class LogEventChecker { // Store all actual events until the finish command. for (; ; ) { final String event = reader.readLine(); + if (event == null) { + Log.d(SKIP_EVENTS_TAG, "Read a null line after waiting for start"); + mEventsCounter.drainPermits(); + mEvents.clear(); + return; + } if (event.contains(mFinishCommand)) { mFinished.countDown(); Log.d(SKIP_EVENTS_TAG, "Read finish: " + event); @@ -122,6 +137,8 @@ public class LogEventChecker { } } } + } finally { + logcatProcess.destroyForcibly(); } } catch (IOException e) { throw new RuntimeException(e);