summaryrefslogtreecommitdiffstats
path: root/pkg/gui/types
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2024-06-23 13:13:58 +0200
committerGitHub <noreply@github.com>2024-06-23 13:13:58 +0200
commitcf40a5b077343cf6cf3de50b60fc4b47ce929dc1 (patch)
treeb27de3b227276cf54d39238e8162b79eb029567e /pkg/gui/types
parenta62a5089d6ed5ba989279590a5bd3426829c856d (diff)
parent26132cf5bdae7ec81e9a0708c722ad2a9cf0c2cf (diff)
Improve render performance (#3686)
- **PR Description** Fix a performance regression that I introduced with v0.41: when entering or leaving staging mode for a file, or when switching from a file that has only unstaged changes to one that has both staged and unstaged changes, there was a noticeable lag of about 500ms on my machine. With the improvements in this PR we get this back down to about 20ms.
Diffstat (limited to 'pkg/gui/types')
-rw-r--r--pkg/gui/types/context.go16
1 files changed, 14 insertions, 2 deletions
diff --git a/pkg/gui/types/context.go b/pkg/gui/types/context.go
index 003035fc2..70458c16f 100644
--- a/pkg/gui/types/context.go
+++ b/pkg/gui/types/context.go
@@ -39,6 +39,18 @@ type ParentContexter interface {
GetParentContext() (Context, bool)
}
+type NeedsRerenderOnWidthChangeLevel int
+
+const (
+ // view doesn't render differently when its width changes
+ NEEDS_RERENDER_ON_WIDTH_CHANGE_NONE NeedsRerenderOnWidthChangeLevel = iota
+ // view renders differently when its width changes. An example is a view
+ // that truncates long lines to the view width, e.g. the branches view
+ NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_WIDTH_CHANGES
+ // view renders differently only when the screen mode changes
+ NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_SCREEN_MODE_CHANGES
+)
+
type IBaseContext interface {
HasKeybindings
ParentContexter
@@ -60,8 +72,8 @@ type IBaseContext interface {
// determined independently.
HasControlledBounds() bool
- // true if the view needs to be rerendered when its width changes
- NeedsRerenderOnWidthChange() bool
+ // to what extent the view needs to be rerendered when its width changes
+ NeedsRerenderOnWidthChange() NeedsRerenderOnWidthChangeLevel
// true if the view needs to be rerendered when its height changes
NeedsRerenderOnHeightChange() bool