From 812838b7f7d617a3f25802fd08eceaaad4c78f8c Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 11 Nov 2025 16:32:27 -0500 Subject: [PATCH 1/5] cleanup --- .../org/jlab/utils/benchmark/BenchmarkTimer.java | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java index 74c712d008..13fa0c84ed 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java @@ -1,9 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - package org.jlab.utils.benchmark; /** @@ -13,16 +7,12 @@ public class BenchmarkTimer { private String timerName = "generic"; - - private long lastStartTime = 0; private long totalTime = 0; private long timeAtResume = 0; private int numberOfCalls = 0; private Boolean isPaused = true; - public BenchmarkTimer(){ - - } + public BenchmarkTimer(){} public BenchmarkTimer(String name){ timerName = name; @@ -47,9 +37,8 @@ public void pause(){ isPaused = true; } } - + public void reset(){ - lastStartTime = 0; totalTime = 0; timeAtResume = 0; numberOfCalls = 0; From 8ab6a5d256485e60405b935afa82f8f64be5fb8b Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 11 Nov 2025 16:32:56 -0500 Subject: [PATCH 2/5] add benchmark addition --- .../main/java/org/jlab/utils/benchmark/BenchmarkTimer.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java index 13fa0c84ed..0f824ea6ba 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java @@ -38,6 +38,11 @@ public void pause(){ } } + public void add(BenchmarkTimer b) { + totalTime += b.totalTime; + numberOfCalls += b.numberOfCalls; + } + public void reset(){ totalTime = 0; timeAtResume = 0; From a0c25d4c352f259d476e0657238b5d61053aa54f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 11 Nov 2025 16:35:41 -0500 Subject: [PATCH 3/5] cleanup --- .../org/jlab/utils/benchmark/Benchmark.java | 163 ++++++------------ 1 file changed, 53 insertions(+), 110 deletions(-) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/Benchmark.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/Benchmark.java index dddbfaf69c..1395abda44 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/Benchmark.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/Benchmark.java @@ -1,18 +1,11 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - package org.jlab.utils.benchmark; -import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; +import java.util.Collection; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Timer; import java.util.TimerTask; -import java.util.TreeMap; /** * @@ -20,136 +13,86 @@ */ public class Benchmark { - private static Benchmark benchmarkInstance = new Benchmark(); - - private final Map timerStore = new HashMap(); + private static final Benchmark benchmarkInstance = new Benchmark(); + private final Map timerStore = new LinkedHashMap<>(); private Timer updateTimer = null; + + public Benchmark(){} - - public Benchmark(){ - + public static Benchmark getInstance(){ + return benchmarkInstance; } public void printTimer(int interval){ - TimerTask timerTask = new TimerTask() - { - public void run() - { - //what to do at each excecution - System.out.println(benchmarkStringValue()); - } - }; + TimerTask timerTask = new TimerTask() { + @Override + public void run() { System.out.println(this); } + }; updateTimer = new Timer("Benchmark"); updateTimer.scheduleAtFixedRate(timerTask, 0, interval); } - public void reset(){ - for(Map.Entry entry : this.timerStore.entrySet()){ - entry.getValue().reset(); - } - } - - public static Benchmark getInstance(){ - return benchmarkInstance; + for (BenchmarkTimer bt : timerStore.values()) + bt.reset(); } public void addTimer(String name){ - if(timerStore.containsKey(name)==true){ - System.err.println("[Benchmark] -----> error. timer with name (" - + name + ") already exists"); - } else { - BenchmarkTimer timer = new BenchmarkTimer(name); - timerStore.put(timer.getName(), timer); - } + if (!timerStore.containsKey(name)) + timerStore.put(name, new BenchmarkTimer(name)); + else + System.err.println("[Benchmark] -----> error. timer with name ("+ name + ") already exists"); } public void pause(String name){ - if(timerStore.containsKey(name)==false){ - addTimer(name); - } else { + if (!timerStore.containsKey(name)) + timerStore.put(name, new BenchmarkTimer(name)); + else timerStore.get(name).pause(); - } } public void resume(String name){ - if(timerStore.containsKey(name)==false){ - //System.err.println("[Benchmark] -----> error. no timer defined with name (" - //+ name + ")"); - addTimer(name); - timerStore.get(name).resume(); - } else { - timerStore.get(name).resume(); - } + if (!timerStore.containsKey(name)) + timerStore.put(name, new BenchmarkTimer(name)); + timerStore.get(name).resume(); } - public BenchmarkTimer getTimer(String name){ - if(timerStore.containsKey(name)==true){ - return timerStore.get(name); - } - return null; + public BenchmarkTimer getTimer(String name){ + return timerStore.getOrDefault(name, null); } - - - public String benchmarkStringValue(){ - StringBuilder str = new StringBuilder(); - ArrayList timerStrings = new ArrayList(); - for(Map.Entry timer : timerStore.entrySet()){ - timerStrings.add(timer.getValue().toString()); - //str.append(timer.getValue().toString()); - //str.append("\n"); - } - - if(timerStrings.size()>0){ - int len = timerStrings.get(0).length(); - char[] asterix = new char[len+8]; - Arrays.fill(asterix,'*'); - String margins = new String(asterix); - str.append(margins); - str.append("\n"); - str.append("* BENCHMARK RESULTS \n"); - str.append(margins); - str.append("\n"); - for(String lines : timerStrings){ - str.append("* "); - str.append(lines); - str.append(" *\n"); - } - str.append(margins); - str.append("\n"); - } - - return str.toString(); + + public BenchmarkTimer getTotal(String name) { + BenchmarkTimer total = new BenchmarkTimer(name); + for (BenchmarkTimer b : timerStore.values()) + total.add(b); + return total; } + @Override public String toString(){ - StringBuilder str = new StringBuilder(); - ArrayList timerStrings = new ArrayList(); - for(Map.Entry timer : timerStore.entrySet()){ - timerStrings.add(timer.getValue().toString()); - //str.append(timer.getValue().toString()); - //str.append("\n"); - } - - if(timerStrings.size()>0){ - int len = timerStrings.get(0).length(); - char[] asterix = new char[len+8]; + StringBuilder s = new StringBuilder(); + Collection timers = timerStore.values(); + if (!timers.isEmpty()) { + int len = timers.iterator().next().toString().length(); + char[] asterix = new char[len+8]; Arrays.fill(asterix,'*'); String margins = new String(asterix); - str.append(margins); - str.append("\n"); - str.append("* BENCHMARK RESULTS \n"); - str.append(margins); - str.append("\n"); - for(String lines : timerStrings){ - str.append("* "); - str.append(lines); - str.append(" *\n"); + s.append(margins); + s.append("\n"); + s.append("* BENCHMARK RESULTS \n"); + s.append(margins); + s.append("\n"); + for (BenchmarkTimer b : timers) { + s.append("* "); + s.append(b); + s.append(" *\n"); } - str.append(margins); - str.append("\n"); + s.append("* "); + s.append(getTotal("")); + s.append(" *\n"); + s.append(margins); + s.append("\n"); } - - return str.toString(); + return s.toString(); } } From 4f8c12071024baacf768fb3e307ff7cd885a0667 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 11 Nov 2025 16:38:33 -0500 Subject: [PATCH 4/5] cleanup --- .../utils/benchmark/ProgressPrintout.java | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/ProgressPrintout.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/ProgressPrintout.java index 0ceef4269c..2737572550 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/ProgressPrintout.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/ProgressPrintout.java @@ -1,11 +1,5 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package org.jlab.utils.benchmark; -import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.logging.Level; @@ -17,12 +11,9 @@ */ public class ProgressPrintout { - private TreeMap items = new TreeMap(); - private TreeMap itemMax = new TreeMap(); - - private Long previousPrintoutTime = (long) 0; - private Long startPrintoutTime = (long) 0; - + private TreeMap items = new TreeMap<>(); + private Long previousPrintoutTime = (long) 0; + private Long startPrintoutTime = (long) 0; private double printoutIntervalSeconds = 10.0; private String printoutLeadingString = ">>>>> progress : "; private Integer numberOfCalls = 0; @@ -83,12 +74,12 @@ public void setAsDouble(String name, Double value){ public String getItemString(String itemname){ StringBuilder str = new StringBuilder(); - if(this.items.get(itemname) instanceof Integer){ - str.append(String.format(" %s : %5d",itemname,(Integer)this.items.get(itemname))); + if(this.items.get(itemname) instanceof Integer integer){ + str.append(String.format(" %s : %5d",itemname, integer)); } - if(this.items.get(itemname) instanceof Double){ - str.append(String.format(" %s : %8.3f",itemname,(Double)this.items.get(itemname))); + if(this.items.get(itemname) instanceof Double aDouble){ + str.append(String.format(" %s : %8.3f",itemname, aDouble)); } return str.toString(); } @@ -103,7 +94,6 @@ public static void main(String[] args){ } catch (InterruptedException ex) { Logger.getLogger(ProgressPrintout.class.getName()).log(Level.SEVERE, null, ex); } - //System.out.println("cycle " + loop); progress.updateStatus(); } } From b755f6e965aa1d0da4a9a7076e141f0d6ef0b9b3 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 11 Nov 2025 16:51:29 -0500 Subject: [PATCH 5/5] use seconds --- .../org/jlab/utils/benchmark/Benchmark.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/Benchmark.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/Benchmark.java index 1395abda44..011a9d81d5 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/Benchmark.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/Benchmark.java @@ -23,13 +23,13 @@ public static Benchmark getInstance(){ return benchmarkInstance; } - public void printTimer(int interval){ + public void printTimer(int seconds){ TimerTask timerTask = new TimerTask() { @Override - public void run() { System.out.println(this); } + public void run() { System.out.println(getInstance()); } }; updateTimer = new Timer("Benchmark"); - updateTimer.scheduleAtFixedRate(timerTask, 0, interval); + updateTimer.scheduleAtFixedRate(timerTask, 0, 1000*seconds); } public void reset(){ @@ -95,4 +95,17 @@ public String toString(){ } return s.toString(); } + + public static void main(String[] args){ + Benchmark b = getInstance(); + b.printTimer(10); + int loop = 0; + while(true){ + b.resume("COUNT"); + loop++; + b.pause("COUNT"); + try { Thread.sleep(2000); } + catch (InterruptedException ex) {} + } + } }