diff options
author | Thomas Wolf | 2018-08-25 18:11:07 +0000 |
---|---|---|
committer | Thomas Wolf | 2018-08-25 18:11:07 +0000 |
commit | 9abe013b530e3b9bb931931626ea144958473ee3 (patch) | |
tree | 837b6a32bdc0b2ee0d5c18e96ae6df12d0f390b6 | |
parent | ea7b7b5b26270cc4bef44bf2b1b9970b2082322b (diff) | |
download | egit-9abe013b530e3b9bb931931626ea144958473ee3.tar.gz egit-9abe013b530e3b9bb931931626ea144958473ee3.tar.xz egit-9abe013b530e3b9bb931931626ea144958473ee3.zip |
Avoid more UI freezes in ReflogView: redraw once only
Adding lots of children (for instance, some 1500 ReflogItems)
to the viewer is slow because the viewer tries to redraw too
often. UI monitoring still reported UI freezes of about 3sec
(at least on Cocoa).
Avoid this by suppressing redraws while the viewer is adding
the items. Redraw it once all items have been added.
Change-Id: Ic38ae975a5edee5cc75d3c296d438e352844daa6
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
-rw-r--r-- | org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogViewContentProvider.java | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogViewContentProvider.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogViewContentProvider.java index d0c55bba75..1f0d28f8bb 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogViewContentProvider.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogViewContentProvider.java @@ -274,10 +274,16 @@ public class ReflogViewContentProvider implements ITreeContentProvider { } control.getDisplay().syncExec(() -> { if (!control.isDisposed()) { - if (children.length != 1 || children[0] != ERROR_ELEMENT) { - viewer.remove(ERROR_ELEMENT); + try { + control.setRedraw(false); + if (children.length != 1 + || children[0] != ERROR_ELEMENT) { + viewer.remove(ERROR_ELEMENT); + } + viewer.add(parent, children); + } finally { + control.setRedraw(true); } - viewer.add(parent, children); } }); } |