diff options
author | Googler <noreply@google.com> | 2018-08-13 07:55:35 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-13 07:57:14 -0700 |
commit | 90729a57a865c08fe561be6a49734582becfbb53 (patch) | |
tree | 76b5ac5d48216dbeafa34b9ab6f0b0a27aa3ea54 /src/main/java/com/google/devtools/build/lib/runtime | |
parent | ea168de2b7929277366ba27028fc4c8af2fa9235 (diff) |
Fix lock contention in Reporter.startTask/.finishTask by:
- Using a thread-safe container to store handlers.
- Using a ThreadLocal NumberFormat to produce readable action counts.
NumberFormat (or rather the default implementation DecimalFormat) use
internal state and locking.
- Adding a lock-free fast path for START and FINISH events in
ExperimentalEventHandler.
RELNOTES: None.
PiperOrigin-RevId: 208479896
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/runtime')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java index 49ba57ba1b..16caed049b 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java @@ -312,7 +312,16 @@ public class ExperimentalEventHandler implements EventHandler { } @Override - public synchronized void handle(Event event) { + public void handle(Event event) { + if (!debugAllEvents + && !showTimestamp + && (event.getKind() == EventKind.START || event.getKind() == EventKind.FINISH)) { + return; + } + handleLocked(event); + } + + private synchronized void handleLocked(Event event) { try { if (debugAllEvents) { // Debugging only: show all events visible to the new UI. |