From 7bf628ab31028ac2118e43fbb9b9d0a77ea0f55f Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 21 Mar 2012 00:02:08 +0000 Subject: [PATCH] Add ability to log warn if a frame takes longer than twice the expected time. Currently commented out. --- OpenSim/Region/Framework/Scenes/Scene.cs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 1bea14fadb..790ec637b8 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -190,7 +190,11 @@ namespace OpenSim.Region.Framework.Scenes private int backupMS; private int terrainMS; private int landMS; - private int lastCompletedFrame; + + /// + /// Tick at which the last frame was processed. + /// + private int m_lastFrameTick; /// /// Signals whether temporary objects are currently being cleaned up. Needed because this is launched @@ -464,7 +468,7 @@ namespace OpenSim.Region.Framework.Scenes public int MonitorBackupTime { get { return backupMS; } } public int MonitorTerrainTime { get { return terrainMS; } } public int MonitorLandTime { get { return landMS; } } - public int MonitorLastFrameTick { get { return lastCompletedFrame; } } + public int MonitorLastFrameTick { get { return m_lastFrameTick; } } public UpdatePrioritizationSchemes UpdatePrioritizationScheme { get { return m_priorityScheme; } } public bool IsReprioritizationEnabled { get { return m_reprioritizationEnabled; } } @@ -1202,6 +1206,7 @@ namespace OpenSim.Region.Framework.Scenes float physicsFPS = 0f; int tmpPhysicsMS, tmpPhysicsMS2, tmpAgentMS, tmpTempOnRezMS, evMS, backMS, terMS; + int previousFrameTick; int maintc; List coarseLocations; List avatarUUIDs; @@ -1305,10 +1310,9 @@ namespace OpenSim.Region.Framework.Scenes // UpdateLand(); // landMS = Util.EnvironmentTickCountSubtract(ldMS); //} - + frameMS = Util.EnvironmentTickCountSubtract(maintc); otherMS = tempOnRezMS + eventMS + backupMS + terrainMS + landMS; - lastCompletedFrame = Util.EnvironmentTickCount(); // if (Frame%m_update_avatars == 0) // UpdateInWorldTime(); @@ -1378,16 +1382,19 @@ namespace OpenSim.Region.Framework.Scenes // Tell the watchdog that this thread is still alive Watchdog.UpdateThread(); - maintc = Util.EnvironmentTickCountSubtract(maintc); +// previousFrameTick = m_lastFrameTick; + m_lastFrameTick = Util.EnvironmentTickCount(); + maintc = Util.EnvironmentTickCountSubtract(m_lastFrameTick, maintc); maintc = (int)(MinFrameTime * 1000) - maintc; if (maintc > 0) Thread.Sleep(maintc); -// if (frameMS > (int)(MinFrameTime * 1000)) + // Optionally warn if a frame takes double the amount of time that it should. +// if (Util.EnvironmentTickCountSubtract(m_lastFrameTick, previousFrameTick) > (int)(MinFrameTime * 1000 * 2)) // m_log.WarnFormat( // "[SCENE]: Frame took {0} ms (desired max {1} ms) in {2}", -// frameMS, +// Util.EnvironmentTickCountSubtract(m_lastFrameTick, previousFrameTick), // MinFrameTime * 1000, // RegionInfo.RegionName); }