Example #1
0
        protected double GetMetricStatistic(
            string operationName,
            string metric,
            string statistic,
            string callerName              = CallGraphEdge.CallGraphRoot,
            OperationFunctor functor       = OperationFunctor.Body,
            OperationFunctor callerFunctor = OperationFunctor.Body)
        {
            ICallGraphStatistics st = metricNameToListener[metric];

            return(st.Results.GetStatistic(new CallGraphEdge((HashedString)operationName, (HashedString)callerName, functor, callerFunctor), metric, statistic));
        }
Example #2
0
        public QCTraceSimulatorImpl(QCTraceSimulatorConfiguration config)
        {
            configuration = Utils.DeepClone(config);
            Utils.FillDictionaryForEnumNames <PrimitiveOperationsGroups, int>(primitiveOperationsIdToNames);

            gateTimes = new double[primitiveOperationsIdToNames.Keys.Count];
            for (int i = 0; i < primitiveOperationsIdToNames.Keys.Count; ++i)
            {
                if (!config.TraceGateTimes.ContainsKey((PrimitiveOperationsGroups)i))
                {
                    throw new Exception($"Gate time for {primitiveOperationsIdToNames[i]} must be specified.");
                }

                gateTimes[i] = config.TraceGateTimes[(PrimitiveOperationsGroups)i];
            }

            tCoreConfig = new QCTraceSimulatorCoreConfiguration
            {
                ThrowOnUnconstrainedMeasurement = configuration.ThrowOnUnconstrainedMeasurement
            };

            tCoreConfig.CallStackDepthLimit = config.CallStackDepthLimit;

            InitializeQCTracerCoreListeners(tCoreConfig.Listeners);

            metricNameToListener = new Dictionary <string, ICallGraphStatistics>();
            foreach (IQCTraceSimulatorListener l in tCoreConfig.Listeners)
            {
                ICallGraphStatistics li = l as ICallGraphStatistics;
                if (li != null)
                {
                    string[] variableNames = li.Results.GetVariablesNamesCopy();
                    foreach (string metric in variableNames)
                    {
                        metricNameToListener.Add(metric, li);
                    }
                }
            }

            tracingCore = new QCTraceSimulatorCore(tCoreConfig);

            OnOperationStart += tracingCore.OnOperationStart;
            OnOperationEnd   += tracingCore.OnOperationEnd;

            RegisterPrimitiveOperationsGivenAsCircuits();
        }