cgv
Loading...
Searching...
No Matches
performance_monitor.h
1#pragma once
2
3#include <cgv/media/color_scheme.h>
5#include <cgv/utils/stopwatch.h>
6#include <cgv_g2d/generic_2d_renderer.h>
7#include <cgv_g2d/msdf_text_geometry.h>
8#include <cgv_overlay/themed_canvas_overlay.h>
9
10#include "lib_begin.h"
11
12namespace cgv {
13namespace overlay {
14
15class CGV_API performance_monitor : public themed_canvas_overlay {
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;
44 unsigned total_frame_count = 0u;
46 unsigned interval_frame_count = 0u;
48 double interval = 0.25;
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();
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;
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(cgv::data::informed_ptr ptr) 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} // namespace overlay
115} // namespace cgv
116
117#include <cgv/config/lib_end.h>
This class provides methods to test if a stored pointer points to addresses of given variables or ins...
reference counted pointer, which can work together with types that are derived from ref_counted,...
Definition ref_ptr.h:160
This class represents a continuous color scheme using an interpolator to convert continuous scalar va...
double running_time
store time of current running interval in seconds
unsigned interval_frame_count
counter for rendered frames incurrent interval
double delta_time
store time of the last rendered frame in seconds
cgv::utils::stopwatch timer
timer to count elapsed time
bool enabled
whether measuring is enabled
std::string get_type_name() const override
overload to return the type name of this object
unsigned total_frame_count
counter for rendered frames since start of measurements
bool enabled_only_when_visible
whether to enable monitoring only if the overlay is visible (uses state of enabled)
double interval
time interval for measurement averaging
double last_seconds_since_start
store total seconds since the last measuring
double avg_fps
store the average frames per second
themed_canvas_overlay()
creates an overlay in the bottom left corner with zero size using a canvas for 2d drawing
base class for all drawables, which is independent of the used rendering API.
Definition context.h:670
A trivial stop watch class for time measurement.
Definition stopwatch.h:35
Helper functions to convert numeric types into strings using std streams.
this header is dependency free
Definition print.h:11
cgv::media::color< float, cgv::media::RGB > rgb
declare rgb color type with 32 bit components
Definition color.h:896
cgv::math::fvec< int32_t, 2 > ivec2
declare type of 2d 32 bit integer vectors
Definition fvec.h:719
cgv::math::fvec< float, 2 > vec2
declare type of 2d single precision floating point vectors
Definition fvec.h:692