#include "UI.h" #include "cpuload.h" #include "debug.h" #include "log.h" #include #include #include #include using namespace std::chrono_literals; UI::UI(): m_main_loops{}, m_main_loops_checkpoint{}, m_main_loops_timestamp{}, m_active_sensing_timestamp{} { } int UI::get_main_loops_per_second() { // calculate result std::chrono::time_point now = clock_type::now(); uint64_t diff_ms = std::chrono::duration_cast(now - m_main_loops_timestamp).count(); uint64_t loops_per_second = (diff_ms == 0 || m_main_loops_checkpoint == 0) ? 0 : ((m_main_loops - m_main_loops_checkpoint) * 1000 / diff_ms); // update state m_main_loops_timestamp = now; m_main_loops_checkpoint = m_main_loops; return loops_per_second; } void UI::draw() { std::vector cpuloads = get_cpu_loads(); int main_loops_per_second = get_main_loops_per_second(); bool active_sensing_detected = (clock_type::now() - m_active_sensing_timestamp) < 2s; // clear screen std::cout << "\x1B[2J\x1B[H"; //std::cout << std::endl; std::cout << "- -- BPM +" << std::endl; std::cout << "Mode: Click __/__ (Clock Internal)" << std::endl; std::cout << std::endl; std::cout << "Status:" << std::endl; std::cout << " CPU:"; for (auto& i: cpuloads) { std::cout << fmt::format(" {:2}%", i); } int max = *std::max_element(cpuloads.begin(), cpuloads.end()); std::cout << fmt::format(", max. {:2}%", max) << std::endl; std::cout << " Notes/Channels: -- -- -- ... (Choose)" << std::endl; std::cout << " Timestamp: ------" << std::endl; std::cout << fmt::format(" Active sensing: {}", active_sensing_detected) << std::endl; std::cout << " Clock: ____ BPM" << std::endl; std::cout << " Click: ____ BPM" << std::endl; std::cout << " Internal: ____ BPM" << std::endl; std::cout << fmt::format(" Main loops/s: {}", main_loops_per_second) << std::endl; std::cout << "Log:" << std::endl; std::cout << log_cout.get_log() << std::endl; } void UI::count_main_loops() { ++m_main_loops; debug_cout << "DEBUG:" << m_main_loops << std::endl; } void UI::slot_active_sensing() { m_active_sensing_timestamp = clock_type::now(); }