#ifndef Prof_INC_PROF_H #define Prof_INC_PROF_H //#define Prof_ENABLED #include "prof_gather.h" #ifdef __cplusplus extern "C" { #endif /* * Prof_update * * Pass in true (1) to accumulate history info; pass * in false (0) to throw away the current frame's data */ extern void Prof_update(int record); /* * Prof_draw_gl -- display the current report via OpenGL * * You must provide a callable text-printing function. * Put the opengl state into a 2d rendering mode. * * Parameters: * -- location where top line is drawn * -- total size of display (if too small, text will overprint) * line_spacing -- how much to move sy by after each line; use a * negative value if y decreases down the screen * precision -- decimal places of precision for time data, 1..4 (try 2) * print_text -- function to display a line of text starting at the * given coordinate; best if 0,1..9 are fixed-width * text_width -- a function that computes the pixel-width of * a given string before printing. you can fake with a * simple approximation of width('0')*strlen(str) * * to avoid overprinting, you can make print_text truncate long strings */ extern void Prof_draw_gl(float sx, float sy, float width, float height, float line_spacing, int precision, void (*print_text)(float x, float y, char *str), float (*text_width)(char *str)); /* * Parameters * -- origin of the graph--location of (0,0) * x_spacing -- screenspace size of each history sample; e.g. * 2.0 pixels * y_spacing -- screenspace size of one millisecond of time; * for an app with max of 20ms in any one zone, * 8.0 would produce a 160-pixel tall display, * assuming screenspace is in pixels */ extern void Prof_draw_graph_gl(float sx, float sy, float x_spacing, float y_spacing); typedef enum { Prof_SELF_TIME, Prof_HIERARCHICAL_TIME, Prof_CALL_GRAPH, } Prof_Report_Mode; extern void Prof_set_report_mode(Prof_Report_Mode e); extern void Prof_move_cursor(int delta); extern void Prof_select(void); extern void Prof_select_parent(void); extern void Prof_move_frame(int delta); extern void Prof_set_smoothing(int smoothing_mode); extern void Prof_set_frame(int frame); extern void Prof_set_cursor(int line); typedef enum { Prof_FLATTEN_RECURSION, Prof_SPREAD_RECURSION } Prof_Recursion_Mode; extern void Prof_set_recursion(Prof_Recursion_Mode e); #ifdef __cplusplus } #endif #endif // Prof_INC_PROF_H