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