cgv
Loading...
Searching...
No Matches
performance_monitor.h
1#pragma once
2
3#include <cgv/render/color_map.h>
5#include <cgv/utils/stopwatch.h>
6#include <cgv_app/themed_canvas_overlay.h>
7#include <cgv_g2d/generic_2d_renderer.h>
8#include <cgv_g2d/msdf_text_geometry.h>
9
10#include "lib_begin.h"
11
12namespace cgv {
13namespace app {
14
16protected:
18 int padding = 0;
19 ivec2 total_size = { 0 };
20
21 // dependent members
22 cgv::g2d::irect content_rect;
23 cgv::g2d::irect plot_rect;
24
25 void update(const ivec2& parent_size) {
26
27 content_rect.position = ivec2(padding, padding);
28 content_rect.size = total_size - 2 * padding;
29
30 plot_rect = content_rect;
31 plot_rect.size.y() = 30;
32 }
33 } layout;
34
36 struct {
38 bool enabled = true;
40 bool enabled_only_when_visible = false;
44 unsigned total_frame_count = 0u;
46 unsigned interval_frame_count = 0u;
48 double interval = 0.25;
50 double last_seconds_since_start = 0.0;
52 double delta_time = 0.0;
54 double running_time = 0.0;
56 double avg_fps = 0.0;
57
58 void reset() {
59 timer.restart();
60 total_frame_count = 0u;
61 interval_frame_count = 0u;
62 last_seconds_since_start = 0.0;
63 running_time = 0.0;
64 }
65 } monitor;
66
67 bool invert_color = false;
68 bool show_plot = true;
69
70 cgv::g2d::generic_2d_renderer bar_renderer;
71 DEFINE_GENERIC_RENDER_DATA_CLASS(bar_geometry, 3, vec2, position, vec2, size, rgb, color);
72 bar_geometry bars;
73
74 // general appearance
75 cgv::g2d::shape2d_style border_style, bar_style;
76 cgv::g2d::line2d_style line_style;
77 cgv::render::color_map plot_color_map;
78
79 // text appearance
80 cgv::g2d::text2d_style text_style, tick_text_style;
81 cgv::g2d::msdf_text_geometry static_text_geometry;
82 cgv::g2d::msdf_text_geometry dynamic_text_geometry;
83
84 void init_styles() override;
85 void create_static_texts(const cgv::render::context& ctx);
86 void create_dynamic_texts(const cgv::render::context& ctx);
87 void update_dynamic_texts(const cgv::render::context& ctx);
88 void update_plot();
89
90 void on_visibility_change() override;
91 void create_gui_impl() override;
92
93public:
95 std::string get_type_name() const override { return "performance_monitor"; }
96
97 void clear(cgv::render::context& ctx) override;
98
99 void handle_member_change(const cgv::utils::pointer_test& m) override;
100
101 bool init(cgv::render::context& ctx) override;
102 void init_frame(cgv::render::context& ctx) override;
103 void draw_content(cgv::render::context& ctx) override;
104 void after_finish(cgv::render::context& ctx) override;
105
106 void set_invert_color(bool flag);
107
108 void enable_monitoring(bool enabled);
109 void enable_monitoring_only_when_visible(bool enabled);
110};
111
112typedef cgv::data::ref_ptr<performance_monitor> performance_monitor_ptr;
113
114}
115}
116
117#include <cgv/config/lib_end.h>
std::string get_type_name() const override
overload to return the type name of this object. By default the type interface is queried over get_ty...
cgv::utils::stopwatch timer
timer to count elapsed time
reference counted pointer, which can work together with types that are derived from ref_counted,...
Definition ref_ptr.h:160
static cgv::type::uint32_type size()
return number of elements
Definition fvec.h:179
base class for all drawables, which is independent of the used rendering API.
Definition context.h:621
A trivial stop watch class for time measurement.
Definition stopwatch.h:35
double restart()
restart timer and return time elapsed until restart
Definition stopwatch.cxx:75
Helper functions to convert numeric types into strings using std streams.
the cgv namespace
Definition print.h:11