| Index: base/android/java/src/org/chromium/base/TraceEvent.java
|
| diff --git a/base/android/java/src/org/chromium/base/TraceEvent.java b/base/android/java/src/org/chromium/base/TraceEvent.java
|
| index b2f978244b16f61083be1c6a5feecb9b5a71f502..f30cbdba3264c5883fbd2c3a6132db11e0ddc8ea 100644
|
| --- a/base/android/java/src/org/chromium/base/TraceEvent.java
|
| +++ b/base/android/java/src/org/chromium/base/TraceEvent.java
|
| @@ -27,6 +27,8 @@ public class TraceEvent {
|
| private static volatile boolean sATraceEnabled; // True when taking an Android systrace.
|
|
|
| private static class BasicLooperMonitor implements Printer {
|
| + private static final String EARLY_TOPLEVEL_TASK_NAME = "Looper.dispatchMessage: ";
|
| +
|
| @Override
|
| public void println(final String line) {
|
| if (line.startsWith(">")) {
|
| @@ -38,19 +40,37 @@ public class TraceEvent {
|
| }
|
|
|
| void beginHandling(final String line) {
|
| - if (sEnabled) {
|
| - // Android Looper formats |line| as ">>>>> Dispatching to (TARGET) [...]" since at
|
| - // least 2009 (Donut). Extracts the TARGET part of the message.
|
| - int start = line.indexOf('(', 21); // strlen(">>>>> Dispatching to ")
|
| - int end = start == -1 ? -1 : line.indexOf(')', start);
|
| - String target = end != -1 ? line.substring(start + 1, end) : "";
|
| - nativeBeginToplevel(target);
|
| + // May return an out-of-date value. this is not an issue as EarlyTraceEvent#begin()
|
| + // will filter the event in this case.
|
| + boolean earlyTracingActive = EarlyTraceEvent.isActive();
|
| + if (sEnabled || earlyTracingActive) {
|
| + String target = getTarget(line);
|
| + if (sEnabled) {
|
| + nativeBeginToplevel(target);
|
| + } else if (earlyTracingActive) {
|
| + // Synthesize a task name instead of using a parameter, as early tracing doesn't
|
| + // support parameters.
|
| + EarlyTraceEvent.begin(EARLY_TOPLEVEL_TASK_NAME + target);
|
| + }
|
| }
|
| }
|
|
|
| void endHandling(final String line) {
|
| + if (EarlyTraceEvent.isActive()) {
|
| + EarlyTraceEvent.end(EARLY_TOPLEVEL_TASK_NAME + getTarget(line));
|
| + }
|
| if (sEnabled) nativeEndToplevel();
|
| }
|
| +
|
| + /**
|
| + * Android Looper formats |line| as ">>>>> Dispatching to (TARGET) [...]" since at least
|
| + * 2009 (Donut). Extracts the TARGET part of the message.
|
| + */
|
| + private static String getTarget(String logLine) {
|
| + int start = logLine.indexOf('(', 21); // strlen(">>>>> Dispatching to ")
|
| + int end = start == -1 ? -1 : logLine.indexOf(')', start);
|
| + return end != -1 ? logLine.substring(start + 1, end) : "";
|
| + }
|
| }
|
|
|
| /**
|
| @@ -207,6 +227,9 @@ public class TraceEvent {
|
| */
|
| public static void maybeEnableEarlyTracing() {
|
| EarlyTraceEvent.maybeEnable();
|
| + if (EarlyTraceEvent.isActive()) {
|
| + ThreadUtils.getUiThreadLooper().setMessageLogging(LooperMonitorHolder.sInstance);
|
| + }
|
| }
|
|
|
| /**
|
|
|