sublimehq / sublime_merge

Issue tracker for Sublime Merge
https://www.sublimemerge.com
273 stars 14 forks source link

GUI is kinda slow #1508

Open yay opened 2 years ago

yay commented 2 years ago

Hi,

I guess you're using Skia with OpenGL backend under the hood, but honesly, the GUI is kinda slow and choppy when resizing the Sublime Merge window with only a moderate amount of diff information in it. That's on a 10-core M1 Pro which has stellar single core performance.

I feel like that wouldn't happen if you used native GUI (I guess that won't happen because this is a cross-platform app) or even web GUI, because browser layout/rasterization has been optimized to oblivion. The same diff opened in SourceTree for mac resizes like butter.

I also don't feel like bundling Electron would be that big of a deal memory wise either. My Sublime Merge is using 440MB of ram right after launch. I only have 3 tabs in it with https://github.com/odin-lang/Odin, https://github.com/DanielGavin/ols and https://github.com/yay/odin-ks repos open.

Anything you can do to make GUI rendering faster?

dpjohnst commented 2 years ago

Hi @yay,

Thanks for reaching out, and sorry to hear you're experiencing poor performance!

This is definitely not expected (especially with OpenGL rendering enabled), so we should investigate this further.

When you have a spare moment, could you share the following information:

Cheers, - Dylan from Sublime HQ

yay commented 2 years ago

Sure:

=== Git Version Information === Using Git: git (system) git version 2.32.1 (Apple Git-133) PATH: /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Apple/usr/bin:/Users/vitaly/.cargo/bin (from shell) environment variables loaded using: /bin/zsh -l

=== Browse Page Information === HEAD: 42588e6b2075752fb94667a954604f5b088a0fff Is in merge: 0 Is in cherry_pick: 0 Is in rebase: 0 Is in revert: 0

=== Git Status Information === M binary-trees/bump/bump.odin

=== Our Status Information === M binary-trees/bump/bump.odin

=== Git Config Information === branch.main.merge=refs/heads/main branch.main.remote=origin commit.template=/Users/vitaly/.stCommitMsg core.bare=false core.excludesfile=/Users/vitaly/.gitignore_global core.filemode=true core.ignorecase=true core.logallrefupdates=true core.precomposeunicode=true core.repositoryformatversion=0 credential.helper=osxkeychain difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE" difftool.sourcetree.path= filter.lfs.clean=git-lfs clean -- %f filter.lfs.process=git-lfs filter-process filter.lfs.required=true filter.lfs.smudge=git-lfs smudge -- %f http.postbuffer=1048576 mergetool.sourcetree.cmd=/Applications/Sourcetree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED" mergetool.sourcetree.trustexitcode=true pull.rebase=true remote.origin.fetch=+refs/heads/:refs/remotes/origin/ remote.origin.url=https://github.com/yay/odin-ks.git user.email=*** user.name=Vitalii Kravchenko

=== Our Config Information === Git Config Path Information Using config path: /etc/gitconfig Using config path: /Users/vitaly/.config/git/config Using config path: /Users/vitaly/.gitconfig Using config path: /Users/vitaly/projects/odin-ks/.git/config

Our config output is different to the Git config output branch.main.merge=refs/heads/main branch.main.remote=origin commit.template=/Users/vitaly/.stCommitMsg core.bare=false core.excludesfile=/Users/vitaly/.gitignore_global core.filemode=true core.ignorecase=true core.logallrefupdates=true core.precomposeunicode=true core.repositoryformatversion=0 difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE" difftool.sourcetree.path= filter.lfs.clean=git-lfs clean -- %f filter.lfs.process=git-lfs filter-process filter.lfs.required=true filter.lfs.smudge=git-lfs smudge -- %f http.postbuffer=1048576 mergetool.sourcetree.cmd=/Applications/Sourcetree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED" mergetool.sourcetree.trustexitcode=true pull.rebase=true remote.origin.fetch=+refs/heads/:refs/remotes/origin/ remote.origin.url=https://github.com/yay/odin-ks.git user.email=*** user.name=Vitalii Kravchenko

=== Git Attributes Information === git check_attr --all output binary-trees/bump/bump.odin

=== Our Modified Files Newline Normalisation and EOL Information === binary-trees/bump/bump.odin: unspecified - native

=== Our Modified Files Flag Information === Ignoring symlinks: 0 binary-trees/bump/bump.odin: Working - Normal File : Index - Normal File


- Specifically this commit `2abdfdf265f55b91b0dde50d1f4cad6372d33b44` ("Multi-threaded binary trees") in the https://github.com/yay/odin-ks repo, even though `out.ppm` diff is collapsed, it still seems to affect rendering performance with just `main.odin` diff showing.
dpjohnst commented 2 years ago

Hi @yay,

Thanks for this additional information - I've identified the cause of the issue, and I am investigating a fix. As a workaround for the meantime, you can disable word-wrap in the diffs.

This can be done by opening the context menu of any diff, and selecting Word Wrap > Disabled

Thank you for your patience while I investigate this further.

Kind regards, - Dylan from Sublime HQ

yay commented 1 year ago

A quick update on this. There's also a scroll animation :)

https://user-images.githubusercontent.com/1799756/183781929-c80befaa-326f-4824-b02b-8a486498ad46.mp4