as for the profiler, here is an exeirpt of profiler output (gprof)
Code:
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
64.00 1237.48 1237.48 14718573 0.00 0.00 EntityList::AICheckCloseArrgo(Mob*, float, float)
11.85 1466.65 229.17 3970091636 0.00 0.00 LinkedListIterator<Mob*>::Advance()
5.73 1577.41 110.76 3985303690 0.00 0.00 LinkedListIterator<Mob*>::MoreElements()
2.92 1633.95 56.54 1261006787 0.00 0.00 Timer::Check(bool)
2.21 1676.74 42.79 128348838 0.00 0.00 Mob::AI_Process()
1.84 1712.26 35.51 128348838 0.00 0.00 NPC::Process()
1.43 1739.93 27.68 344 0.08 0.08 LinkedListIterator<Mob*>::RemoveCurrent(bool)
1.38 1766.52 26.59 3970146525 0.00 0.00 LinkedListIterator<Mob*>::GetData()
0.92 1784.30 17.78 65021129 0.00 0.00 NPC::GetFactionCon(Mob*)
0.90 1801.78 17.48 128348838 0.00 0.00 Mob::SpellProcess()
0.76 1816.52 14.73 65021473 0.00 0.00 Mob::IsInvisible(Mob*)
...
you can get the full file (incluing call graph) and more examples at :
http://perso.wanadoo.fr/afou/khalzed...qzone.gmon.out
http://perso.wanadoo.fr/afou/khalzed...qzone.gmon.out
http://perso.wanadoo.fr/afou/khalzed...qzone.gmon.out
http://perso.wanadoo.fr/afou/khalzed...dzone.gmon.out
http://perso.wanadoo.fr/afou/khalzed...dzone.gmon.out
or all in a pack :
http://perso.wanadoo.fr/afou/khalzed...e-files.tar.gz
These are short runs, with one player if any.
If you don't bother to read, caching as it is now gives cpu load a rough 50% down, depending on the zone (AICheckCloseArrgo cumulated accounts for between 60-70% of non-cached version, divided by 10 or so in the cached version).
'm not sure about the oddity of a hash or vector class, instead of inline manipulation
'don't know about bounding boxes extensions. It's like making a function recursive to non recursive, or vice-versa. It's always possible, but .. i'll work in it afterwards