[Bug 45815] FamiTracker etc. use much more CPU in Wine than Windows
wine-bugs at winehq.org
wine-bugs at winehq.org
Sun Sep 30 00:02:44 CDT 2018
https://bugs.winehq.org/show_bug.cgi?id=45815
--- Comment #2 from jimbo1qaz <jimbo1qaz at gmail.com> ---
Wine: 3.16
Github: https://github.com/jimbo1qaz/j0CC-FamiTracker/releases/tag/j0.6.1
Exact binary used:
https://github.com/jimbo1qaz/j0CC-FamiTracker/releases/download/j0.6.1/j0CC-Famitracker-j0.6.1.exe
Symbols:
https://github.com/jimbo1qaz/j0CC-FamiTracker/releases/download/j0.6.1/j0CC-Famitracker-j0.6.1.pdb
I ran `perf report` on native non-VM Kubuntu 18.04:
- 69.22% 0x6619ba
+ 33.94% 0x502dc4
+ 33.63% 0x503467
It seems 502dc4 and 503467 are eating CPU.
## 502dc4
`winedbg attach` immediately breaks in a subcall of 502dc4. I run bt, then
compare binary addresses with x32dbg running under Wine.
- Open .exe in x32dbg
- ctrl+G, paste, enter
- it loads .pdb and tells me which file/line# the code corresponds to
famitrackerview.cpp:839
10 0x0000000000443e3a in j0cc-famitracker-j0.6.1 (+0x43e39)
(0x000000000033fac4)
void CFamiTrackerView::OnTimer(UINT_PTR nIDEvent)
CView::OnTimer(nIDEvent)...
wincore.cpp
11 0x00000000004f7752 in j0cc-famitracker-j0.6.1 (+0xf7751)
(0x000000000033fb90)
call esi
It seems that void CFamiTrackerView::OnTimer(UINT_PTR nIDEvent) is using too
much CPU time. Most of the CPU load occurs in CView::OnTimer(nIDEvent) and
subfunctions (which draw the main screen).
----------
## 503467
famitracker.cpp:757
BOOL CFamiTrackerApp::OnIdle(LONG lCount) // // //
if (CWinApp::OnIdle(lCount))
7 0x00000000004196de in j0cc-famitracker-j0.6.1 (+0x196dd)
(0x000000000033fe3c)
thrdcore.cpp
8 0x0000000000503467 in j0cc-famitracker-j0.6.1 (+0x103466)
(0x000000000033fe5c)
It seems that BOOL CFamiTrackerApp::OnIdle(LONG lCount) is using too much CPU
time. Most of the CPU load occurs in (CWinApp::OnIdle(lCount)). According to
`perf report`, CWinApp::OnIdle calls GetTopWindow, GetWindow, and a deep stack
leading to CallWindowProcA.
full stacktraces with partial .pdb labeling at
https://gist.github.com/jimbo1qaz/58a8462e9607375b0b9948299fd266a2
Should I share the perf.data file?
------------
I suspect CFamiTrackerView::OnTimer (overrides CView::OnTimer), and
CFamiTrackerApp::OnIdle (overrides CWinApp::OnIdle) are being called too often.
I may have to recompile on Windows, add a print statement in both functions,
and compare the rate of output in Windows vs Linux VM.
Turns out winedbg was unnecessary, the `perf report` addresses are fully valid
in x32dbg. (I swear the addresses were complete gibberish last time I tried
viewing in x32dbg. Maybe I viewed &stack instead of &EIP?)
------------
sidenote: running `winedbg j0CC-Famitracker-j0.6.1.exe` would crash:
> WineDbg starting on pid 00c1
> 00c2:err:module:DelayLoadFailureHook failed to delay load uxtheme.dll.IsThemeActive
> wine: Call from 0x7b43d41c to unimplemented function uxtheme.dll.IsThemeActive, aborting
> 00c2:err:module:attach_dlls "comctl32.dll" failed to initialize, aborting
> 00c2:err:module:attach_dlls Initializing dlls for L"H:\\apps\\j0cc-famitracker\\j0CC-Famitracker-j0.6.1.exe" failed, status 80000100
> Process of pid=00c1 has terminated
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list