aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/runtime
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-08-13 07:55:35 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-13 07:57:14 -0700
commit90729a57a865c08fe561be6a49734582becfbb53 (patch)
tree76b5ac5d48216dbeafa34b9ab6f0b0a27aa3ea54 /src/main/java/com/google/devtools/build/lib/runtime
parentea168de2b7929277366ba27028fc4c8af2fa9235 (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.java11
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.