kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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 }