[GTK] problematic runtime behavior in table when deleting many rows
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start by reproducing the hang with the supplied GTK3 Java snippet: create a multi-select virtual table, select a row that will be removed, then shrink its item count from 50,000 to 5. Compare the timing with only the first row selected and trace the GTK table item-count and selection-removal paths. Done means shrinking rows intersecting the selection is comparably fast and the behavior is covered by a regression test.
由索引模型根据 Issue 内容生成。
描述
On GTK3, deleting many rows from a table results in a hang if
- SWT_MULTI is set
- the rows to be deleted intersect with the selection of the table
- the number of rows to be deleted is relatively large
Snippet:
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class GtkTablePerformanceIssue {
private static final int HUGE_COUNT = 500_000;
private static final int LARGE_COUNT = 50_000;
private static final int SMALL_COUNT = 5;
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("GTK Table remove performance");
shell.setLayout(new GridLayout(1, false));
final Table table = new Table(shell, SWT.VIRTUAL | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
table.addListener(SWT.SetData, event -> {
final TableItem item = (TableItem)event.item;
item.setText("Item " + table.indexOf(item));
});
final Label explanation = new Label(shell, SWT.NONE);
explanation.setText("When shrinking, select a row which won't exist after the shrink.");
final Button huge = new Button(shell, SWT.PUSH);
huge.setText("Reset to " + HUGE_COUNT + " rows");
huge.addListener(SWT.Selection, event -> table.setItemCount(HUGE_COUNT));
final Button large = new Button(shell, SWT.PUSH);
large.setText("Reset to " + LARGE_COUNT + " rows");
large.addListener(SWT.Selection, event -> table.setItemCount(LARGE_COUNT));
final Button shrink = new Button(shell, SWT.PUSH);
shrink.setText("Shrink to " + SMALL_COUNT + " rows");
final Label result = new Label(shell, SWT.NONE);
result.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
shrink.addListener(SWT.Selection, event -> {
final long start = System.nanoTime();
table.setItemCount(SMALL_COUNT);
final long elapsedMillis = (System.nanoTime() - start) / 1_000_000;
result.setText("setItemCount(" + SMALL_COUNT + "): " + elapsedMillis + " ms");
result.getParent().layout();
});
table.setItemCount(LARGE_COUNT);
table.select(8);
shell.setSize(500, 400);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
Expected behavior
The entries should be removed as fast as they are when only the first row is selected.
- 主要语言
- Java
- 星标
- 202
- 派生
- 206
- 平均合并
- 16 小时 56 分钟
- 30 天内合并 PR
- 110
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
eclipse-platform/eclipse.platform.swt 的其他 Issue
-
`SWT_AWT.initFrame` takes `(long, String)` in Java; the GTK native declares no `className` and the Cocoa native types it `const char *`可能已有人在做 @GreenFuze 于 3 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 88/100
eclipse-platform/eclipse.platform.swt#3665 · 3 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
eclipse-platform/eclipse.platform.swt#3546 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
eclipse-platform/eclipse.platform.swt#3428 ·
维护者通常 1 天内回复
-
难度 1/5 1-3 小时 新手友好度 75/100
eclipse-platform/eclipse.platform.swt#3336 · 3 条评论 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 30/100
eclipse-platform/eclipse.platform.swt#3718 ·
维护者通常 1 天内回复
查看 eclipse-platform/eclipse.platform.swt 的全部 Issue
相似的 Issue
-
approved bug
难度 2/5 1-3 小时 新手友好度 70/100
checkstyle/checkstyle#21981 · 1 条评论 ·
维护者通常 1 天内回复
-
Build: the CUDA backend fails without cuDNN instead of skipping the cuDNN shim (as the cuDF shim does)可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 2/5 1-3 小时 新手友好度 68/100
beehive-lab/TornadoVM#1248 ·
维护者通常 1 天内回复
-
good first issue help wanted ready-for-human
难度 2/5 半天 新手友好度 64/100
维护者通常 1 天内回复
-
bug jdbc-v2
难度 2/5 1-3 小时 新手友好度 70/100
ClickHouse/clickhouse-java#3214 ·
维护者通常 1 天内回复
-
area: detector eco: java help wanted lane: free-agent roadmap size: S type: parser
难度 2/5 1-3 小时 新手友好度 62/100
arminazimi/evergreen#355 ·
维护者通常 1 天内回复