[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