Merge "Fix flaky AnalytisTest by locking in EventRecord"

am: 0a390095df

Change-Id: I81001dc60def2165a8083a457559ec2ea1548d91
This commit is contained in:
Hall Liu
2018-11-08 18:31:49 -08:00
committed by android-build-merger

View File

@@ -180,7 +180,7 @@ public class EventManager {
} }
} }
private final List<Event> mEvents = new LinkedList<>(); private final List<Event> mEvents = Collections.synchronizedList(new LinkedList<>());
private final Loggable mRecordEntry; private final Loggable mRecordEntry;
public EventRecord(Loggable recordEntry) { public EventRecord(Loggable recordEntry) {
@@ -197,7 +197,7 @@ public class EventManager {
} }
public List<Event> getEvents() { public List<Event> getEvents() {
return mEvents; return new LinkedList<>(mEvents);
} }
public List<EventTiming> extractEventTimings() { public List<EventTiming> extractEventTimings() {
@@ -207,11 +207,13 @@ public class EventManager {
LinkedList<EventTiming> result = new LinkedList<>(); LinkedList<EventTiming> result = new LinkedList<>();
Map<String, PendingResponse> pendingResponses = new HashMap<>(); Map<String, PendingResponse> pendingResponses = new HashMap<>();
synchronized (mEvents) {
for (Event event : mEvents) { for (Event event : mEvents) {
if (requestResponsePairs.containsKey(event.eventId)) { if (requestResponsePairs.containsKey(event.eventId)) {
// This event expects a response, so add that expected response to the maps // This event expects a response, so add that expected response to the maps
// of pending events. // of pending events.
for (EventManager.TimedEventPair p : requestResponsePairs.get(event.eventId)) { for (EventManager.TimedEventPair p : requestResponsePairs.get(
event.eventId)) {
pendingResponses.put(p.mResponse, new PendingResponse(event.eventId, pendingResponses.put(p.mResponse, new PendingResponse(event.eventId,
event.time, p.mTimeoutMillis, p.mName)); event.time, p.mTimeoutMillis, p.mName));
} }
@@ -225,6 +227,7 @@ public class EventManager {
} }
} }
} }
}
return result; return result;
} }
@@ -233,7 +236,8 @@ public class EventManager {
pw.print(mRecordEntry.getDescription()); pw.print(mRecordEntry.getDescription());
pw.increaseIndent(); pw.increaseIndent();
for (Event event : mEvents) { // Iterate over copy of events so that this doesn't hold the lock for too long.
for (Event event : getEvents()) {
pw.print(event.timestampString); pw.print(event.timestampString);
pw.print(" - "); pw.print(" - ");
pw.print(event.eventId); pw.print(event.eventId);