123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- /*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- using OpenMetaverse;
- using System.Collections.Generic;
- namespace OpenSim.Framework
- {
- /// <summary>
- /// These are the IDs of stats required by viewers protocol
- /// </summary>
- /// <remarks>
- /// Some of these are not relevant to OpenSimulator since it is architected differently to other simulators
- /// (e.g. script instructions aren't executed as part of the frame loop so 'script time' is tricky).
- /// </remarks>
- public enum StatsID : uint
- {
- // viewers defined IDs
- TimeDilation = 0,
- SimFPS = 1,
- PhysicsFPS = 2,
- AgentUpdates = 3,
- FrameMS = 4,
- NetMS = 5,
- OtherMS = 6,
- PhysicsMS = 7,
- AgentMS = 8,
- ImageMS = 9,
- ScriptMS = 10,
- TotalPrim = 11,
- ActivePrim = 12,
- Agents = 13,
- ChildAgents = 14,
- ActiveScripts = 15,
- LSLScriptLinesPerSecond = 16, // viewers don't like this anymore
- InPacketsPerSecond = 17,
- OutPacketsPerSecond = 18,
- PendingDownloads = 19,
- PendingUploads = 20,
- VirtualSizeKb = 21,
- ResidentSizeKb = 22,
- PendingLocalUploads = 23,
- UnAckedBytes = 24,
- PhysicsPinnedTasks = 25,
- PhysicsLodTasks = 26,
- SimPhysicsStepMs = 27,
- SimPhysicsShapeMs = 28,
- SimPhysicsOtherMs = 29,
- SimPhysicsMemory = 30,
- ScriptEps = 31,
- SimSpareMs = 32,
- SimSleepMs = 33,
- SimIoPumpTime = 34,
- SimPCTSscriptsRun = 35,
- SimRegionIdle = 36, // dataserver only
- SimRegionIdlePossible = 37, // dataserver only
- SimAIStepTimeMS = 38,
- SimSkippedSillouet_PS = 39,
- SimSkippedCharsPerC = 40,
- // extra stats IDs, just far from viewer defined ones
- SimExtraCountStart = 1000,
- internalLSLScriptLinesPerSecond = 1000,
- FrameDilation2 = 1001,
- UsersLoggingIn = 1002,
- TotalGeoPrim = 1003,
- TotalMesh = 1004,
- ScriptEngineThreadCount = 1005,
- NPCs = 1006,
- SimExtraCountEnd = 1007
- }
- // stats values are stored on a float[]
- // so we need readable indexes to it
- // Values sent to viewers via lludp must be first and up to fake index ViewerArraySize
- // fake index ArraySize defines the needed array size
- // this does not follow same order as IDs, because legacy order
- public enum StatsIndex : int
- {
- // index into data array
- TimeDilation = 0,
- SimFPS = 1,
- PhysicsFPS = 2,
- AgentUpdates = 3,
- Agents = 4,
- ChildAgents = 5,
- TotalPrim = 6,
- ActivePrim = 7,
- FrameMS = 8,
- NetMS = 9,
- PhysicsMS = 10,
- ImageMS = 11,
- OtherMS = 12,
- InPacketsPerSecond = 13,
- OutPacketsPerSecond = 14,
- UnAckedBytes = 15,
- AgentMS = 16,
- PendingDownloads = 17,
- PendingUploads = 18,
- ActiveScripts = 19,
- SimSleepMs = 20,
- SimSpareMs = 21,
- SimPhysicsStepMs = 22,
- VirtualSizeKb = 23,
- ResidentSizeKb = 24,
- PendingLocalUploads = 25,
- PhysicsPinnedTasks = 26,
- PhysicsLodTasks = 27,
- ScriptEps = 28,
- SimAIStepTimeMS = 29,
- SimIoPumpTime = 30,
- SimPCTSscriptsRun = 31,
- SimRegionIdle = 32,
- SimRegionIdlePossible = 33,
- SimSkippedSillouet_PS = 34,
- SimSkippedCharsPerC = 35,
- SimPhysicsMemory = 36,
- ScriptMS = 37,
- LSLScriptLinesPerSecond = 38,
- SimPhysicsShapeMs = 39,
- SimPhysicsOtherMs = 40,
- ViewerArraySize = 41, // just a marker to the end of viewer only stats and start of extra
- internalLSLScriptLinesPerSecond = 41,
- FrameDilation2 = 42,
- UsersLoggingIn = 43,
- TotalGeoPrim = 44,
- TotalMesh = 45,
- ScriptEngineThreadCount = 46,
- NPCs = 47,
- ArraySize = 48 // last is marker for array size
- }
- /// <summary>
- /// Enapsulate statistics for a simulator/scene.
- ///
- /// TODO: This looks very much like the OpenMetaverse SimStatsPacket. It should be much more generic stats
- /// storage.
- /// </summary>
- public class SimStats
- {
- public uint RegionX;
- public uint RegionY;
- public uint RegionSizeX;
- public uint RegionSizeY;
- public uint RegionFlags;
- public uint ObjectCapacity;
- public UUID RegionUUID;
- public string RegionName;
- public float[] StatsValues
- {
- get { return m_statsValues; }
- }
- private float[] m_statsValues;
- // a fixed array with the IDs for each viewer relevant stat
- // order and size must match StatsIndex enum
- public static readonly uint[] StatsIndexID = new uint[]
- {
- (uint)StatsID.TimeDilation,
- (uint)StatsID.SimFPS,
- (uint)StatsID.PhysicsFPS,
- (uint)StatsID.AgentUpdates,
- (uint)StatsID.Agents,
- (uint)StatsID.ChildAgents,
- (uint)StatsID.TotalPrim,
- (uint)StatsID.ActivePrim,
- (uint)StatsID.FrameMS,
- (uint)StatsID.NetMS,
- (uint)StatsID.PhysicsMS,
- (uint)StatsID.ImageMS,
- (uint)StatsID.OtherMS,
- (uint)StatsID.InPacketsPerSecond,
- (uint)StatsID.OutPacketsPerSecond,
- (uint)StatsID.UnAckedBytes,
- (uint)StatsID.AgentMS,
- (uint)StatsID.PendingDownloads,
- (uint)StatsID.PendingUploads,
- (uint)StatsID.ActiveScripts,
- (uint)StatsID.SimSleepMs,
- (uint)StatsID.SimSpareMs,
- (uint)StatsID.SimPhysicsStepMs,
- (uint)StatsID.VirtualSizeKb,
- (uint)StatsID.ResidentSizeKb,
- (uint)StatsID.PendingLocalUploads,
- (uint)StatsID.PhysicsPinnedTasks,
- (uint)StatsID.PhysicsLodTasks,
- (uint)StatsID.ScriptEps,
- (uint)StatsID.SimAIStepTimeMS,
- (uint)StatsID.SimIoPumpTime,
- (uint)StatsID.SimPCTSscriptsRun,
- (uint)StatsID.SimRegionIdle,
- (uint)StatsID.SimRegionIdlePossible,
- (uint)StatsID.SimSkippedSillouet_PS,
- (uint)StatsID.SimSkippedCharsPerC,
- (uint)StatsID.SimPhysicsMemory,
- (uint)StatsID.ScriptMS,
- (uint)StatsID.LSLScriptLinesPerSecond,
- (uint)StatsID.SimPhysicsShapeMs,
- (uint)StatsID.SimPhysicsOtherMs,
- (uint)StatsID.internalLSLScriptLinesPerSecond,
- (uint)StatsID.FrameDilation2,
- (uint)StatsID.UsersLoggingIn,
- (uint)StatsID.TotalGeoPrim,
- (uint)StatsID.TotalMesh,
- (uint)StatsID.ScriptEngineThreadCount,
- (uint)StatsID.NPCs
- };
- public SimStats(
- uint regionX, uint regionY,
- uint regionSizeX, uint regionSizeY,
- uint regionFlags, uint objectCapacity,
- float[] values,
- UUID pRUUID, string regionName)
- {
- RegionUUID = pRUUID;
- RegionName = regionName;
- RegionX = regionX;
- RegionY = regionY;
- RegionSizeX = regionSizeX;
- RegionSizeY = regionSizeY;
- RegionFlags = regionFlags;
- ObjectCapacity = objectCapacity;
- m_statsValues = values;
- }
- }
- }
|