You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by fs...@apache.org on 2017/02/08 18:49:05 UTC
svn commit: r1782228 -
/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SummaryReport.java
Author: fschumacher
Date: Wed Feb 8 18:49:05 2017
New Revision: 1782228
URL: http://svn.apache.org/viewvc?rev=1782228&view=rev
Log:
Keep GUI responsive when many events are processed by View Results Tree, Summary Report and Log Panel.
This is part two of three with the changes to Summary Report.
Bugzilla Id: 60687
Modified:
jmeter/trunk/src/components/org/apache/jmeter/visualizers/SummaryReport.java
Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/SummaryReport.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SummaryReport.java?rev=1782228&r1=1782227&r2=1782228&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/visualizers/SummaryReport.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/SummaryReport.java Wed Feb 8 18:49:05 2017
@@ -38,6 +38,7 @@ import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
+import javax.swing.Timer;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.table.TableCellRenderer;
@@ -107,6 +108,8 @@ public class SummaryReport extends Abstr
*/
private final transient Object lock = new Object();
+ private volatile boolean dataChanged;
+
private final Map<String, Calculator> tableRows = new ConcurrentHashMap<>();
// Column renderers
@@ -163,6 +166,15 @@ public class SummaryReport extends Abstr
Double.class, Double.class, Double.class, Double.class, Double.class, Double.class });
clearData();
init();
+ new Timer(200, e -> {
+ if (!dataChanged) {
+ return;
+ }
+ dataChanged = false;
+ synchronized (lock) {
+ model.fireTableDataChanged();
+ }
+ }).start();
}
/**
@@ -183,31 +195,26 @@ public class SummaryReport extends Abstr
@Override
public void add(final SampleResult res) {
final String sampleLabel = res.getSampleLabel(useGroupName.isSelected());
- JMeterUtils.runSafe(false, new Runnable() {
- @Override
- public void run() {
- Calculator row;
- synchronized (lock) {
- row = tableRows.get(sampleLabel);
- if (row == null) {
- row = new Calculator(sampleLabel);
- tableRows.put(row.getLabel(), row);
- model.insertRow(row, model.getRowCount() - 1);
- }
- }
- /*
- * Synch is needed because multiple threads can update the counts.
- */
- synchronized(row) {
- row.addSample(res);
- }
- Calculator tot = tableRows.get(TOTAL_ROW_LABEL);
- synchronized(tot) {
- tot.addSample(res);
- }
- model.fireTableDataChanged();
+ Calculator row;
+ synchronized (lock) {
+ row = tableRows.get(sampleLabel);
+ if (row == null) {
+ row = new Calculator(sampleLabel);
+ tableRows.put(row.getLabel(), row);
+ model.insertRow(row, model.getRowCount() - 1);
}
- });
+ }
+ /*
+ * Synch is needed because multiple threads can update the counts.
+ */
+ synchronized (row) {
+ row.addSample(res);
+ }
+ Calculator tot = tableRows.get(TOTAL_ROW_LABEL);
+ synchronized (tot) {
+ tot.addSample(res);
+ }
+ dataChanged = true;
}
/**
@@ -222,6 +229,7 @@ public class SummaryReport extends Abstr
tableRows.put(TOTAL_ROW_LABEL, new Calculator(TOTAL_ROW_LABEL));
model.addRow(tableRows.get(TOTAL_ROW_LABEL));
}
+ dataChanged = true;
}
/**