Commit 50f371fc authored by Alex Leung's avatar Alex Leung Committed by Commit Bot

[Chromecast] Move elideLogcat to background thread.

BUG=b:113066827

Change-Id: Ic0e1d434eadbddf38f0fc6b2a5a6b1f364e947af
Reviewed-on: https://chromium-review.googlesource.com/1188588Reviewed-by: default avatarLuke Halliwell <halliwell@chromium.org>
Commit-Queue: Alex Leung <alexleung@google.com>
Cr-Commit-Position: refs/heads/master@{#586036}
parent 7e6a7aed
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
package org.chromium.chromecast.shell; package org.chromium.chromecast.shell;
import android.os.SystemClock;
import org.chromium.base.AsyncTask;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
...@@ -17,26 +20,37 @@ import java.io.IOException; ...@@ -17,26 +20,37 @@ import java.io.IOException;
* Javascript console messages. * Javascript console messages.
*/ */
abstract class ElidedLogcatProvider { abstract class ElidedLogcatProvider {
private static final String TAG = "cr_ElidedLogcatProvider"; private static final String TAG = "cr_ElidedLogcatProv";
protected abstract void getRawLogcat(RawLogcatCallback rawLogcatCallback); protected abstract void getRawLogcat(RawLogcatCallback rawLogcatCallback);
protected interface RawLogcatCallback { public void onLogsDone(BufferedReader logsFileReader); } protected interface RawLogcatCallback {
public interface LogcatCallback { public void onLogsDone(String logs); } public void onLogsDone(BufferedReader logsFileReader);
}
public interface LogcatCallback {
public void onLogsDone(String logs);
}
public void getElidedLogcat(LogcatCallback callback) { public void getElidedLogcat(LogcatCallback callback) {
getRawLogcat((BufferedReader logsFileReader) getRawLogcat((BufferedReader logsFileReader) -> {
-> callback.onLogsDone(elideLogcat(logsFileReader))); // Run elideLogcat in background thread because it can be very slow
new AsyncTaskRunner(AsyncTask.THREAD_POOL_EXECUTOR).doAsync(
() -> elideLogcat(logsFileReader), callback::onLogsDone);
});
} }
@VisibleForTesting @VisibleForTesting
protected static String elideLogcat(BufferedReader logsFileReader) { protected static String elideLogcat(BufferedReader logsFileReader) {
long startTimeMillis = SystemClock.elapsedRealtime();
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
try (BufferedReader autoClosableBufferedReader = logsFileReader) { try (BufferedReader autoClosableBufferedReader = logsFileReader) {
String logLn; String logLn;
while ((logLn = autoClosableBufferedReader.readLine()) != null) { while ((logLn = autoClosableBufferedReader.readLine()) != null) {
builder.append(LogcatElision.elide(logLn + "\n")); builder.append(LogcatElision.elide(logLn + "\n"));
} }
long elapsedMillis = SystemClock.elapsedRealtime() - startTimeMillis;
Log.i(TAG, "elideLogcat took " + elapsedMillis + " ms");
} catch (IOException e) { } catch (IOException e) {
Log.e(TAG, "Can't read logs", e); Log.e(TAG, "Can't read logs", e);
} finally { } finally {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment