// Based on Moon's freeze detector
// Added agent delta, prim delta, timestamps, slower timer repeat.

integer loudness = 0;
integer last_prims = 0;
integer last_agents = 0;

say(string msg)
{
	msg = llGetTimestamp() + ":\t" + msg;
	if (loudness == 0)
	{
		llOwnerSay(msg);
	}
	else if (loudness == 1)
	{
		llSay(0, msg);
	}
}

default
{
    state_entry()
    {
        llSetTimerEvent(0.2);
        llResetTime();
    }

    touch_start(integer total_number)
    {
        loudness = ++loudness % 2;
        if (loudness == 0)
        {
            llOwnerSay("Output now on OwnerSay");
        }
        else if (loudness == 1)
        {
            llOwnerSay("Output now on Say");
        }     
    }

    timer()
    {
		string msg;
        float elapsed = llGetAndResetTime();
        if (elapsed > 0.5)
        {
            say("Freeze: " + (string)elapsed);
        }
		integer agents = llGetRegionAgentCount();
		if (agents != last_agents)
		{
			say("Agents delta: " + (string)(agents - last_agents));
			last_agents = agents;
		}
		integer prims = llGetParcelPrimCount(llGetPos(), PARCEL_COUNT_TOTAL, TRUE);
		if (prims != last_prims)
		{
			say("Prims delta: " + (string)(prims - last_prims));
			last_prims = prims;
		}
    }
}