Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tabs: clicking between active tabs results in 4 redrawTabSelectedActiveAndDirty #213160

Open
bpasero opened this issue May 21, 2024 · 2 comments · Fixed by #219651
Open

Tabs: clicking between active tabs results in 4 redrawTabSelectedActiveAndDirty #213160

bpasero opened this issue May 21, 2024 · 2 comments · Fixed by #219651
Assignees
Labels
debt Code quality issues workbench-tabs VS Code editor tab issues
Milestone

Comments

@bpasero
Copy link
Member

bpasero commented May 21, 2024

When I log a stack trace in redrawTabSelectedActiveAndDirty, I see 3 calls when I click on the active tab, even when the tab is already active:

multiEditorTabsControl.js:1263 redrawTabSelectedActiveAndDirty Error
    at MultiEditorTabsControl.redrawTabSelectedActiveAndDirty (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/multiEditorTabsControl.js:1263:60)
    at vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/multiEditorTabsControl.js:480:22
    at MultiEditorTabsControl.doWithTab (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/multiEditorTabsControl.js:563:17)
    at vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/multiEditorTabsControl.js:550:22
    at Array.forEach (<anonymous>)
    at MultiEditorTabsControl.forEachTab (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/multiEditorTabsControl.js:543:72)
    at MultiEditorTabsControl.updateEditorSelections (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/multiEditorTabsControl.js:479:18)
    at MultiRowEditorControl.updateEditorSelections (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/multiRowEditorTabsControl.js:132:44)
    at EditorTitleControl.updateEditorSelections (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/editorTitleControl.js:118:36)
    at EditorGroupView.onDidChangeEditorSelection (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/editorGroupView.js:648:31)
    at EditorGroupView.onDidGroupModelChange (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/editorGroupView.js:432:26)
    at UniqueContainer.value (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/editorGroupView.js:415:66)
    at Emitter._deliver (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/base/common/event.js:926:26)
    at Emitter._deliverQueue (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/base/common/event.js:937:22)
    at Emitter.fire (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/base/common/event.js:960:22)
    at EditorGroupModel.doSetSelection (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/common/editor/editorGroupModel.js:488:36)
    at EditorGroupModel.setSelection (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/common/editor/editorGroupModel.js:474:18)
    at EditorGroupModel.openEditor (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/common/editor/editorGroupModel.js:227:22)
    at EditorGroupView.doOpenEditor (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/editorGroupView.js:941:64)
    at EditorGroupView.openEditor (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/editorGroupView.js:866:25)
    at handleClickOrTouch (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/multiEditorTabsControl.js:660:46)
    at HTMLDivElement.<anonymous> (vscode-file://vscode-app/Users/bpasero/Development/Microsoft/vscode/out/vs/workbench/browser/parts/editor/multiEditorTabsControl.js:672:100)

For some reason a onDidChangeEditorSelection selection event is fired always?

@bpasero bpasero added the workbench-tabs VS Code editor tab issues label May 21, 2024
@bpasero bpasero added the debt Code quality issues label May 21, 2024
@benibenj benibenj added this to the June 2024 milestone May 22, 2024
@bpasero
Copy link
Member Author

bpasero commented May 22, 2024

This is fixed, but jumping between 2 active tabs still results in 4 updates.

@bpasero bpasero changed the title Tabs: click on active tab results in 3 redrawTabSelectedActiveAndDirty Tabs: clicking between active tabs results in 4 redrawTabSelectedActiveAndDirty May 22, 2024
@benibenj benibenj modified the milestones: June 2024, July 2024 Jun 25, 2024
@benibenj
Copy link
Contributor

benibenj commented Jul 2, 2024

This is happening because we are redrawing when

  • doShowEditor is being called and
  • a selection change occurs in the model.

We only need to redraw from updateEditorSelections if a selection got removed. Otherwise it gets handled by the open editor call.
To fully optimize, this requires supporting selectedEditors on the filtered model.

benibenj added a commit that referenced this issue Jul 2, 2024
benibenj added a commit that referenced this issue Jul 2, 2024
@vscodenpa vscodenpa added unreleased Patch has not yet been released in VS Code Insiders insiders-released Patch has been released in VS Code Insiders and removed unreleased Patch has not yet been released in VS Code Insiders labels Jul 2, 2024
@benibenj benibenj reopened this Jul 5, 2024
@vscodenpa vscodenpa removed the insiders-released Patch has been released in VS Code Insiders label Jul 5, 2024
aaronchucarroll pushed a commit to aaronchucarroll/vscode that referenced this issue Jul 10, 2024
@benibenj benibenj modified the milestones: July 2024, Backlog Jul 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
debt Code quality issues workbench-tabs VS Code editor tab issues
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants