133 lines
3.6 KiB
Plaintext
133 lines
3.6 KiB
Plaintext
#if HAS_IPROF == false {
|
|
|
|
init_profiler :: () {}
|
|
|
|
draw_profiler :: () {}
|
|
|
|
profiler_update :: () {}
|
|
|
|
tick_profiler :: () {}
|
|
|
|
} else {
|
|
#scope_file
|
|
|
|
iprof_conf : __Iprof.Config;
|
|
iprof_font : Ui_Font;
|
|
|
|
Profiler_Mode :: enum {
|
|
CLOSED;
|
|
TEXT_ONLY;
|
|
FULL;
|
|
}
|
|
|
|
profiler_mode : Profiler_Mode = .CLOSED;
|
|
|
|
draw_text :: (x: float, y: float, text: string, color: Vector4) {
|
|
prepare_text(*iprof_font, text);
|
|
draw_prepared_text(*iprof_font, xx x, xx y, color);
|
|
}
|
|
|
|
draw_line :: (p0: Vector2, p1: Vector2, p2: Vector2, p3: Vector2, color: Vector4) {
|
|
immediate_quad(p0, p1, p2, p3, color);
|
|
}
|
|
|
|
text_width :: (text: string) -> float {
|
|
if text.count < 1 {
|
|
return 0;
|
|
}
|
|
|
|
fonsSetFont(state.fons, state.font_default.fons_font);
|
|
fonsSetSize(state.fons, xx iprof_font.character_height);
|
|
w := fonsTextBounds(state.fons, 0.0, 0.0, text.data, text.data + text.count, null);
|
|
return cast(float) w;
|
|
}
|
|
|
|
draw_rectangle_prof :: (x0: float, y0: float, x1: float, y1: float, color: Vector4) {
|
|
r := GR.Rect.{x0,y0,x1-x0,y1-y0};
|
|
draw_rectangle(r, color);
|
|
}
|
|
|
|
graph_begin :: (x: float, y: float, width: float, height: float) {
|
|
return;
|
|
}
|
|
|
|
graph_end :: (x: float, y: float, width: float, height: float) {
|
|
return;
|
|
}
|
|
|
|
|
|
iprof_cycle_active_report_mode :: () {
|
|
iprof_active_report_mode := __Iprof.displayed_quantity;
|
|
if iprof_active_report_mode == .SELF_TIME __Iprof.set_report_mode(.HIERARCHICAL_TIME);
|
|
else if iprof_active_report_mode == .HIERARCHICAL_TIME __Iprof.set_report_mode(.CALL_COUNT);
|
|
else if iprof_active_report_mode == .CALL_COUNT __Iprof.set_report_mode(.SELF_TIME);
|
|
else if iprof_active_report_mode == .CALL_GRAPH __Iprof.set_report_mode(.SELF_TIME);
|
|
else assert(false);
|
|
}
|
|
|
|
iprof_paused : bool = true;
|
|
|
|
#scope_export
|
|
|
|
init_profiler :: () {
|
|
iprof_font = state.font_default;
|
|
iprof_font.character_height = 20;
|
|
ui_init_font_fields(*iprof_font);
|
|
iprof_conf.font_character_height = xx (iprof_font.character_height + 2);
|
|
iprof_conf.line_spacing = 23;
|
|
iprof_conf.draw_text = draw_text;
|
|
iprof_conf.text_width = text_width;
|
|
iprof_conf.draw_rectangle = draw_rectangle_prof;
|
|
iprof_conf.draw_line = draw_line;
|
|
iprof_conf.graph_begin = graph_begin;
|
|
iprof_conf.graph_end = graph_end;
|
|
}
|
|
|
|
draw_profiler :: () {
|
|
if profiler_mode == .CLOSED then return;
|
|
w,h := get_window_size();
|
|
draw_rectangle(.{xx(w-700), 0, 700, xx(h) }, .{0,0,0,1});
|
|
__Iprof.draw(xx (w - 700), 20,699,xx h, *iprof_conf);
|
|
if profiler_mode == .FULL {
|
|
__Iprof.draw_graph(0,xx h,xx(w-700),200, *iprof_conf);
|
|
}
|
|
}
|
|
|
|
profiler_update :: () {
|
|
if profiler_mode == .CLOSED then return;
|
|
__Iprof.update(iprof_paused);
|
|
}
|
|
|
|
tick_profiler :: () {
|
|
if input_button_states[Key_Code.F2] & .START {
|
|
if profiler_mode == .CLOSED then profiler_mode = .TEXT_ONLY;
|
|
else if profiler_mode == .TEXT_ONLY then profiler_mode = .FULL;
|
|
else if profiler_mode == .FULL then profiler_mode = .CLOSED;
|
|
}
|
|
if profiler_mode == .CLOSED then return;
|
|
if input_button_states[Key_Code.ARROW_UP] & .START {
|
|
__Iprof.move_cursor(-1);
|
|
}
|
|
if input_button_states[Key_Code.ARROW_DOWN] & .START {
|
|
__Iprof.move_cursor(1);
|
|
}
|
|
if input_button_states[Key_Code.ARROW_LEFT] & .START {
|
|
__Iprof.select_parent();
|
|
}
|
|
if input_button_states[Key_Code.ARROW_RIGHT] & .START {
|
|
__Iprof.select();
|
|
}
|
|
if input_button_states[Key_Code.SPACEBAR] & .START {
|
|
iprof_cycle_active_report_mode();
|
|
}
|
|
if input_button_states[Key_Code.ENTER] & .START {
|
|
iprof_paused = !iprof_paused;
|
|
}
|
|
if input_button_states[Key_Code.MOUSE_BUTTON_RIGHT] & .START {
|
|
__Iprof.graph_select_sample();
|
|
}
|
|
|
|
__Iprof.set_cursor_screen_coordinates(xx input_mouse_x, xx input_mouse_y);
|
|
}
|
|
}
|