-
-
-
-#include <mach_kdb.h>
-#if MACH_COUNTERS && MACH_KDB
-
-#include <ddb/db_output.h>
-#include <ddb/db_sym.h>
-
-#define printf kdbprintf
-
-extern void kobjserver_stats(void);
-extern void bucket_stats_print(mig_hash_t *bucket);
-
-extern void kobjserver_stats_clear(void);
-
-
-void
-kobjserver_stats_clear(void)
-{
- int i;
- for (i = 0; i < MAX_MIG_ENTRIES; i++) {
- mig_buckets[i].callcount = 0;
- }
-}
-
-void
-kobjserver_stats(void)
-{
- register unsigned int i, n = sizeof(mig_e)/sizeof(struct mig_subsystem);
- register unsigned int howmany;
- register mach_msg_id_t j, pos, nentry, range;
-
- db_printf("Kobject server call counts:\n");
- for (i = 0; i < n; i++) {
- db_printf(" ");
- db_printsym((vm_offset_t)mig_e[i], DB_STGY_ANY);
- db_printf(":\n");
- range = mig_e[i]->end - mig_e[i]->start;
- if (!mig_e[i]->start || range < 0) continue;
-
- for (j = 0; j < range; j++) {
- nentry = j + mig_e[i]->start;
- for (pos = MIG_HASH(nentry) % MAX_MIG_ENTRIES, howmany = 1;
- mig_buckets[pos].num;
- pos = ++pos % MAX_MIG_ENTRIES, howmany++) {
- if (mig_buckets[pos].num == nentry)
- bucket_stats_print(&mig_buckets[pos]);
- }
- }
- }
-}
-
-void
-bucket_stats_print(mig_hash_t *bucket)
-{
- if (bucket->callcount) {
- db_printf(" ");
- db_printsym((vm_offset_t)bucket->routine, DB_STGY_ANY);
- db_printf(" (%d):\t%d\n", bucket->num, bucket->callcount);
- }
-}
-
-
-#endif /* MACH_COUNTERS && MACH_KDB */