Skip to content

Long running encodedSemanticClassifications-full request with @discordjs/voice #49053

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

Open
Laci0503 opened this issue May 8, 2022 · 8 comments
Labels
Domain: Performance Reports of unusually slow behavior Needs Investigation This issue needs a team member to investigate its status.

Comments

@Laci0503
Copy link

Laci0503 commented May 8, 2022

Issue Type: Performance Issue

JavaScript autocomplete becomes very slow and uses a lot of cpu.
Steps to reproduce:
I am using the Discord.JS library, and the VoiceConnection object uses events which are not named with strings but objects.
For example:
(method) TypedEmitter.on<VoiceConnectionStatus.Disconnected>(event: VoiceConnectionStatus.Disconnected, listener: (oldState: VoiceConnectionState, newState: (VoiceConnectionDisconnectedOtherState & {
...;
}) | (VoiceConnectionDisconnectedWebSocketState & {
...;
})) => Awaited<...>): VoiceConnection

It seems to me that if I bind an event to this emitter, the autocomplete becomes slow.
Example:
this.voice_connection.on(VoiceConnectionStatus.Disconnected, (old_state, new_state)=>{
if(this.state=="PLAYING"){
this.pause();
}
});
However if I comment this out it stops lagging.
I reproduced this with extensions disabled.

VS Code version: Code 1.66.2 (dfd34e8260c270da74b5c2d86d61aee4b6d56977, 2022-04-11T07:46:01.075Z)
OS version: Windows_NT x64 10.0.19043
Restricted Mode: No

System Info
Item Value
CPUs AMD Ryzen 5 2600X Six-Core Processor (12 x 3593)
GPU Status 2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
oop_rasterization: enabled
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_renderer: enabled_on
video_decode: enabled
video_encode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled
Load (avg) undefined
Memory (System) 15.95GB (8.38GB free)
Process Argv --crash-reporter-id 47a451dd-9d7e-42a4-85ae-b917b84d9992
Screen Reader no
VM 0%
Process Info
CPU %	Mem MB	   PID	Process
    0	    95	 13412	code main
    0	   121	  7776	   extensionHost
    0	   703	  8776	     "C:\Program Files\Microsoft VS Code\Code.exe" --ms-enable-electron-run-as-node --max-old-space-size=3072 "c:\Program Files\Microsoft VS Code\resources\app\extensions\node_modules\typescript\lib\tsserver.js" --useInferredProjectPerProjectRoot --enableTelemetry --cancellationPipeName C:\Users\kecsk\AppData\Local\Temp\vscode-typescript\a1f96df8b23d1affac48\tscancellation-c5c1e941f078bbe6e437.tmp* --locale en --noGetErrOnBackgroundUpdate --validateDefaultNpmLocation --useNodeIpc
    0	    94	  9872	       "C:\Program Files\Microsoft VS Code\Code.exe" --ms-enable-electron-run-as-node "c:/Program Files/Microsoft VS Code/resources/app/extensions/node_modules/typescript/lib/typingsInstaller.js" --globalTypingsCacheLocation C:/Users/kecsk/AppData/Local/Microsoft/TypeScript/4.6 --enableTelemetry --typesMapLocation "c:/Program Files/Microsoft VS Code/resources/app/extensions/node_modules/typescript/lib/typesMap.json" --validateDefaultNpmLocation
    0	   121	 22200	     "C:\Program Files\Microsoft VS Code\Code.exe" --ms-enable-electron-run-as-node --max-old-space-size=3072 "c:\Program Files\Microsoft VS Code\resources\app\extensions\node_modules\typescript\lib\tsserver.js" --serverMode partialSemantic --useInferredProjectPerProjectRoot --disableAutomaticTypingAcquisition --cancellationPipeName C:\Users\kecsk\AppData\Local\Temp\vscode-typescript\a1f96df8b23d1affac48\tscancellation-4b1f8abb5201e1af6356.tmp* --locale en --noGetErrOnBackgroundUpdate --validateDefaultNpmLocation --useNodeIpc
    0	   101	 16984	   shared-process
    0	    81	 14868	     fileWatcher
    0	    76	 18272	     ptyHost
    0	    69	 14368	       C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    0	     6	 24380	       console-window-host (Windows internal process)
    0	   126	 19692	   gpu-process
    0	    38	 20580	   utility-network-service
    0	    88	 21564	   issue-reporter
    0	    26	 22972	   crashpad-handler
    0	   221	 23236	   window (audio_cache.ts - bot - Visual Studio Code)
Workspace Info
|  Window (audio_cache.ts - bot - Visual Studio Code)
|    Folder (bot): 48 files
|      File types: ts(20) json(3) opus(2) dockerignore(1) gitignore(1) m4a(1)
|      Conf files: dockerfile(1) package.json(1);
Extensions: none
A/B Experiments
vsliv368:30146709
vsreu685:30147344
python383:30185418
vspor879:30202332
vspor708:30202333
vspor363:30204092
vswsl492:30256859
pythonvspyl392:30443607
pythontb:30283811
pythonptprofiler:30281270
vshan820:30294714
vstes263:30335439
vscoreces:30445986
pythondataviewer:30285071
vscod805cf:30301675
pythonvspyt200:30340761
binariesv615:30325510
bridge0708:30335490
bridge0723:30353136
vsaa593cf:30376535
vsc1dst:30438360
pythonvs932:30410667
wslgetstarted:30449410
pythonvsnew555:30457759
vscscmwlcmt:30465135
cppdebug:30475216

@mjbvz
Copy link
Contributor

mjbvz commented May 8, 2022

Does this reproduce in the latest VS Code insiders build with all extensions disabled?

@Laci0503
Copy link
Author

Laci0503 commented May 8, 2022

Yes, I am able to reproduce it in the latest insiders build as well.

@Laci0503
Copy link
Author

Laci0503 commented May 8, 2022

This is the exact piece of code that makes it lag. However having only one this.voice_connection.on() part makes it lag just as much.
this.voice_connection is a VoiceConnection object from the @discordjs/voice library.
These are the npm packages installed:
"dependencies": {
"@discordjs/voice": "^0.9.0",
"discord.js": "^13.6.0",
"ffmpeg-static": "^4.4.1",
"googleapis": "^100.0.0",
"prism-media": "^1.3.2",
"sodium": "^3.0.2",
"tinyduration": "^3.2.2",
"ts-node": "^10.7.0",
"typescript": "^4.6.3"
}

this.voice_connection.on(VoiceConnectionStatus.Disconnected, (old_state, new_state)=>{
    if(this.state=="PLAYING"){
        this.pause();
    }
});
this.voice_connection.on(VoiceConnectionStatus.Ready, (new_state, old_state)=>{
    if(this.state=="PAUSED"){
        this.resume();
    }
});
this.voice_connection.on(VoiceConnectionStatus.Connecting, (old_state, new_state)=>{
    if(this.state=="PLAYING"){
        this.pause();
    }
});
this.voice_connection.on(VoiceConnectionStatus.Signalling, (old_state, new_state)=>{
    if(this.state=="PLAYING"){
        this.pause();
    }
});
this.voice_connection.on(VoiceConnectionStatus.Destroyed, (old_state, new_state)=>{
    if(this.state=="PLAYING" || this.state=="PAUSED"){
        this.stop();
    }
});

EDIT: The lag stops if there are 0 or 1 arguments in the handler.
For example:
this.voice_state.on(VoiceConnectionStatus.Disconnected, ()=>{})
or this.voice_state.on(VoiceConnectionStatus.Disconnected, (new_state)=>{})

@mjbvz
Copy link
Contributor

mjbvz commented May 10, 2022

Can you please share a small, self contained project that demonstrates the issue?

@Laci0503
Copy link
Author

I could not really find out why it happens with this library, but here is an example of the problem: https://github.com/Laci0503/vscode-lag-issue-test-project.git
I have tried to recreate it without the @discordjs/voice library but there must be something in its types of source which makes it lag.

@mjbvz mjbvz transferred this issue from microsoft/vscode May 10, 2022
@mjbvz
Copy link
Contributor

mjbvz commented May 10, 2022

Thanks @Laci0503

With the project, I see encodedSemanticClassifications-full taking a long time

Info 239  [20:51:09.308] request:
    {
      "seq": 74,
      "type": "request",
      "command": "encodedSemanticClassifications-full",
      "arguments": {
        "file": "/workspaces/vscode-lag-issue-test-project/index.ts",
        "start": 0,
        "length": 162,
        "format": "2020"
      }
    }
Perf 240  [20:51:12.988] 74::encodedSemanticClassifications-full: elapsed time (in milliseconds) 3680.1233

Moving for TS for investigation

@mjbvz mjbvz changed the title JavaScript autocomplete lagging when using TypedEmitter Long running encodedSemanticClassifications-full request with @discordjs/voice May 10, 2022
@mjbvz mjbvz removed the Needs More Info The issue still hasn't been fully clarified label May 10, 2022
@mjbvz mjbvz removed their assignment May 10, 2022
@Laci0503
Copy link
Author

Thanks for your help.

@andrewbranch andrewbranch added Needs Investigation This issue needs a team member to investigate its status. Domain: Performance Reports of unusually slow behavior labels May 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Domain: Performance Reports of unusually slow behavior Needs Investigation This issue needs a team member to investigate its status.
Projects
None yet
Development

No branches or pull requests

4 participants
@andrewbranch @mjbvz @Laci0503 and others