profile_test.c (3141B)
1 /* profile_test - public <kit/core.h> profiler API. */ 2 3 #include <kit/core.h> 4 #include <stdlib.h> 5 #include <string.h> 6 7 #include "lib/kit_unit.h" 8 9 static KitUnit g_u; 10 #define EXPECT(c, ...) CU_EXPECT(&g_u, c, __VA_ARGS__) 11 12 static void check_names_and_ranges(void) { 13 EXPECT(strcmp(kit_profile_scope_name(KIT_PROFILE_SCOPE_COMPILE_TU), 14 "compile.tu") == 0, 15 "builtin scope name"); 16 EXPECT(strcmp(kit_profile_counter_name(KIT_PROFILE_COUNTER_COMPILE_INPUT_BYTES), 17 "compile.input_bytes") == 0, 18 "builtin counter name"); 19 EXPECT(strcmp(kit_profile_counter_name( 20 KIT_PROFILE_COUNTER_OPT_NATIVE_EMIT_SCAVENGES), 21 "opt.native_emit.scavenges") == 0, 22 "native emit scavenger counter name"); 23 EXPECT(kit_profile_scope_name(KIT_PROFILE_SCOPE_LANG_FIRST) == NULL, 24 "language scopes are open"); 25 EXPECT(kit_profile_counter_name(KIT_PROFILE_COUNTER_EXTERNAL_FIRST) == NULL, 26 "external counters are open"); 27 } 28 29 static void check_concrete_profiler(void) { 30 KitProfiler* p; 31 KitContext ctx; 32 const char* scope_name; 33 const char* counter_name; 34 memset(&ctx, 0, sizeof ctx); 35 p = (KitProfiler*)malloc(sizeof(*p)); 36 EXPECT(p != NULL, "allocate profiler"); 37 if (!p) return; 38 39 kit_profiler_reset(NULL); 40 kit_profiler_scope_begin(NULL, KIT_PROFILE_SCOPE_COMPILE_TU); 41 kit_profiler_scope_end(NULL, KIT_PROFILE_SCOPE_COMPILE_TU); 42 kit_profiler_count(NULL, KIT_PROFILE_COUNTER_COMPILE_INPUT_BYTES, 7); 43 44 kit_profiler_reset(p); 45 ctx.profiler = p; 46 47 kit_profile_define_scope(&ctx, KIT_PROFILE_SCOPE_LANG_FIRST, "lang.test"); 48 kit_profile_define_counter(&ctx, KIT_PROFILE_COUNTER_EXTERNAL_FIRST, 49 "host.test"); 50 kit_profile_scope_begin(&ctx, KIT_PROFILE_SCOPE_COMPILE_FRONTEND); 51 kit_profile_count(&ctx, KIT_PROFILE_COUNTER_COMPILE_INPUT_BYTES, 42); 52 kit_profile_scope_end(&ctx, KIT_PROFILE_SCOPE_COMPILE_FRONTEND); 53 54 EXPECT(kit_profiler_scope_count(p, KIT_PROFILE_SCOPE_COMPILE_FRONTEND) == 1, 55 "scope call count"); 56 EXPECT(kit_profiler_counter_value(p, 57 KIT_PROFILE_COUNTER_COMPILE_INPUT_BYTES) == 58 42, 59 "counter value"); 60 EXPECT(p->depth == 0, "scope stack is balanced"); 61 scope_name = kit_profiler_scope_name(p, KIT_PROFILE_SCOPE_LANG_FIRST); 62 counter_name = 63 kit_profiler_counter_name(p, KIT_PROFILE_COUNTER_EXTERNAL_FIRST); 64 EXPECT(scope_name && strcmp(scope_name, "lang.test") == 0, 65 "defined language scope name"); 66 EXPECT(counter_name && strcmp(counter_name, "host.test") == 0, 67 "defined external counter name"); 68 69 kit_profiler_reset(p); 70 EXPECT(kit_profiler_scope_count(p, KIT_PROFILE_SCOPE_COMPILE_FRONTEND) == 0, 71 "reset clears scope counts"); 72 EXPECT(kit_profiler_counter_value(p, 73 KIT_PROFILE_COUNTER_COMPILE_INPUT_BYTES) == 74 0, 75 "reset clears counters"); 76 free(p); 77 } 78 79 int main(void) { 80 kit_unit_init(&g_u); 81 check_names_and_ranges(); 82 check_concrete_profiler(); 83 kit_unit_summary(&g_u, "profile_test"); 84 return kit_unit_status(&g_u); 85 }