diff options
| author | 2018-11-09 14:03:51 -0800 | |
|---|---|---|
| committer | 2018-11-09 14:03:51 -0800 | |
| commit | f6f09c5491d83e2a19c548af9c016aa6c20fbaf4 (patch) | |
| tree | 6d73ccfb9e8e1dd2050149753aaf36d138f1c8f7 | |
| parent | 8dd60c3d2086db033952c71ac8163d9251a9add8 (diff) | |
| parent | d96fd153646cc738b05b555c4c0e472254ec7fa7 (diff) | |
Merge "Fix flaky AnalytisTest by locking in EventRecord" am: 0a390095df am: e90962ff1d
am: d96fd15364
Change-Id: I37232a10e503887fdd436c4504a53f993da4f1b2
| -rw-r--r-- | telecomm/java/android/telecom/Logging/EventManager.java | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/telecomm/java/android/telecom/Logging/EventManager.java b/telecomm/java/android/telecom/Logging/EventManager.java index 2bda6480b99e..1342038c6477 100644 --- a/telecomm/java/android/telecom/Logging/EventManager.java +++ b/telecomm/java/android/telecom/Logging/EventManager.java @@ -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; public EventRecord(Loggable recordEntry) { @@ -197,7 +197,7 @@ public class EventManager { } public List<Event> getEvents() { - return mEvents; + return new LinkedList<>(mEvents); } public List<EventTiming> extractEventTimings() { @@ -207,21 +207,24 @@ public class EventManager { LinkedList<EventTiming> result = new LinkedList<>(); Map<String, PendingResponse> pendingResponses = new HashMap<>(); - for (Event event : mEvents) { - if (requestResponsePairs.containsKey(event.eventId)) { - // This event expects a response, so add that expected response to the maps - // of pending events. - for (EventManager.TimedEventPair p : requestResponsePairs.get(event.eventId)) { - pendingResponses.put(p.mResponse, new PendingResponse(event.eventId, - event.time, p.mTimeoutMillis, p.mName)); + synchronized (mEvents) { + for (Event event : mEvents) { + if (requestResponsePairs.containsKey(event.eventId)) { + // This event expects a response, so add that expected response to the maps + // of pending events. + for (EventManager.TimedEventPair p : requestResponsePairs.get( + event.eventId)) { + pendingResponses.put(p.mResponse, new PendingResponse(event.eventId, + event.time, p.mTimeoutMillis, p.mName)); + } } - } - PendingResponse pendingResponse = pendingResponses.remove(event.eventId); - if (pendingResponse != null) { - long elapsedTime = event.time - pendingResponse.requestEventTimeMillis; - if (elapsedTime < pendingResponse.timeoutMillis) { - result.add(new EventTiming(pendingResponse.name, elapsedTime)); + PendingResponse pendingResponse = pendingResponses.remove(event.eventId); + if (pendingResponse != null) { + long elapsedTime = event.time - pendingResponse.requestEventTimeMillis; + if (elapsedTime < pendingResponse.timeoutMillis) { + result.add(new EventTiming(pendingResponse.name, elapsedTime)); + } } } } @@ -233,7 +236,8 @@ public class EventManager { pw.print(mRecordEntry.getDescription()); 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(" - "); pw.print(event.eventId); |