spotube
spotube copied to clipboard
Abnormal CPU Usage
Is there an existing issue for this?
- [X] I have searched the existing issues
Current Behavior
Sometime after using the app, my CPU usage will skyrocket until everything on my PC begins acting like a PowerPoint Slideshow, at which point I kill Spotube in Task Manager and everything returns to normal.
Expected Behavior
It don't do that.
Steps to reproduce
- Open the app.
- Play music.
- Pause music (or reach the end of a playlist.)
- Wait (Disclaimer: This isn't very helpful, I fully admit that. I haven't pinpointed precisely when or why it happens,)
- CPU usage will inevitably increase until 100%.
Operating System
Windows 11 Home 22H2
Spotube version
3.4.1
Installation source
GitHub Releases (Binary)
Additional information
I did search and notice this seemed talked about in various forms before, but I haven't seen anything about it since the latest release. Not sure what's causing it, though I notice whenever it happens all of the images on the Browse screen of Spotube flicker constantly. The playlists I play are usually fairly small, like 10 songs, so it's not a size of playlist issue. I have no open dialogue boxes either, just sitting at the Browse screen.
Edit: Pausing (or finishing) a playlist, leaving it alone for some time (in this case, about 20-30 minutes) then resuming caused it to instantly jump to 100% usage.
Self grab
- [ ] I'm ready to work on this issue!
Please I'm trying to listen to music not boil myself alive.
@Shark3900 I hear you man. Windows has never been the most resource efficient platform for Spotube. I think there are a lot of variables that need to match in order to have this kind of CPU usage. The memory usage seems reasonable (although 300MB is still high for Spotube which is usually around ~180MB) so the CPU spike means there's something problematic with either the Player or the File System.
Can you specify your CPU model?
Yeah I noticed the memory usage is fairly low (agree 300 is high but that's still not extremely unreasonable with the amount of electron apps I willingly run haha).
I've got a Ryzen 7 5800X, I don't have any relevant debugging software or anything for something like this but if you know of anything I should try to record it with I'd be down to try and grab logs.
Funny enough I was reading through and noticed my laptop, ryzen 5 4600h was doing something weirdly similar...
And then moments later, my laptop went back to an issue I've reported https://github.com/KRTirtho/spotube/issues/1269
This has been fixed in 6673e5a
Try out the nightly version. Later it'll be released
I meant to write back on this a while ago but it completely slipped my mind:
I've been unable to test if this issue still occurs for me in 3.6.0 as any attempts to install Spotube on this version has lead to it failing to launch, around the same time as #1440 popped up - but curiously, I didn't have this issue in the version I originally wrote this in (3.4.1), so I'm unsure this has anything to do with my specific CPU (like #1156) or Windows 10 LTSC (like #44 and #118).
Some additional investigation, I noticed the log file was actually getting updated when I attempted to run the stable 3.6.0 build:
------- APP INFO -------
environment: release
version: 3.6.0
appName: spotube
buildNumber:
packageName: spotube
---------- ERROR ----------
type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
------- STACK TRACE -------
#0 AlbumSimple._extractTracksFromPage (package:spotify/src/models/album.dart:50)
#1 _$AlbumSimpleFromJson (package:spotify/src/models/_models.g.dart:332)
#2 new AlbumSimple.fromJson (package:spotify/src/models/album.dart:42)
#3 _$TrackFromJson (package:spotify/src/models/_models.g.dart:795)
#4 new Track.fromJson (package:spotify/src/models/track.dart:11)
#5 ProxyPlaylist._makeAppropriateTrack (package:spotube/provider/proxy_playlist/proxy_playlist.dart:60)
#6 new ProxyPlaylist.fromJson.<anonymous closure> (package:spotube/provider/proxy_playlist/proxy_playlist.dart:20)
#7 MappedIterable.elementAt (dart:_internal/iterable.dart:385)
#8 ListIterable.toSet (dart:_internal/iterable.dart:229)
#9 new ProxyPlaylist.fromJson (package:spotube/provider/proxy_playlist/proxy_playlist.dart:20)
#10 ProxyPlaylistNotifier.fromJson (package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart:216)
#11 PersistedStateNotifier._load (package:spotube/utils/persisted_state_notifier.dart:125)
<asynchronous suspension>
#12 new PersistedStateNotifier.<anonymous closure> (package:spotube/utils/persisted_state_notifier.dart:36)
<asynchronous suspension>
This differs from the latest nightly build which does manage to exist - suggesting to me it's already fixed - but only for a second or 2 before itself crashing:
------- APP INFO -------
environment: release
version: 3.6.0
appName: spotube
buildNumber:
packageName: spotube
---------- ERROR ----------
Exception: Unsupported message, action=[2196840648544, 8] raw=[[2196840648544, 8], true]
------- STACK TRACE -------
#0 FlutterRustBridgeBase._transformRust2DartMessage (package:flutter_rust_bridge/src/basic.dart:133)
#1 FlutterRustBridgeBase.executeSync (package:flutter_rust_bridge/src/basic.dart:85)
#2 SmtcWindowsImpl.smtcNew (package:smtc_windows/src/bridge_generated.dart:158)
#3 new SMTCWindows (package:smtc_windows/src/smtc_windows_base.dart:50)
#4 new WindowsAudioService (package:spotube/services/audio_services/windows_audio_service.dart:20)
#5 AudioServices.create (package:spotube/services/audio_services/audio_services.dart:32)
#6 new ProxyPlaylistNotifier (package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart:39)
#7 proxyPlaylistProvider.<anonymous closure> (package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart:214)
#8 StateNotifierProvider._create (package:riverpod/src/state_notifier_provider/base.dart:115)
#9 StateNotifierProviderElement.create.<anonymous closure> (package:riverpod/src/state_notifier_provider/base.dart:164)
#10 Result.guard (package:riverpod/src/result.dart:21)
#11 StateNotifierProviderElement.create (package:riverpod/src/state_notifier_provider/base.dart:164)
#12 ProviderElementBase.buildState (package:riverpod/src/framework/element.dart:409)
#13 ProviderElementBase.mount (package:riverpod/src/framework/element.dart:226)
#14 _StateReader._create (package:riverpod/src/framework/container.dart:47)
#15 _StateReader.getElement (package:riverpod/src/framework/container.dart:35)
#16 ProviderContainer.readProviderElement (package:riverpod/src/framework/container.dart:479)
#17 ProviderElementBase.readProviderElement (package:riverpod/src/framework/element.dart:730)
#18 ProviderElementProxy.addListener (package:riverpod/src/framework/proxy_provider_listenable.dart:86)
#19 ProviderElementBase.listen (package:riverpod/src/framework/element.dart:746)
#20 ProviderElementBase.watch (package:riverpod/src/framework/element.dart:687)
#21 trayMenuProvider.<anonymous closure> (package:spotube/provider/tray_manager/tray_menu.dart:22)
#22 Provider._create (package:riverpod/src/provider/base.dart:55)
#23 ProviderElement.create (package:riverpod/src/provider/base.dart:338)
#24 ProviderElementBase.buildState (package:riverpod/src/framework/element.dart:409)
#25 ProviderElementBase.mount (package:riverpod/src/framework/element.dart:226)
#26 _StateReader._create (package:riverpod/src/framework/container.dart:47)
#27 _StateReader.getElement (package:riverpod/src/framework/container.dart:35)
#28 ProviderContainer.readProviderElement (package:riverpod/src/framework/container.dart:479)
#29 ProviderElementBase.readProviderElement (package:riverpod/src/framework/element.dart:730)
#30 ProviderBase.addListener (package:riverpod/src/framework/provider_base.dart:79)
#31 ProviderElementBase.listen (package:riverpod/src/framework/element.dart:746)
#32 trayManagerProvider.<anonymous closure> (package:spotube/provider/tray_manager/tray_manager.dart:65)
#33 Provider._create (package:riverpod/src/provider/base.dart:55)
#34 ProviderElement.create (package:riverpod/src/provider/base.dart:338)
#35 ProviderElementBase.buildState (package:riverpod/src/framework/element.dart:409)
#36 ProviderElementBase.mount (package:riverpod/src/framework/element.dart:226)
#37 _StateReader._create (package:riverpod/src/framework/container.dart:47)
#38 _StateReader.getElement (package:riverpod/src/framework/container.dart:35)
#39 ProviderContainer.readProviderElement (package:riverpod/src/framework/container.dart:479)
#40 ProviderBase.addListener (package:riverpod/src/framework/provider_base.dart:79)
#41 ProviderContainer.listen (package:riverpod/src/framework/container.dart:280)
#42 ConsumerStatefulElement.listen (package:flutter_riverpod/src/consumer.dart:607)
#43 SpotubeState.build (package:spotube/main.dart:191)
#44 StatefulElement.build (package:flutter/src/widgets/framework.dart:5592)
#45 ConsumerStatefulElement.build (package:flutter_riverpod/src/consumer.dart:539)
#46 HookElement.build (package:flutter_hooks/src/framework.dart:438)
#47 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5480)
#48 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643)
#49 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#50 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#51 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5634)
#52 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#53 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#54 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#55 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505)
#56 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#57 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#58 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#59 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#60 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#61 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505)
#62 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643)
#63 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#64 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#65 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5634)
#66 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#67 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#68 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#69 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505)
#70 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#71 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#72 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#73 _UncontrolledProviderScopeElement.mount (package:flutter_riverpod/src/framework.dart:315)
#74 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#75 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#76 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505)
#77 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643)
#78 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#79 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#80 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5634)
#81 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#82 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#83 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#84 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505)
#85 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#86 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#87 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#88 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#89 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#90 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505)
#91 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5643)
#92 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#93 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#94 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5634)
#95 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#96 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#97 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#98 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505)
#99 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#100 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#101 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#102 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#103 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#104 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505)
#105 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#106 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#107 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#108 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#109 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#110 _RawViewElement._updateChild (package:flutter/src/widgets/view.dart:291)
#111 _RawViewElement.mount (package:flutter/src/widgets/view.dart:314)
#112 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#113 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#114 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5505)
#115 Element.rebuild (package:flutter/src/widgets/framework.dart:5196)
#116 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5462)
#117 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5456)
#118 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4335)
#119 Element.updateChild (package:flutter/src/widgets/framework.dart:3846)
#120 RootElement._rebuild (package:flutter/src/widgets/binding.dart:1354)
#121 RootElement.mount (package:flutter/src/widgets/binding.dart:1323)
#122 RootWidget.attach.<anonymous closure> (package:flutter/src/widgets/binding.dart:1276)
#123 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2844)
#124 RootWidget.attach (package:flutter/src/widgets/binding.dart:1275)
#125 WidgetsBinding.attachToBuildOwner (package:flutter/src/widgets/binding.dart:1088)
#126 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:1070)
#127 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:1056)
#128 TickerFuture.whenCompleteOrCancel.thunk (package:flutter/src/scheduler/ticker.dart:435)
#129 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398)
#130 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429)
#131 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184)