mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 13:08:50 +02:00
UI: Greatly improve main window repaint performance
The VolumeMeter widgets were apparently being drawn as transparent widgets, which meant that it was necessary to redraw everything under the widgets in order to properly draw the widgets, so the entire mixer section of the window was being redrawn every time the meters updated. This caused a significant perf hit when the only thing wanted/desired was just to update the meters. This was more noticeable after changing the audio meter update rate to 60hz from 30hz. The fix is to simply mark them as opaque widgets, and paint the background ourselves rather than rely on what's under the window. CPU perf for painting the main window has been vastly improved because of this; CPU usage of Qt in the main window is now reduced by at least half of what it was, if not more.
This commit is contained in:
parent
884c43f8c0
commit
f4f2d383b1
@ -531,6 +531,8 @@ VolumeMeter::VolumeMeter(QWidget *parent, obs_volmeter_t *obs_volmeter,
|
||||
bool vertical)
|
||||
: QWidget(parent), obs_volmeter(obs_volmeter), vertical(vertical)
|
||||
{
|
||||
setAttribute(Qt::WA_OpaquePaintEvent, true);
|
||||
|
||||
// Use a font that can be rendered small.
|
||||
tickFont = QFont("Arial");
|
||||
tickFont.setPixelSize(7);
|
||||
@ -1041,6 +1043,11 @@ void VolumeMeter::paintEvent(QPaintEvent *event)
|
||||
|
||||
// Actual painting of the widget starts here.
|
||||
QPainter painter(this);
|
||||
|
||||
// Paint window background color (as widget is opaque)
|
||||
QColor background = palette().color(QPalette::ColorRole::Window);
|
||||
painter.fillRect(rect, background);
|
||||
|
||||
if (vertical) {
|
||||
// Invert the Y axis to ease the math
|
||||
painter.translate(0, height);
|
||||
|
Loading…
Reference in New Issue
Block a user