示例#1
0
 public void Reset()
 {
     this.ExecutionEventBuffer        = new CounterBuffer <CommandExecutionEventEnum>(this.ConfigSet.MetricsRollingStatisticalWindowInMilliseconds, this.ConfigSet.MetricsRollingStatisticalWindowBuckets);
     this.ExecutionLatencyBuffer      = new IntegerPercentileBuffer(this.ConfigSet.MetricsRollingPercentileWindowInMilliseconds, this.ConfigSet.MetricsRollingPercentileWindowBuckets, this.ConfigSet.MetricsRollingPercentileBucketSize);
     this.TotalExecutionLatencyBuffer = new IntegerPercentileBuffer(this.ConfigSet.MetricsRollingPercentileWindowInMilliseconds, this.ConfigSet.MetricsRollingPercentileWindowBuckets, this.ConfigSet.MetricsRollingPercentileBucketSize);
     this._lastUpdateExecutionEventSnapshotTimeInMilliseconds = 0L;
     this._executionEventDistributionSnapshot             = new Dictionary <CommandExecutionEventEnum, int>();
     this._executionEventHealthSnapshot                   = new CommandExecutionHealthSnapshot(0, 0);
     this._lastGetLatencyBufferSnapshotTimeInMilliseconds = 0L;
     this._latencyBufferSnapshot = new List <long>();
     this._lastGetTotalLatencyBufferSnapshotTimeInMilliseconds = 0L;
     this._totalLatencyBufferSnapshot = new List <long>();
 }
示例#2
0
    public async Task Insert(Vector3[] data)
    {
        uint gx, gy, gz;

        shader.GetKernelThreadGroupSizes(computeLeavesKernel, out gx, out gy, out gz);
        int numGroupsX = Mathf.CeilToInt((float)data.Length / gx);

        using (var leaves = new StructuredBuffer <int>(data.Length))
            using (var leafCount = new RawBuffer <uint>(1))
                using (var keys = new CounterBuffer <int>(data.Length))
                    using (var points = new StructuredBuffer <Vector3>(data.Length)) {
                        points.SetData(data);

                        shader.SetFloats("size", bounds.size.x, bounds.size.y, bounds.size.z);
                        shader.SetFloats("min_corner", bounds.min.x, bounds.min.y, bounds.min.z);
                        shader.SetInt("max_depth", maxDepth);
                        shader.SetInt("point_count", data.Length);

                        shader.SetBuffer(computeLeavesKernel, "leaves", leaves.Buffer);
                        shader.SetBuffer(computeLeavesKernel, "points", points.Buffer);
                        shader.Dispatch(computeLeavesKernel, numGroupsX, 1, 1);

                        sorter.Sort(leaves, data.Length);

                        shader.SetBuffer(markUniqueLeavesKernel, "leaves", leaves.Buffer);
                        shader.SetBuffer(markUniqueLeavesKernel, "unique", keys.Buffer);
                        shader.Dispatch(markUniqueLeavesKernel, numGroupsX, 1, 1);

                        compactor.Compact(leaves, keys, data.Length);

                        keys.CopyCount(indirectArgs);
                        shader.SetBuffer(computeArgsKernel, "args", indirectArgs.Buffer);
                        shader.Dispatch(computeArgsKernel, 1, 1, 1);

                        keys.CopyCount(leafCount);
                        shader.SetBuffer(subdivideKernel, "leaf_count", leafCount.Buffer);
                        shader.SetBuffer(subdivideKernel, "leaves", leaves.Buffer);
                        shader.SetBuffer(subdivideKernel, "nodes", nodes.Buffer);
                        for (int i = 0; i < maxDepth; i++)
                        {
                            shader.SetInt("current_level", i);
                            shader.DispatchIndirect(subdivideKernel, indirectArgs.Buffer);
                        }

                        nodeData = await nodes.GetDataAsync();

                        nodeCount = (int)nodes.GetCounterValue();
                    }
    }
示例#3
0
    public Octree(Bounds bounds, int maxDepth = 5)
    {
        indirectArgs = new ArgsBuffer();

        int maxNodes = 0;

        for (int i = 1; i <= maxDepth; i++)
        {
            int res = 1 << i;
            maxNodes += res * res * res;
        }
        nodes = new CounterBuffer <Node>(maxNodes, 1);
        nodes.SetData(new Node[maxNodes]);

        this.bounds   = bounds;
        this.maxDepth = maxDepth;
    }
示例#4
0
        private void Reset()
        {
            if (_timeBufferConfig == null)
            {
                _timeBufferConfig = GetCounterBufferConfig();
                _counterBuffer    = new CounterBuffer <bool>(_timeBufferConfig.BufferTimeWindow, _timeBufferConfig.BufferTimeWindow / _timeBufferConfig.BucketTimeWindow);
                return;
            }

            TimeBufferConfig newConfig = GetCounterBufferConfig();

            if (_timeBufferConfig.Equals(newConfig))
            {
                return;
            }

            var message = string.Format("Count buffer reset due to config change, new config: {0}", newConfig);

            _logger.Info(message, _loadBalancerContext.AdditionalInfo);
            _timeBufferConfig = newConfig;
            _counterBuffer    = new CounterBuffer <bool>(_timeBufferConfig.BufferTimeWindow, _timeBufferConfig.BufferTimeWindow / _timeBufferConfig.BucketTimeWindow);
        }