mirror of
https://github.com/w23/xash3d-fwgs
synced 2024-12-14 21:20:26 +01:00
vk: profiler: automatic graph range
This commit is contained in:
parent
2b2e69da72
commit
af96609c04
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "crclib.h" // CRC32 for stable random colors
|
#include "crclib.h" // CRC32 for stable random colors
|
||||||
#include "xash3d_mathlib.h" // Q_min
|
#include "xash3d_mathlib.h" // Q_min
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
#define MAX_SPEEDS_MESSAGE 1024
|
#define MAX_SPEEDS_MESSAGE 1024
|
||||||
#define MAX_SPEEDS_METRICS (APROF_MAX_SCOPES + 4)
|
#define MAX_SPEEDS_METRICS (APROF_MAX_SCOPES + 4)
|
||||||
@ -39,7 +40,7 @@ typedef struct {
|
|||||||
int source_metric;
|
int source_metric;
|
||||||
|
|
||||||
int height;
|
int height;
|
||||||
int max_value;
|
int max_value; // Computed automatically every frame
|
||||||
} r_speeds_graph_t;
|
} r_speeds_graph_t;
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
@ -233,7 +234,7 @@ static void handlePause( uint32_t prev_frame_index ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int drawGraph( const r_speeds_graph_t *graph, const int frame_bar_y ) {
|
static int drawGraph( r_speeds_graph_t *const graph, const int frame_bar_y ) {
|
||||||
const float width = (float)vk_frame.width / graph->data_count;
|
const float width = (float)vk_frame.width / graph->data_count;
|
||||||
const float height_scale = (float)graph->height / graph->max_value;
|
const float height_scale = (float)graph->height / graph->max_value;
|
||||||
|
|
||||||
@ -243,8 +244,12 @@ static int drawGraph( const r_speeds_graph_t *graph, const int frame_bar_y ) {
|
|||||||
// 30fps
|
// 30fps
|
||||||
//CL_FillRGBA(0, frame_bar_y + frame_bar_y_scale * TARGET_FRAME_TIME * 2, vk_frame.width, 1, 255, 0, 0, 50);
|
//CL_FillRGBA(0, frame_bar_y + frame_bar_y_scale * TARGET_FRAME_TIME * 2, vk_frame.width, 1, 255, 0, 0, 50);
|
||||||
|
|
||||||
|
int max_value = INT_MIN;
|
||||||
for (int i = 0; i < graph->data_count; ++i) {
|
for (int i = 0; i < graph->data_count; ++i) {
|
||||||
const float value = graph->data[(graph->data_write + i) % graph->data_count];
|
int value = graph->data[(graph->data_write + i) % graph->data_count];
|
||||||
|
max_value = Q_max(max_value, value);
|
||||||
|
|
||||||
|
value = Q_min(graph->max_value, value);
|
||||||
|
|
||||||
// > 60 fps => 0, 30..60 fps -> 1..0, <30fps => 1
|
// > 60 fps => 0, 30..60 fps -> 1..0, <30fps => 1
|
||||||
//const float time = linearstep(TARGET_FRAME_TIME, TARGET_FRAME_TIME*2.f, value);
|
//const float time = linearstep(TARGET_FRAME_TIME, TARGET_FRAME_TIME*2.f, value);
|
||||||
@ -254,6 +259,8 @@ static int drawGraph( const r_speeds_graph_t *graph, const int frame_bar_y ) {
|
|||||||
CL_FillRGBA(i * width, frame_bar_y, width, value * height_scale, red, green, blue, 127);
|
CL_FillRGBA(i * width, frame_bar_y, width, value * height_scale, red, green, blue, 127);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
graph->max_value = max_value ? max_value : 1;
|
||||||
|
|
||||||
return frame_bar_y + graph->height; // frame_bar_y_scale * TARGET_FRAME_TIME * 2;
|
return frame_bar_y + graph->height; // frame_bar_y_scale * TARGET_FRAME_TIME * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -435,19 +442,9 @@ static void speedsGraphAdd( void ) {
|
|||||||
r_speeds_graph_t *const graph = g_speeds.graphs + metric->graph_index;
|
r_speeds_graph_t *const graph = g_speeds.graphs + metric->graph_index;
|
||||||
|
|
||||||
// TODO make these customizable
|
// TODO make these customizable
|
||||||
graph->data_count = 60;
|
graph->data_count = 256;
|
||||||
graph->height = 100 * g_speeds.font_metrics.scale;
|
graph->height = 100 * g_speeds.font_metrics.scale;
|
||||||
switch (metric->type) {
|
graph->max_value = 1; // Will be computed automatically on first frame
|
||||||
case kSpeedsMetricCount:
|
|
||||||
graph->max_value = 20;
|
|
||||||
break;
|
|
||||||
case kSpeedsMetricBytes:
|
|
||||||
graph->max_value = 1024*1024;
|
|
||||||
break;
|
|
||||||
case kSpeedsMetricMicroseconds:
|
|
||||||
graph->max_value = TARGET_FRAME_TIME * 2 * 1000;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT(!graph->data);
|
ASSERT(!graph->data);
|
||||||
graph->data = Mem_Malloc(vk_core.pool, graph->data_count * sizeof(float));
|
graph->data = Mem_Malloc(vk_core.pool, graph->data_count * sizeof(float));
|
||||||
|
Loading…
Reference in New Issue
Block a user