//        public void AddAsset(AssetBase asset)
//        {
//            assetsInCache++;
//            //assetCacheMemoryUsage += asset.Data.Length;
//        }
//
//        public void RemoveAsset(UUID uuid)
//        {
//            assetsInCache--;
//        }
//
//        public void AddTexture(AssetBase image)
//        {
//            if (image.Data != null)
//            {
//                texturesInCache++;
//
//                // This could have been a pull stat, though there was originally a nebulous idea to measure flow rates
//                textureCacheMemoryUsage += image.Data.Length;
//            }
//        }
//
//        /// <summary>
//        /// Signal that the asset cache has been cleared.
//        /// </summary>
//        public void ClearAssetCacheStatistics()
//        {
//            assetsInCache = 0;
//            assetCacheMemoryUsage = 0;
//            texturesInCache = 0;
//            textureCacheMemoryUsage = 0;
//        }
//
//        public void AddAssetRequestTimeAfterCacheMiss(TimeSpan ts)
//        {
//            assetRequestTimeAfterCacheMiss = ts;
//        }
//
//        public void AddBlockedMissingTextureRequest()
//        {
//            blockedMissingTextureRequests++;
//        }
//
//        public void AddAssetServiceRequestFailure()
//        {
//            assetServiceRequestFailures++;
//        }

//        public void AddInventoryServiceRetrievalFailure()
//        {
//            inventoryServiceRetrievalFailures++;
//        }

        /// <summary>
        /// Register as a packet queue stats provider
        /// </summary>
        /// <param name="uuid">An agent UUID</param>
        /// <param name="provider"></param>
        public void RegisterPacketQueueStatsProvider(UUID uuid, IPullStatsProvider provider)
        {
            lock (packetQueueStatsCollectors)
            {
                // FIXME: If the region service is providing more than one region, then the child and root agent
                // queues are wrongly replacing each other here.
                packetQueueStatsCollectors[uuid] = new PacketQueueStatsCollector(provider);
            }
        }
//        public void AddAsset(AssetBase asset)
//        {
//            assetsInCache++;
//            //assetCacheMemoryUsage += asset.Data.Length;
//        }
//        
//        public void RemoveAsset(UUID uuid)
//        {
//            assetsInCache--;
//        }
//
//        public void AddTexture(AssetBase image)
//        {
//            if (image.Data != null)
//            {
//                texturesInCache++;
//
//                // This could have been a pull stat, though there was originally a nebulous idea to measure flow rates
//                textureCacheMemoryUsage += image.Data.Length;
//            }
//        }
//
//        /// <summary>
//        /// Signal that the asset cache has been cleared.
//        /// </summary>
//        public void ClearAssetCacheStatistics()
//        {
//            assetsInCache = 0;
//            assetCacheMemoryUsage = 0;
//            texturesInCache = 0;
//            textureCacheMemoryUsage = 0;
//        }
//        
//        public void AddAssetRequestTimeAfterCacheMiss(TimeSpan ts)
//        {
//            assetRequestTimeAfterCacheMiss = ts;
//        }
//
//        public void AddBlockedMissingTextureRequest()
//        {
//            blockedMissingTextureRequests++;
//        }
//
//        public void AddAssetServiceRequestFailure()
//        {
//            assetServiceRequestFailures++;
//        }

//        public void AddInventoryServiceRetrievalFailure()
//        {
//            inventoryServiceRetrievalFailures++;
//        }

        /// <summary>
        /// Register as a packet queue stats provider
        /// </summary>
        /// <param name="uuid">An agent UUID</param>
        /// <param name="provider"></param>
        public void RegisterPacketQueueStatsProvider(UUID uuid, IPullStatsProvider provider)
        {
            lock (packetQueueStatsCollectors)
            {
                // FIXME: If the region service is providing more than one region, then the child and root agent
                // queues are wrongly replacing each other here.
                packetQueueStatsCollectors[uuid] = new PacketQueueStatsCollector(provider);
            }
        }