Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Unified Diff: base/android/java/src/org/chromium/base/TraceEvent.java

Issue 2886763002: android: Record early toplevel Looper events in tracing. (Closed)
Patch Set: . Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+ }
}
/**

Powered by Google App Engine
This is Rietveld 408576698