Skip to content

Commit d99530a

Browse files
committed
Make 'recalculateLineNumberPreferredSize' faster
Logs are always in sequential order. There is no need to iterate over all logs in order to find the greatest index if they are stored in an array. We can simply access the last element and get its index
1 parent 753506c commit d99530a

File tree

3 files changed

+21
-19
lines changed

3 files changed

+21
-19
lines changed

src/main/java/com/tibagni/logviewer/LogViewerView.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ class LogViewerViewImpl(private val mainView: MainView, initialLogFiles: Set<Fil
439439
.map { model.getValueAt(it, 0) as LogEntry }
440440
.forEach { myLogsListTableModel.addLog(it) }
441441
sidePanel.showMyLogsView()
442-
myLogsRenderer.recalculateLineNumberPreferredSize(myLogsListTableModel)
442+
myLogsListTableModel.lastEntry?.let { myLogsRenderer.recalculateLineNumberPreferredSize(it.index) }
443443
}
444444

445445
if (selectedRows.size == 1) {
@@ -510,7 +510,7 @@ class LogViewerViewImpl(private val mainView: MainView, initialLogFiles: Set<Fil
510510
myLogsList.table.selectedRows
511511
.map { myLogsListTableModel.getValueAt(it, 0) as LogEntry }
512512
.forEach { myLogsListTableModel.removeLog(it) }
513-
myLogsRenderer.recalculateLineNumberPreferredSize(myLogsListTableModel)
513+
myLogsListTableModel.lastEntry?.let { myLogsRenderer.recalculateLineNumberPreferredSize(it.index) }
514514
}
515515

516516
myLogsList.table.addMouseListener(object : MouseAdapter() {
@@ -699,7 +699,7 @@ class LogViewerViewImpl(private val mainView: MainView, initialLogFiles: Set<Fil
699699
override fun showLogs(logEntries: List<LogEntry>?) {
700700
logListTableModel.setLogs(logEntries)
701701
// calc the line number view needed width
702-
logRenderer.recalculateLineNumberPreferredSize(logListTableModel)
702+
logEntries?.lastOrNull()?.let { logRenderer.recalculateLineNumberPreferredSize(it.index) }
703703
}
704704

705705
override fun showCurrentLogsLocation(logsPath: String?) {

src/main/java/com/tibagni/logviewer/log/LogCellRenderer.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -89,25 +89,17 @@ public void highlightLine(int rowIndex) {
8989
mHighlightLine = rowIndex;
9090
}
9191

92-
public void recalculateLineNumberPreferredSize(LogListTableModel model) {
93-
if (!lineNumLabel.isVisible()) return;
94-
95-
int maxIndex = -1;
96-
for (int index = 0; index < model.getRowCount(); index++) {
97-
LogEntry logEntry = (LogEntry) model.getValueAt(index, 0);
98-
if (logEntry.getIndex() > maxIndex) {
99-
maxIndex = logEntry.getIndex();
100-
}
92+
public void recalculateLineNumberPreferredSize(int maxLineNumber) {
93+
if (!lineNumLabel.isVisible()) {
94+
return;
10195
}
10296

103-
if (maxIndex != -1) {
104-
String line = String.valueOf(maxIndex + 1);
105-
int width = (int) getFont().getStringBounds(line, fontRenderContext).getWidth();
97+
String line = String.valueOf(maxLineNumber + 1);
98+
int width = (int) getFont().getStringBounds(line, fontRenderContext).getWidth();
10699

107-
// size = string width + border size
108-
lineNumLabel.setPreferredSize(new Dimension(width + UIScaleUtils.dip(15),
109-
lineNumLabel.getPreferredSize().height));
110-
}
100+
// size = string width + border size
101+
lineNumLabel.setPreferredSize(new Dimension(width + UIScaleUtils.dip(15),
102+
lineNumLabel.getPreferredSize().height));
111103
}
112104

113105
@Override

src/main/java/com/tibagni/logviewer/log/LogListTableModel.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.tibagni.logviewer.log;
22

3+
import org.jetbrains.annotations.Nullable;
4+
35
import javax.swing.table.AbstractTableModel;
46
import java.util.ArrayList;
57
import java.util.Collections;
@@ -39,6 +41,14 @@ public Object getValueAt(int rowIndex, int columnIndex) {
3941
return entries.get(rowIndex);
4042
}
4143

44+
public @Nullable LogEntry getLastEntry() {
45+
if (entries.isEmpty()) {
46+
return null;
47+
}
48+
49+
return entries.get(entries.size() - 1);
50+
}
51+
4252
public void setLogs(List<LogEntry> entries) {
4353
this.entries.clear();
4454
this.entries.addAll(entries);

0 commit comments

Comments
 (0)