mirror of
https://github.com/hermitcore/libhermit.git
synced 2025-03-09 00:00:03 +01:00
xray: implement frame labeling
This commit is contained in:
parent
341d1f39d2
commit
91603343b0
5 changed files with 59 additions and 24 deletions
|
@ -277,7 +277,7 @@ void reference(char *name, void (*refer)(void)) {
|
|||
int k;
|
||||
double start;
|
||||
|
||||
XRayAnnotate("name='%s'", name);
|
||||
XRayLabelFrame(name);
|
||||
|
||||
// Calculate the required number of innerreps
|
||||
innerreps = getinnerreps(refer);
|
||||
|
@ -322,7 +322,7 @@ void benchmark(char *name, void (*test)(void))
|
|||
|
||||
intitest(name);
|
||||
|
||||
XRayAnnotate("name='%s'", name);
|
||||
XRayLabelFrame(name);
|
||||
|
||||
for (k=0; k<=outerreps; k++) {
|
||||
start = getclock();
|
||||
|
|
|
@ -68,59 +68,59 @@ int main(int argc, char **argv) {
|
|||
benchmark("PARALLEL", &testpr);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* TEST FOR */
|
||||
/* TEST FOR */
|
||||
XRayStartFrame(trace);
|
||||
benchmark("FOR", &testfor);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* TEST PARALLEL FOR */
|
||||
/* TEST PARALLEL FOR */
|
||||
XRayStartFrame(trace);
|
||||
benchmark("PARALLEL FOR", &testpfor);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* TEST BARRIER */
|
||||
/* TEST BARRIER */
|
||||
XRayStartFrame(trace);
|
||||
benchmark("BARRIER", &testbar);
|
||||
benchmark("BARRIER", &testbar);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* TEST SINGLE */
|
||||
/* TEST SINGLE */
|
||||
XRayStartFrame(trace);
|
||||
benchmark("SINGLE", &testsing);
|
||||
benchmark("SINGLE", &testsing);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* TEST CRITICAL*/
|
||||
/* TEST CRITICAL*/
|
||||
XRayStartFrame(trace);
|
||||
benchmark("CRITICAL", &testcrit);
|
||||
benchmark("CRITICAL", &testcrit);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* TEST LOCK/UNLOCK */
|
||||
/* TEST LOCK/UNLOCK */
|
||||
XRayStartFrame(trace);
|
||||
benchmark("LOCK/UNLOCK", &testlock);
|
||||
benchmark("LOCK/UNLOCK", &testlock);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* TEST ORDERED SECTION */
|
||||
/* TEST ORDERED SECTION */
|
||||
XRayStartFrame(trace);
|
||||
benchmark("ORDERED", &testorder);
|
||||
benchmark("ORDERED", &testorder);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* GENERATE NEW REFERENCE TIME */
|
||||
/* GENERATE NEW REFERENCE TIME */
|
||||
XRayStartFrame(trace);
|
||||
reference("reference time 2", &referatom);
|
||||
reference("reference time 2", &referatom);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* TEST ATOMIC */
|
||||
/* TEST ATOMIC */
|
||||
XRayStartFrame(trace);
|
||||
benchmark("ATOMIC", &testatom);
|
||||
benchmark("ATOMIC", &testatom);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* GENERATE NEW REFERENCE TIME */
|
||||
/* GENERATE NEW REFERENCE TIME */
|
||||
XRayStartFrame(trace);
|
||||
reference("reference time 3", &referred);
|
||||
reference("reference time 3", &referred);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
/* TEST REDUCTION (1 var) */
|
||||
/* TEST REDUCTION (1 var) */
|
||||
XRayStartFrame(trace);
|
||||
benchmark("REDUCTION", &testred);
|
||||
benchmark("REDUCTION", &testred);
|
||||
XRayEndFrame(trace);
|
||||
|
||||
#ifdef PARAVERTRACE
|
||||
|
|
|
@ -97,6 +97,7 @@ struct XRayTraceCapture {
|
|||
uint32_t guard3;
|
||||
struct XRayTraceBufferEntry* buffer;
|
||||
struct XRayTraceFrame frame;
|
||||
char frame_labels[XRAY_FRAME_LBL_BUFSIZE][XRAY_MAX_LABEL];
|
||||
|
||||
#ifndef XRAY_DISABLE_BROWSER_INTEGRATION
|
||||
int32_t thread_id;
|
||||
|
@ -556,7 +557,30 @@ int XRayFrameGetAnnotationCount(struct XRayTraceCapture* capture, int i) {
|
|||
void XRayFrameMakeLabel(struct XRayTraceCapture* capture,
|
||||
int counter,
|
||||
char* label) {
|
||||
snprintf(label, XRAY_MAX_LABEL, "@@@frame%d@@@", counter);
|
||||
if(counter < sizeof(capture->frame_labels) && capture->frame_labels[counter][0]) {
|
||||
snprintf(label, XRAY_MAX_LABEL, "%s", capture->frame_labels[counter]);
|
||||
} else {
|
||||
snprintf(label, XRAY_MAX_LABEL, "frame_%i", counter);
|
||||
}
|
||||
}
|
||||
void XRayLabelFrame(const char* fmt, ...)
|
||||
{
|
||||
char buffer[32];
|
||||
int r;
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
r = vsnprintf(buffer, sizeof(buffer), fmt, args);
|
||||
if(r != 0) {
|
||||
const int n = XRayFrameGetHead(g_xray_capture);
|
||||
if(n < sizeof(g_xray_capture->frame_labels)) {
|
||||
strcpy(g_xray_capture->frame_labels[n], buffer);
|
||||
} else {
|
||||
puts("XRay: Not enough entries in frame label buffer");
|
||||
puts(" Add -DXRAY_FRAME_LBL_BUFSIZE=[n] to your CFLAGS");
|
||||
}
|
||||
}
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
|
||||
|
@ -620,6 +644,11 @@ void XRayStartFrame(struct XRayTraceCapture* capture) {
|
|||
GTSC(capture->frame.entry[i].start_tsc);
|
||||
g_xray_capture = capture;
|
||||
|
||||
// initialize frame label
|
||||
if(i < sizeof(capture->frame_labels)) {
|
||||
capture->frame_labels[i][0] = 0;
|
||||
}
|
||||
|
||||
#ifndef XRAY_DISABLE_BROWSER_INTEGRATION
|
||||
capture->frame.entry[i].start_time = XRayGenerateTimestampsNow();
|
||||
#endif
|
||||
|
|
|
@ -51,6 +51,7 @@ XRAY_NO_INSTRUMENT struct XRayTraceCapture* XRayInit(int stack_size,
|
|||
XRAY_NO_INSTRUMENT void XRayShutdown(struct XRayTraceCapture* capture);
|
||||
XRAY_NO_INSTRUMENT void XRayStartFrame(struct XRayTraceCapture* capture);
|
||||
XRAY_NO_INSTRUMENT void XRayEndFrame(struct XRayTraceCapture* capture);
|
||||
XRAY_NO_INSTRUMENT void XRayLabelFrame(const char* fmt, ...);
|
||||
XRAY_NO_INSTRUMENT void XRaySetAnnotationFilter(
|
||||
struct XRayTraceCapture* capture, uint32_t filter);
|
||||
XRAY_NO_INSTRUMENT void XRaySaveReport(struct XRayTraceCapture* capture,
|
||||
|
@ -95,6 +96,8 @@ inline struct XRayTraceCapture* XRayInit(int stack_size,
|
|||
inline void XRayShutdown(struct XRayTraceCapture* capture) {}
|
||||
inline void XRayStartFrame(struct XRayTraceCapture* capture) {}
|
||||
inline void XRayEndFrame(struct XRayTraceCapture* capture) {}
|
||||
inline void XRayLabelFrame(const char* fmt, ...) {}
|
||||
|
||||
inline void XRaySetAnnotationFilter(struct XRayTraceCapture* capture,
|
||||
uint32_t filter) {}
|
||||
inline void XRaySaveReport(struct XRayTraceCapture* capture,
|
||||
|
|
|
@ -38,7 +38,7 @@ extern "C" {
|
|||
#define XRAY_SYMBOL_TABLE_MAX_RATIO (0.66f)
|
||||
#define XRAY_LINE_SIZE (1024)
|
||||
#define XRAY_MAX_FRAMES (60)
|
||||
#define XRAY_MAX_LABEL (64)
|
||||
#define XRAY_MAX_LABEL (32)
|
||||
#define XRAY_DEFAULT_SYMBOL_TABLE_SIZE (4096)
|
||||
#define XRAY_SYMBOL_POOL_NODE_SIZE (1024)
|
||||
#define XRAY_GUARD_VALUE_0x12345678 (0x12345678)
|
||||
|
@ -197,6 +197,9 @@ XRAY_NO_INSTRUMENT struct XRayTimestampPair XRayFrameGetEndTimestampPair(
|
|||
XRAY_NO_INSTRUMENT struct XRayTimestampPair XRayGenerateTimestampsNow(void);
|
||||
#endif
|
||||
|
||||
#ifndef XRAY_FRAME_LBL_BUFSIZE
|
||||
#define XRAY_FRAME_LBL_BUFSIZE 16
|
||||
#endif
|
||||
|
||||
#endif /* defined(XRAY) */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue