Exemple #1
0
        /// <summary>
        /// Gets whether the <see cref="PipExecutorCounter"/> should expand pip type specific variations
        /// </summary>
        private static bool IsPipTypeSpecificCounter(PipExecutorCounter counter)
        {
            switch (counter)
            {
            case PipExecutorCounter.ExecutePipStepDuration:
            case PipExecutorCounter.ScheduleDependentDuration:
            case PipExecutorCounter.ScheduledByDependencyDuration:
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// Returns a 'frontier pip' variant of cache miss counter.
        /// </summary>
        public static PipExecutorCounter ToFrontierPipCacheMissCounter(this PipExecutorCounter counter)
        {
            switch (counter)
            {
            case PipExecutorCounter.CacheMissesForDescriptorsDueToStrongFingerprints:
                return(PipExecutorCounter.CacheMissesForDescriptorsDueToStrongFingerprints_Frontier);

            case PipExecutorCounter.CacheMissesForDescriptorsDueToWeakFingerprints:
                return(PipExecutorCounter.CacheMissesForDescriptorsDueToWeakFingerprints_Frontier);

            case PipExecutorCounter.CacheMissesForDescriptorsDueToAugmentedWeakFingerprints:
                return(PipExecutorCounter.CacheMissesForDescriptorsDueToAugmentedWeakFingerprints_Frontier);

            case PipExecutorCounter.CacheMissesForDescriptorsDueToArtificialMissOptions:
                return(PipExecutorCounter.CacheMissesForDescriptorsDueToArtificialMissOptions_Frontier);

            case PipExecutorCounter.CacheMissesForCacheEntry:
                return(PipExecutorCounter.CacheMissesForCacheEntry_Frontier);

            case PipExecutorCounter.CacheMissesDueToInvalidDescriptors:
                return(PipExecutorCounter.CacheMissesDueToInvalidDescriptors_Frontier);

            case PipExecutorCounter.CacheMissesForProcessMetadata:
                return(PipExecutorCounter.CacheMissesForProcessMetadata_Frontier);

            case PipExecutorCounter.CacheMissesForProcessMetadataFromHistoricMetadata:
                return(PipExecutorCounter.CacheMissesForProcessMetadataFromHistoricMetadata_Frontier);

            case PipExecutorCounter.CacheMissesForProcessOutputContent:
                return(PipExecutorCounter.CacheMissesForProcessOutputContent_Frontier);

            case PipExecutorCounter.CacheMissesForProcessConfiguredUncacheable:
                return(PipExecutorCounter.CacheMissesForProcessConfiguredUncacheable_Frontier);

            default:
                throw new ArgumentException($"Cannot find a corresponding counter for '{counter}'");
            }
        }
Exemple #3
0
        /// <summary>
        /// Gets whether the <see cref="PipExecutorCounter"/> should expand pip type specific variations
        /// </summary>
        private static bool IsTrackedCacheCounter(PipExecutorCounter counter)
        {
            switch (counter)
            {
            case PipExecutorCounter.ObservedInputProcessorPreProcessDuration:
            case PipExecutorCounter.ObservedInputProcessorPass1InitializeObservationInfosDuration:
            case PipExecutorCounter.ObservedInputProcessorTryQuerySealedInputContentDuration:
            case PipExecutorCounter.ObservedInputProcessorTryProbeForExistenceDuration:
            case PipExecutorCounter.ObservedInputProcessorComputePipFileSystemPaths:
            case PipExecutorCounter.ObservedInputProcessorReportUnexpectedAccess:
            case PipExecutorCounter.ObservedInputProcessorComputeSearchPathsAndFilterDuration:
            case PipExecutorCounter.ObservedInputProcessorTryQueryDirectoryFingerprintDuration:
            case PipExecutorCounter.ComputeWeakFingerprintDuration:
            case PipExecutorCounter.CacheQueryingWeakFingerprintDuration:
            case PipExecutorCounter.TryLoadPathSetFromContentCacheDuration:
            case PipExecutorCounter.CheckProcessRunnableFromCacheExecutionLogDuration:
            case PipExecutorCounter.CheckProcessRunnableFromCacheChapter3RetrieveAndParseMetadataDuration:
            case PipExecutorCounter.CheckProcessRunnableFromCacheChapter4CheckContentAvailabilityDuration:
                return(true);
            }

            return(false);
        }
Exemple #4
0
 /// <summary>
 /// Validates that a pip execution event was counted the correct number of times
 /// </summary>
 public static void AssertPipExecutorStatCounted(this ScheduleRunResult result, PipExecutorCounter counter, long count)
 => XAssert.AreEqual(count, result.PipExecutorCounters.GetCounterValue(counter));
Exemple #5
0
        protected void AssertProcessPipCountersByFilterSumToPipExecutorCounters(ScheduleRunResult result, PipExecutorCounter pipExecutorCounter, PipCountersByGroup pipCountersByGroup)
        {
            var explicitCounter = result.ProcessPipCountersByFilter.ExplicitlyScheduledProcesses.GetElapsedTime(pipCountersByGroup);
            var implicitCounter = result.ProcessPipCountersByFilter.ImplicitlyScheduledProcesses.GetElapsedTime(pipCountersByGroup);
            var executorCounter = result.PipExecutorCounters.GetElapsedTime(pipExecutorCounter);

            AssertOkTimeDiff(executorCounter, explicitCounter + implicitCounter, "(explicit: " + explicitCounter.TotalMilliseconds + "ms, implicit: " + implicitCounter.TotalMilliseconds + "ms, executor: " + executorCounter.TotalMilliseconds + "ms)");
        }