Skip to content

Commit

Permalink
Implement basic performance monitor.
Browse files Browse the repository at this point in the history
  • Loading branch information
wojciech-graj committed Aug 19, 2022
1 parent 8fb4260 commit dd4fdc1
Show file tree
Hide file tree
Showing 7 changed files with 159 additions and 2 deletions.
82 changes: 80 additions & 2 deletions res/ui/ui.glade
Original file line number Diff line number Diff line change
Expand Up @@ -1489,7 +1489,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">0</property>
</packing>
</child>
<child>
Expand All @@ -1505,7 +1505,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">1</property>
</packing>
</child>
<child>
Expand All @@ -1518,6 +1518,84 @@
<property name="draw-indicator">True</property>
<signal name="toggled" handler="on_setting_toggled" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">none</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="left-padding">12</property>
<child>
<!-- n-columns=2 n-rows=2 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">FPS: </property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Satellites: </property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="fps">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">-</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="num_satellites">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">-</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Performance</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
Expand Down
2 changes: 2 additions & 0 deletions src/entity/satellite.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include "download.h"
#include "error.h"
#include "gfx.h"
#include "perf.h"
#include "phys.h"
#include "shader.h"
#include "status.h"
Expand Down Expand Up @@ -279,6 +280,7 @@ void satellites_get_sync(void)
satellites_renderable = FALSE;
status_pop(STAT_FETCHING_SAT);
catalog_satellites_fill(satellites, n_satellites);
perf_set_num_satellites(n_satellites);
}

void satellites_phys_sync(void)
Expand Down
2 changes: 2 additions & 0 deletions src/gfx/gfx.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "camera.h"
#include "error.h"
#include "info.h"
#include "perf.h"
#include "render.h"
#include "thread.h"
#include "timemgr.h"
Expand Down Expand Up @@ -53,6 +54,7 @@ gboolean on_glarea_render(GtkGLArea *area, GdkGLContext *context, gpointer user_
render_process();
timemgr_tic();
info_tic();
perf_tic();
#ifndef NO_SATELLITE
thread_join_if_finished(THRD_SATELLITES_GET);
#endif
Expand Down
55 changes: 55 additions & 0 deletions src/ui/perf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#include "perf.h"

#include "satellite.h"
#include "system.h"

#define NUM_FRAMETIMES 30

static gboolean visible = FALSE;

static GtkLabel *fps_lbl;
static GtkLabel *num_satellites_lbl;

static gint64 prev_epoch_ms;
static int frametimes[NUM_FRAMETIMES] = { 0 };
static int frametime_total = 0;
static unsigned frame_idx = 0;

void perf_init(GtkBuilder *builder)
{
fps_lbl = GTK_LABEL(gtk_builder_get_object(builder, "fps"));
num_satellites_lbl = GTK_LABEL(gtk_builder_get_object(builder, "num_satellites"));
}

void perf_set_num_satellites(unsigned num_satellites)
{
gchar *text = g_strdup_printf("%u", num_satellites);
gtk_label_set_text(num_satellites_lbl, text);
g_free(text);
}

void perf_show(void)
{
visible = TRUE;
}

void perf_hide(void)
{
visible = FALSE;
}

void perf_tic(void)
{
frametime_total -= frametimes[frame_idx];
gint64 epoch_ms = system_epoch_ms();
frametimes[frame_idx] = epoch_ms - prev_epoch_ms;
prev_epoch_ms = epoch_ms;
frametime_total += frametimes[frame_idx];
frame_idx = (frame_idx + 1) % NUM_FRAMETIMES;

if (visible) {
gchar *text = g_strdup_printf("%.1f", (NUM_FRAMETIMES * 1000.f) / frametime_total);
gtk_label_set_text(fps_lbl, text);
g_free(text);
}
}
14 changes: 14 additions & 0 deletions src/ui/perf.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ifndef __PERF_H__
#define __PERF_H__

#include "ui.h"

void perf_init(GtkBuilder *builder);

void perf_set_num_satellites(unsigned num_satellites);
void perf_tic(void);

void perf_show(void);
void perf_hide(void);

#endif /* __PERF_H__ */
4 changes: 4 additions & 0 deletions src/ui/setting.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "setting.h"

#include "perf.h"

struct Setting {
char *id;
GtkToggleButton *button;
Expand Down Expand Up @@ -36,6 +38,7 @@ void on_settings_clicked(GtkToolButton *toolbutton, gpointer user_data)
(void)toolbutton;
(void)user_data;
gtk_widget_show_all(GTK_WIDGET(window_settings));
perf_show();
}

gboolean on_window_settings_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data)
Expand All @@ -44,6 +47,7 @@ gboolean on_window_settings_delete_event(GtkWidget *widget, GdkEvent *event, gpo
(void)event;
(void)user_data;
gtk_widget_hide(GTK_WIDGET(window_settings));
perf_hide();
return TRUE;
}

Expand Down
2 changes: 2 additions & 0 deletions src/ui/ui.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "gfx.h"
#include "info.h"
#include "input.h"
#include "perf.h"
#include "render.h"
#include "setting.h"
#include "status.h"
Expand Down Expand Up @@ -70,6 +71,7 @@ void ui_init(int argc, char ***argv)
setting_init(builder);
info_init(builder);
filter_init(builder);
perf_init(builder);

gtk_builder_connect_signals(builder, NULL);

Expand Down

0 comments on commit dd4fdc1

Please sign in to comment.