From 89228b069741094d895d951c690fd0a6e893cd12 Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Mon, 18 Jun 2018 10:11:14 -0700 Subject: [PATCH] fix high CPU usage under wxgtk2 #260 When using GTK2, call DrawArea(dc) instead of GetWindow()->Refresh(), this prevents glib from using huge amounts of CPU (as discovered by @retro-wertz .) Switching video drivers sometimes crashes the app, the DrawArea() call is as safe as possible, the problem is elsewhere. --- src/wx/panel.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/wx/panel.cpp b/src/wx/panel.cpp index 9ce0b2f9..29cd9c28 100644 --- a/src/wx/panel.cpp +++ b/src/wx/panel.cpp @@ -1816,8 +1816,20 @@ void DrawingPanelBase::DrawArea(uint8_t** data) } } - // next, draw the frame (queue a PaintEv) + // next, draw the frame (queue a PaintEv) Refresh must be used under + // Wayland or nothing is drawn, however it causes high CPU usage with GTK2, + // so use the old method in that case +#ifdef __WXGTK3__ GetWindow()->Refresh(); +#else + { + DrawingPanelBase* panel = wxGetApp().frame->GetPanel()->panel; + if (panel) { + wxClientDC dc(panel->GetWindow()); + panel->DrawArea(dc); + } + } +#endif // finally, draw on-screen text using wx method, if possible // this method flickers too much right now