profiler.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include <stdbool.h>
  3. #include <stdint.h>
  4. enum stat_name {
  5. S_COMPILE,
  6. S_COMPILE_SUCCESS,
  7. S_COMPILE_CUT_OFF_AT_END_OF_PAGE,
  8. S_COMPILE_WITH_LOOP_SAFETY,
  9. S_COMPILE_BASIC_BLOCK,
  10. S_COMPILE_ENTRY_POINT,
  11. S_CACHE_MISMATCH,
  12. S_RUN_INTERPRETED,
  13. S_RUN_INTERPRETED_PENDING,
  14. S_RUN_INTERPRETED_NEAR_END_OF_PAGE,
  15. S_RUN_INTERPRETED_DIFFERENT_STATE,
  16. S_RUN_INTERPRETED_STEPS,
  17. S_RUN_FROM_CACHE,
  18. S_RUN_FROM_CACHE_STEPS,
  19. S_TRIGGER_CPU_EXCEPTION,
  20. S_SAFE_READ32_FAST,
  21. S_SAFE_READ32_SLOW_PAGE_CROSSED,
  22. S_SAFE_READ32_SLOW_NOT_VALID,
  23. S_SAFE_READ32_SLOW_NOT_USER,
  24. S_SAFE_READ32_SLOW_IN_MAPPED_RANGE,
  25. S_SAFE_WRITE32_FAST,
  26. S_SAFE_WRITE32_SLOW_PAGE_CROSSED,
  27. S_SAFE_WRITE32_SLOW_NOT_VALID,
  28. S_SAFE_WRITE32_SLOW_NOT_USER,
  29. S_SAFE_WRITE32_SLOW_IN_MAPPED_RANGE,
  30. S_SAFE_WRITE32_SLOW_READ_ONLY,
  31. S_SAFE_WRITE32_SLOW_HAS_CODE,
  32. S_DO_RUN,
  33. S_DO_MANY_CYCLES,
  34. S_CYCLE_INTERNAL,
  35. S_INVALIDATE_PAGE,
  36. S_INVALIDATE_CACHE_ENTRY,
  37. S_NONFAULTING_OPTIMIZATION,
  38. S_CLEAR_TLB,
  39. S_FULL_CLEAR_TLB,
  40. S_TLB_FULL,
  41. S_TLB_GLOBAL_FULL,
  42. };
  43. #define PROFILER_STAT_COUNT (S_TLB_GLOBAL_FULL - S_COMPILE + 1)
  44. struct profiler_stat {
  45. int32_t count;
  46. };
  47. extern struct profiler_stat profiler_stat_arr[PROFILER_STAT_COUNT];
  48. void profiler_init(void);
  49. void profiler_stat_increment(enum stat_name stat);
  50. void profiler_stat_increment_by(enum stat_name stat, int32_t by);
  51. int32_t profiler_stat_get(enum stat_name stat);
  52. // JS import
  53. extern double get_time(void);