summaryrefslogtreecommitdiff
path: root/startop
diff options
context:
space:
mode:
authorYan Wang <yawanng@google.com>2020-04-03 16:48:12 -0700
committerYan Wang <yawanng@google.com>2020-04-03 16:48:12 -0700
commit57494106e68bd111c817d1cf9a824c3fe2403735 (patch)
treec83aed2221c68b2d5688346bf58c0a04e082da4c /startop
parent6c61ef504d7e0f2ede87af4fd73c00825d76480b (diff)
resolve merge conflicts of df559175e0a0a1e47799724ef75affb428695faa to master
Change-Id: I417c1c8d3c043b5af5895d15196940eee5d02612
Diffstat (limited to 'startop')
-rw-r--r--startop/iorap/src/com/google/android/startop/iorap/EventSequenceValidator.java41
1 files changed, 25 insertions, 16 deletions
diff --git a/startop/iorap/src/com/google/android/startop/iorap/EventSequenceValidator.java b/startop/iorap/src/com/google/android/startop/iorap/EventSequenceValidator.java
index 488ee78f6230..7e8a90ccd4ad 100644
--- a/startop/iorap/src/com/google/android/startop/iorap/EventSequenceValidator.java
+++ b/startop/iorap/src/com/google/android/startop/iorap/EventSequenceValidator.java
@@ -23,6 +23,9 @@ import android.util.Log;
import com.android.server.wm.ActivityMetricsLaunchObserver;
+import java.io.StringWriter;
+import java.io.PrintWriter;
+
/**
* A validator to check the correctness of event sequence during app startup.
*
@@ -100,7 +103,7 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
@Override
public void onIntentStarted(@NonNull Intent intent, long timestampNs) {
if (state == State.UNKNOWN) {
- Log.wtf(TAG, "IntentStarted during UNKNOWN." + intent);
+ logWarningWithStackTrace("IntentStarted during UNKNOWN. " + intent);
incAccIntentStartedEvents();
return;
}
@@ -110,7 +113,7 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
state != State.ACTIVITY_CANCELLED &&
state != State.ACTIVITY_FINISHED &&
state != State.REPORT_FULLY_DRAWN) {
- Log.wtf(TAG,
+ logWarningWithStackTrace(
String.format("Cannot transition from %s to %s", state, State.INTENT_STARTED));
incAccIntentStartedEvents();
incAccIntentStartedEvents();
@@ -124,12 +127,12 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
@Override
public void onIntentFailed() {
if (state == State.UNKNOWN) {
- Log.wtf(TAG, "IntentFailed during UNKNOWN.");
+ logWarningWithStackTrace("onIntentFailed during UNKNOWN.");
decAccIntentStartedEvents();
return;
}
if (state != State.INTENT_STARTED) {
- Log.wtf(TAG,
+ logWarningWithStackTrace(
String.format("Cannot transition from %s to %s", state, State.INTENT_FAILED));
incAccIntentStartedEvents();
return;
@@ -143,11 +146,11 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
public void onActivityLaunched(@NonNull @ActivityRecordProto byte[] activity,
@Temperature int temperature) {
if (state == State.UNKNOWN) {
- Log.wtf(TAG, "onActivityLaunched during UNKNOWN.");
+ logWarningWithStackTrace("onActivityLaunched during UNKNOWN.");
return;
}
if (state != State.INTENT_STARTED) {
- Log.wtf(TAG,
+ logWarningWithStackTrace(
String.format("Cannot transition from %s to %s", state, State.ACTIVITY_LAUNCHED));
incAccIntentStartedEvents();
return;
@@ -160,12 +163,12 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
@Override
public void onActivityLaunchCancelled(@Nullable @ActivityRecordProto byte[] activity) {
if (state == State.UNKNOWN) {
- Log.wtf(TAG, "onActivityLaunchCancelled during UNKNOWN.");
+ logWarningWithStackTrace("onActivityLaunchCancelled during UNKNOWN.");
decAccIntentStartedEvents();
return;
}
if (state != State.ACTIVITY_LAUNCHED) {
- Log.wtf(TAG,
+ logWarningWithStackTrace(
String.format("Cannot transition from %s to %s", state, State.ACTIVITY_CANCELLED));
incAccIntentStartedEvents();
return;
@@ -179,13 +182,13 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
public void onActivityLaunchFinished(@NonNull @ActivityRecordProto byte[] activity,
long timestampNs) {
if (state == State.UNKNOWN) {
- Log.wtf(TAG, "onActivityLaunchFinished during UNKNOWN.");
+ logWarningWithStackTrace("onActivityLaunchFinished during UNKNOWN.");
decAccIntentStartedEvents();
return;
}
if (state != State.ACTIVITY_LAUNCHED) {
- Log.wtf(TAG,
+ logWarningWithStackTrace(
String.format("Cannot transition from %s to %s", state, State.ACTIVITY_FINISHED));
incAccIntentStartedEvents();
return;
@@ -199,7 +202,7 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
public void onReportFullyDrawn(@NonNull @ActivityRecordProto byte[] activity,
long timestampNs) {
if (state == State.UNKNOWN) {
- Log.wtf(TAG, "onReportFullyDrawn during UNKNOWN.");
+ logWarningWithStackTrace("onReportFullyDrawn during UNKNOWN.");
return;
}
if (state == State.INIT) {
@@ -207,7 +210,7 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
}
if (state != State.ACTIVITY_FINISHED) {
- Log.wtf(TAG,
+ logWarningWithStackTrace(
String.format("Cannot transition from %s to %s", state, State.REPORT_FULLY_DRAWN));
return;
}
@@ -229,8 +232,7 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
private void incAccIntentStartedEvents() {
if (accIntentStartedEvents < 0) {
- throw new AssertionError(
- String.format("The number of unknowns cannot be negative"));
+ throw new AssertionError("The number of unknowns cannot be negative");
}
if (accIntentStartedEvents == 0) {
state = State.UNKNOWN;
@@ -242,8 +244,7 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
private void decAccIntentStartedEvents() {
if (accIntentStartedEvents <= 0) {
- throw new AssertionError(
- String.format("The number of unknowns cannot be negative"));
+ throw new AssertionError("The number of unknowns cannot be negative");
}
if(accIntentStartedEvents == 1) {
state = State.INIT;
@@ -252,4 +253,12 @@ public class EventSequenceValidator implements ActivityMetricsLaunchObserver {
Log.i(TAG,
String.format("dec AccIntentStartedEvents to %d", accIntentStartedEvents));
}
+
+ private void logWarningWithStackTrace(String log) {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ new Throwable("EventSequenceValidator#getStackTrace").printStackTrace(pw);
+ Log.wtf(TAG, String.format("%s\n%s", log, sw));
+ }
}
+