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