#include <housing.h> inherit "/cmds/base"; #define MAX 500 int last_got; mixed *data, *tot; int total(mapping *info) { int ret; mapping item; foreach(item in info) ret += item["self"]; return ret; } int cmd(string thing) { int i, j; mapping stuff; object ob; mixed foo; string ret; if(last_got < time() - 900) { data = map(objects((: !clonep($1) :)), (: ({ $1, function_profile($1) }) :)); tot = allocate(sizeof(data)); for(i=0; i<sizeof(data); i++) { tot[i] = ({ data[i][0], total(data[i][1]) }); } for(i=0; i<24; i++) { reset_eval_cost(); for (j = i; j < sizeof(tot); j++) if (tot[i][1] < tot[j][1]) { foo = tot[i]; tot[i] = tot[j]; tot[j] = foo; } } last_got = time(); } ret = ""; if(!thing) { // We could use sort_array() here, but that's an inefficient way // to get the top 10 when there are lots of objects. for (i = 0; i < 50 && i<sizeof(tot); i++) { if(tot[i][1]) ret += sprintf("%60-O %i\n", tot[i][0], tot[i][1]); } } else { ob = find_object(thing); if(!ob) return notify_fail("No such object.\n"); ret += sprintf("%30-s %10s %10s %10s\n", "function", "calls", "self", "children"); i = 0; for(j=0; j<sizeof(data); j++) if(data[j][0] == ob) { i = 1; break; } if(!i) return notify_fail("No such object in data.\n"); foreach(stuff in data[j][1]) { ret += sprintf("%30-s %10d %10d %10d\n", stuff["name"], stuff["calls"], stuff["self"], stuff["children"]); } } write("$P$Profile$P$" + ret); return 1; }