From 26f0adefa8c6eee4a5088ef899183f8499153879 Mon Sep 17 00:00:00 2001 From: kamel5 <vdr.kamel5 (at) gmx (dot) net> Date: Fri, 11 Jun 2021 16:35:49 +0200 Subject: Optimize Flush in display volume Changes in Flush(): This ensures that only one flush is active when the thread is running. Changes in Acton(): Since the first Pixmap::Lock() takes so much longer than the following, the first Pixmap::Lock() was moved before the while loop. This makes the fade-in softer. --- displayvolume.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/displayvolume.c b/displayvolume.c index 4271fac..78c6e83 100644 --- a/displayvolume.c +++ b/displayvolume.c @@ -129,6 +129,8 @@ tColor cNopacityDisplayVolume::DrawProgressbarBackground(int left, int top, int } void cNopacityDisplayVolume::Flush(void) { + if (Running()) + return; if (initial) if (FadeTime) Start(); @@ -137,18 +139,22 @@ void cNopacityDisplayVolume::Flush(void) { } void cNopacityDisplayVolume::Action(void) { + uint64_t First = cTimeMs::Now(); + cPixmap::Lock(); + cPixmap::Unlock(); uint64_t Start = cTimeMs::Now(); + dsyslog ("skinnopacity: First Lock(): %lims \n", Start - First); while (Running()) { uint64_t Now = cTimeMs::Now(); - cPixmap::Lock(); double t = std::min(double(Now - Start) / FadeTime, 1.0); int Alpha = t * ALPHA_OPAQUE; + cPixmap::Lock(); pixmapBackground->SetAlpha(Alpha); pixmapProgressBar->SetAlpha(Alpha); pixmapLabel->SetAlpha(Alpha); - cPixmap::Unlock(); if (Running()) osd->Flush(); + cPixmap::Unlock(); int Delta = cTimeMs::Now() - Now; if (Running() && (Delta < FrameTime)) cCondWait::SleepMs(FrameTime - Delta); -- cgit v1.2.3