File indexing completed on 2024-05-12 17:02:07

0001 /*
0002     SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "renderjournal.h"
0008 
0009 namespace KWin
0010 {
0011 
0012 RenderJournal::RenderJournal()
0013 {
0014 }
0015 
0016 void RenderJournal::beginFrame()
0017 {
0018     m_timer.start();
0019 }
0020 
0021 void RenderJournal::endFrame()
0022 {
0023     std::chrono::nanoseconds duration(m_timer.nsecsElapsed());
0024     if (m_log.count() >= m_size) {
0025         m_log.dequeue();
0026     }
0027     m_log.enqueue(duration);
0028 }
0029 
0030 std::chrono::nanoseconds RenderJournal::minimum() const
0031 {
0032     auto it = std::min_element(m_log.constBegin(), m_log.constEnd());
0033     return it != m_log.constEnd() ? (*it) : std::chrono::nanoseconds::zero();
0034 }
0035 
0036 std::chrono::nanoseconds RenderJournal::maximum() const
0037 {
0038     auto it = std::max_element(m_log.constBegin(), m_log.constEnd());
0039     return it != m_log.constEnd() ? (*it) : std::chrono::nanoseconds::zero();
0040 }
0041 
0042 std::chrono::nanoseconds RenderJournal::average() const
0043 {
0044     if (m_log.isEmpty()) {
0045         return std::chrono::nanoseconds::zero();
0046     }
0047 
0048     std::chrono::nanoseconds result = std::chrono::nanoseconds::zero();
0049     for (const std::chrono::nanoseconds &entry : m_log) {
0050         result += entry;
0051     }
0052 
0053     return result / m_log.count();
0054 }
0055 
0056 } // namespace KWin