Create Long-running GC test job for the CI
authorSean Gillespie <segilles@microsoft.com>
Fri, 11 Mar 2016 23:48:56 +0000 (15:48 -0800)
committerSean Gillespie <segilles@microsoft.com>
Mon, 11 Apr 2016 18:47:48 +0000 (11:47 -0700)
23 files changed:
netci.groovy
tests/buildtest.cmd
tests/issues.targets
tests/runtest.cmd
tests/src/CLRTest.Execute.Bash.targets
tests/src/CLRTest.Execute.Batch.targets
tests/src/Common/Coreclr.TestWrapper/CoreclrTestWrapperLib.cs
tests/src/GC/Coverage/concurrentspin2.cs [deleted file]
tests/src/GC/Coverage/concurrentspin2.csproj [deleted file]
tests/src/GC/Features/BackgroundGC/concurrentspin2.csproj
tests/src/GC/Features/LOHCompaction/lohcompact_stress.csproj
tests/src/GC/Features/LOHCompaction/lohcompactapi2.csproj
tests/src/GC/Features/LOHCompaction/lohcompactscenariorepro.csproj
tests/src/GC/Features/PartialCompaction/eco1.csproj
tests/src/GC/Features/PartialCompaction/partialcompactiontest.csproj
tests/src/GC/Features/PartialCompaction/partialcompactionwloh.csproj
tests/src/GC/Features/SustainedLowLatency/sustainedlowlatency_race.csproj
tests/src/GC/Features/SustainedLowLatency/sustainedlowlatency_race_reverse.csproj
tests/src/GC/Scenarios/BaseFinal/basefinal.csproj
tests/src/GC/Scenarios/DoublinkList/doublinknoleak.csproj
tests/tests.targets
tests/testsFailingOutsideWindows.txt
tests/x86_legacy_backend_issues.targets

index 53295e8..6889de1 100755 (executable)
@@ -66,7 +66,7 @@ class Constants {
                'gcstress0xc_minopts_heapverify1' : ['COMPlus_GCStress'  : '0xC', 'COMPlus_JITMinOpts'  : '1', 'COMPlus_HeapVerify'  : '1']
                ]
     // This is the basic set of scenarios
-    def static basicScenarios = ['default', 'pri1', 'ilrt', 'r2r', 'pri1r2r', 'gcstress15_pri1r2r']
+    def static basicScenarios = ['default', 'pri1', 'ilrt', 'r2r', 'pri1r2r', 'gcstress15_pri1r2r', 'longgc']
     // This is the set of configurations
     def static configurationList = ['Debug', 'Checked', 'Release']
     // This is the set of architectures
@@ -348,6 +348,9 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
                     }
                 }
                 break
+            case 'longgc':
+                // long GC jobs are triggered by phrase only.
+                break
             case 'ilrt':
                 assert !(os in bidailyCrossList)
                 // ILASM/ILDASM roundtrip one gets a daily build, and only for release
@@ -479,6 +482,11 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
                                 Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} GCStress 15 R2R pri1 Build & Test", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")  
                             }
                             break
+                        case 'longgc':
+                            if (configuration == 'Release' || configuration == 'Checked') {
+                                Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Long-Running GC Build & Test", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
+                            }
+                            break
                         case 'minopts':
                             assert (os == 'Windows_NT') || (os in Constants.crossList)
                             Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test (Jit - MinOpts)",
@@ -636,6 +644,11 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
                                 Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} GCStress 15 R2R pri1 Build & Test", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")  
                             }
                             break
+                        case 'longgc':
+                            if (configuration == 'Release' || configuration == 'Checked') {
+                                Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Long-Running GC Build & Test", "(?i).*test\\W+${os}\\W+${configuration}\\W+${scenario}.*")
+                            }
+                            break
                         case 'minopts':
                             assert (os == 'Windows_NT') || (os in Constants.crossList)
                             Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Build and Test (Jit - MinOpts)",
@@ -816,6 +829,12 @@ def static addTriggers(def job, def branch, def isPR, def architecture, def os,
                         Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} GCStress 15 R2R pri1 Build & Test", "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*")  
                     }
                 }
+            } else if (scenario == 'longgc') {
+                if (os == 'Windows_NT'){
+                    if (configuration == 'Release' || configuration == 'Checked'){
+                        Utilities.addGithubPRTriggerForBranch(job, branch, "${os} ${architecture} ${configuration} Long-Running GC Build & Test", "(?i).*test\\W+${os}\\W+${architecture}\\W+${configuration}\\W+${scenario}.*")  
+                    }
+                }
             }
             break
         default:
@@ -950,6 +969,16 @@ combinedScenarios.each { scenario ->
                                     return
                                 }
                                 break
+                            case 'longgc':
+                                if (os != 'Windows_NT' && !(os in Constants.crossList)) {
+                                    return
+                                }
+                                
+                                // only x64 or x86 for now
+                                if (architecture != 'x64' && architecture != 'x86') {
+                                    return
+                                }
+                                break
                             case 'default':
                                 // Nothing skipped
                                 break
@@ -1014,6 +1043,9 @@ combinedScenarios.each { scenario ->
                                         //Build pri1 R2R tests with GC stress level 15
                                         buildCommands += "build.cmd ${lowerConfiguration} ${architecture} docrossgen skiptests"
                                         buildCommands += "set __TestIntermediateDir=int&&tests\\buildtest.cmd ${lowerConfiguration} ${architecture} crossgen Priority 1 gcstresslevel 15"
+                                    } else if (scenario == 'longgc') {
+                                        buildCommands += "build.cmd ${lowerConfiguration} ${architecture} skiptests"
+                                        buildCommands += "set __TestIntermediateDir=int&&tests\\buildtest.cmd ${lowerConfiguration} ${architecture} longgctests"
                                     }
                                     else {
                                         println("Unknown scenario: ${scenario}")
@@ -1053,10 +1085,18 @@ combinedScenarios.each { scenario ->
                                             }                                            
                                         }
                                         else if (architecture == 'x64') {
-                                            buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} ${crossgenStr}"
+                                            if (scenario == 'longgc') {
+                                                buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} longgctests sequential Exclude0"
+                                            } else {
+                                                buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture}"
+                                            }
                                         }
                                         else if (architecture == 'x86') {
-                                            buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} ${crossgenStr} Exclude0 x86_legacy_backend_issues.targets"
+                                            if (scenario == 'longgc') {
+                                                buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} longgctests sequential Exclude0"
+                                            } else {
+                                                buildCommands += "tests\\runtest.cmd ${lowerConfiguration} ${architecture} Exclude0 x86_legacy_backend_issues.targets"
+                                            }
                                         }
                                     }
 
@@ -1295,6 +1335,12 @@ combinedScenarios.each { scenario ->
                                     return
                                 }
                                 break
+                            case 'longgc':
+                                //Skip configs that aren't Checked or Release (so just Debug, for now)
+                                if (configuration != 'Checked' && configuration != 'Release') {
+                                    return
+                                }
+                                break
                             case 'default':
                                 // Nothing skipped
                                 break
@@ -1324,6 +1370,15 @@ combinedScenarios.each { scenario ->
                     }
                     // Enable Server GC for Ubuntu PR builds
                     def serverGCString = ''
+                    
+                    // Whether or not this test run should be run sequentially instead
+                    // of in parallel. Only used for long GC tests.
+                    def sequentialString = ''
+                    
+                    // Whether or not this test run should only run failing test.
+                    // Only used for long GC tests, because they are all ignored in
+                    // normal test runs.
+                    def runFailingString = ''
                      
                     if (os == 'Ubuntu' && isPR){
                         serverGCString = '--useServerGC'
@@ -1334,6 +1389,18 @@ combinedScenarios.each { scenario ->
                     if (scenario == 'r2r' || scenario == 'pri1r2r' || scenario == 'gcstress15_pri1r2r'){
                         crossgenStr = '--crossgen'
                     }
+
+                    if (scenario == 'longgc') {
+                        // Long GC tests behave very poorly when they are not
+                        // the only test running (many of them allocate until OOM).
+                        sequentialString = 'sequential'
+                        
+                        // Long GC tests all exist in the ignore list because
+                        // they can't run during normal test runs. This is not
+                        // particularly pretty but, until we get a more generalized
+                        // mechanism for coming up with test playlists, it works.
+                        runFailingString = '--runFailingTestsOnly'
+                    }
                     
 
                     def newJob = job(Utilities.getFullJobName(project, jobName, isPR)) {
@@ -1412,7 +1479,7 @@ combinedScenarios.each { scenario ->
             --mscorlibDir=\"\${WORKSPACE}/bin/Product/${osGroup}.${architecture}.${configuration}\" \\
             --coreFxBinDir=\"\${WORKSPACE}/bin/${osGroup}.AnyCPU.Release\" \\
             --coreFxNativeBinDir=\"\${WORKSPACE}/bin/${osGroup}.${architecture}.Release\" \\
-            ${testEnvOpt} ${serverGCString} ${crossgenStr}""")
+            ${testEnvOpt} ${serverGCString} ${crossgenStr} ${sequentialString} ${runFailingString}""")
                         }
                     }
 
index f85941d..8f23e82 100644 (file)
@@ -31,6 +31,7 @@ set __crossgen=
 set __ILAsmRoundtrip=
 set __BuildSequential=
 set __TestPriority=
+set __LongGCTests=
 set __msbuildCleanBuildArgs=
 set __msbuildExtraArgs=
 set __verbosity=normal
@@ -65,6 +66,7 @@ if /i "%1" == "ilasmroundtrip"      (set __ILAsmRoundtrip=true&shift&goto Arg_Lo
 if /i "%1" == "sequential"          (set __BuildSequential=1&shift&goto Arg_Loop)
 if /i "%1" == "priority"            (set __TestPriority=%2&shift&shift&goto Arg_Loop)
 if /i "%1" == "gcstresslevel"       (set __GCStressLevel=%2&shift&shift&goto Arg_Loop)
+if /i "%1" == "longgctests"         (set __LongGCTests=1&shift&goto Arg_Loop)
 
 if /i "%1" == "verbose"             (set __verbosity=detailed&shift&goto Arg_Loop)
 
@@ -275,6 +277,11 @@ if %__GCStressLevel% GTR 0 (
     set __msbuildManagedBuildArgs=%__msbuildManagedBuildArgs% /p:GCStressLevel=%__GCStressLevel%   
 )
 
+if defined __LongGCTests (
+    echo Building tests with Long GC tests enabled.
+    set __msbuildManagedBuildArgs=%__msbuildManagedBuildArgs% /p:GCLongRunning=true
+)
+
 set __BuildLogRootName=Tests_Managed
 call :msbuild "%__ProjectFilesDir%\build.proj" %__msbuildManagedBuildArgs%
 if errorlevel 1 exit /b 1
index 331e721..03545dc 100644 (file)
         <ExcludeList Include="$(XunitTestBinBase)\GC\Scenarios\BaseFinal\basefinal\*">
              <Issue>3392</Issue>
         </ExcludeList>
-        <ExcludeList Include="$(XunitTestBinBase)\GC\Coverage\concurrentspin2\*">
-             <Issue>3392</Issue>
-        </ExcludeList>
         <ExcludeList Include="$(XunitTestBinBase)\GC\Coverage\smalloom\*">
              <Issue>3392</Issue>
         </ExcludeList>
index eeca3a9..d894c8e 100644 (file)
@@ -26,8 +26,9 @@ set "__LogsDir=%__RootBinDir%\Logs"
 :: Default __Exclude to issues.targets
 set __Exclude0=%~dp0\issues.targets
 
-set __BuildSequential=
+set __Sequential=
 set __msbuildExtraArgs=
+set __LongGCTests=
 
 :Arg_Loop
 if "%1" == "" goto ArgsDone
@@ -53,8 +54,9 @@ if /i "%1" == "SkipWrapperGeneration" (set __SkipWrapperGeneration=true&shift&go
 if /i "%1" == "Exclude"             (set __Exclude=%2&shift&shift&goto Arg_Loop)
 if /i "%1" == "Exclude0"            (set __Exclude0=%2&shift&shift&goto Arg_Loop)
 if /i "%1" == "TestEnv"             (set __TestEnv=%2&shift&shift&goto Arg_Loop)
-if /i "%1" == "sequential"          (set __BuildSequential=1&shift&goto Arg_Loop)
+if /i "%1" == "sequential"          (set __Sequential=1&shift&goto Arg_Loop)
 if /i "%1" == "crossgen"            (set __DoCrossgen=1&shift&goto Arg_Loop)
+if /i "%1" == "longgctests"         (set __LongGCTests=1&shift&goto Arg_Loop)
 if /i "%1" == "GenerateLayoutOnly"  (set __GenerateLayoutOnly=1&set __SkipWrapperGeneration=true&shift&goto Arg_Loop)
 if /i "%1" == "PerfTests"           (set __PerfTests=true&set __SkipWrapperGeneration=true&shift&goto Arg_Loop)
 
@@ -125,8 +127,10 @@ if not defined VSINSTALLDIR (
 ::       assembly. 
 set __msbuildCommonArgs=/nologo /nodeReuse:false %__msbuildExtraArgs%
 
-if not defined __BuildSequential (
+if not defined __Sequential (
     set __msbuildCommonArgs=%__msbuildCommonArgs% /maxcpucount
+) else (
+    set __msbuildCommonArgs=%__msbuildCommonArgs% /p:ParallelRun=false
 )
 
 if defined CORE_ROOT goto SkipCoreRootSetup
@@ -309,6 +313,14 @@ if "%__IsGCTest%"=="true" (
     )
 )
 
+:: Long GC tests take about 10 minutes per test on average, so
+:: they often bump up against the default 10 minute timeout.
+:: 20 minutes is more than enough time for a test to complete successfully.
+if defined __LongGCTests (
+    echo Running Long GC tests, extending timeout to 20 minutes
+    set __TestTimeout=1200000
+)
+
 set __BuildLogRootName=Tests_GenerateRuntimeLayout
 call :msbuild "%__ProjectFilesDir%\runtest.proj" /p:GenerateRuntimeLayout=true 
 if errorlevel 1 (
index d4bef47..7ec2e15 100644 (file)
@@ -165,6 +165,10 @@ then
   exit 0
 fi
       ]]></BashCLRTestEnvironmentCompatibilityCheck>
+      <BashCLRTestGCLongTestSkipCondition Condition="'$(GCLongRunning)' == 'true' And '$(IsLongRunningGCTest)' != 'true'"><![CDATA[
+echo Skipping execution because this is not a long-running GC test
+exit 0
+      ]]></BashCLRTestGCLongTestSkipCondition>
       <BashCLRTestExitCodePrep Condition="$(_CLRTestNeedsToRun)">
 <![CDATA[CLRTestExpectedExitCode=$(CLRTestExitCode)
 echo BEGIN EXECUTION]]>
@@ -312,6 +316,7 @@ $__TestEnv
 
 $(BashEnvironmentVariables)
 $(BashCLRTestEnvironmentCompatibilityCheck)
+$(BashCLRTestGCLongTestSkipCondition)
 $(BashCLRTestArgPrep)
 $(BashCLRTestExitCodePrep)
 # CrossGen Script (when /p:CrossGen=true)
index 12820ac..7fbe32c 100644 (file)
@@ -153,7 +153,10 @@ IF "%COMPlus_JitStress%"=="" IF "%COMPlus_JitStressRegs%"=="" IF "%COMPlus_JITMi
   Exit /b 0
 :Compatible1
       ]]></BatchCLRTestEnvironmentCompatibilityCheck>
-
+      <BatchCLRTestGCLongTestSkipCondition Condition="$(GCLongRunning) == 'true' And '$(IsLongRunningGCTest)' != 'true'"><![CDATA[
+echo Skipping execution because this is not a long-running GC test
+Exit /b 0
+      ]]></BatchCLRTestGCLongTestSkipCondition>
       <BatchCLRTestExitCodePrep Condition="$(_CLRTestNeedsToRun)">
         <![CDATA[
 set CLRTestExpectedExitCode=$(CLRTestExitCode)
@@ -347,6 +350,9 @@ $(CrossgenBatchScript)
 REM IlasmRoundTrip Script
 $(IlasmRoundTripBatchScript)
 
+REM Long GC Tests Script (when /p:GCLongRunning=true)
+$(BatchCLRTestGCLongTestSkipCondition)
+
 REM Precommands
 $(CLRTestBatchPreCommands)
 REM Launch
index d012dca..398315b 100644 (file)
@@ -16,13 +16,19 @@ namespace CoreclrTestLib
     public class CoreclrTestWrapperLib
     {
         public const int EXIT_SUCCESS_CODE = 0;
+        public const string TIMEOUT_ENVIRONMENT_VAR = "__TestTimeout";
+        public const int DEFAULT_TIMEOUT = 1000 * 60*10;
 
         public int RunTest(string executable, string outputFile, string errorFile)
         {
             Debug.Assert(outputFile != errorFile);
 
             int exitCode = -100;
-            int timeout = 1000 * 60*10;
+            
+            // If a timeout was given to us by an environment variable, use it instead of the default
+            // timeout.
+            string environmentVar = Environment.GetEnvironmentVariable(TIMEOUT_ENVIRONMENT_VAR);
+            int timeout = environmentVar != null ? int.Parse(environmentVar) : DEFAULT_TIMEOUT;
 
             var outputStream = new FileStream(outputFile, FileMode.Create);
             var errorStream = new FileStream(errorFile, FileMode.Create);
diff --git a/tests/src/GC/Coverage/concurrentspin2.cs b/tests/src/GC/Coverage/concurrentspin2.cs
deleted file mode 100644 (file)
index 23edb8b..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System;
-using System.Diagnostics;
-using System.Threading;
-
-class PriorityTest
-{
-    private byte[][] old;
-    private byte[][] med;
-    private Random rand;
-
-    private int oldDataSize;
-    private int medDataSize;
-    private int iterCount;
-    private int meanAllocSize;
-    private int medTime;
-    private int youngTime;
-
-
-    public PriorityTest(int oldDataSize, int medDataSize,
-                        int iterCount, int meanAllocSize,
-                        int medTime, int youngTime)
-    {
-        rand = new Random(314159);
-        this.oldDataSize = oldDataSize;
-        this.medDataSize = medDataSize;
-        this.iterCount = iterCount;
-        this.meanAllocSize = meanAllocSize;
-        this.medTime = medTime;
-        this.youngTime = youngTime;
-    }
-
-    // creates initial arrays
-    void AllocTest(int oldDataSize, int medDataSize, int meanAllocSize)
-    {
-        old = new byte[oldDataSize][];
-        med = new byte[medDataSize][];
-
-        for (int i = 0; i < old.Length; i++)
-        {
-            old[i] = new byte[meanAllocSize];
-        }
-
-        for (int i = 0; i < med.Length; i++)
-        {
-            med[i] = new byte[meanAllocSize];
-        }
-    }
-
-    // churns data in the heap by replacing byte arrays with new ones of random length
-    // this should induce concurrent GCs
-    void SteadyState(int oldDataSize, int medDataSize,
-                        int iterCount, int meanAllocSize,
-                        int medTime, int youngTime)
-    {
-
-        for (int i = 0; i < iterCount; i++)
-        {
-            byte[] newarray = new byte[meanAllocSize];
-
-            if ((i % medTime) == 0)
-            {
-                old[rand.Next(0, old.Length)] = newarray;
-            }
-            if ((i % youngTime) == 0)
-            {
-                med[rand.Next(0, med.Length)] = newarray;
-            }
-            //if (((i % 5000) == 0) && (Thread.CurrentThread.Priority != ThreadPriority.Lowest))
-            //{
-            //    Thread.Sleep(200);
-            //}
-        }
-    }
-
-    // method that runs the test
-    public void RunTest()
-    {
-        for (int iteration = 0; iteration < iterCount; iteration++)
-        {
-            AllocTest(oldDataSize, medDataSize, meanAllocSize);
-
-            SteadyState(oldDataSize, medDataSize,
-                iterCount, meanAllocSize,
-                medTime, youngTime);
-
-            if (((iteration + 1) % 20) == 0)
-                Console.WriteLine("Thread: {1} Finished iteration {0}", iteration, System.Threading.Thread.CurrentThread.Name);
-        }
-
-    }
-
-}
-
-
-class ConcurrentRepro
-{
-
-    public static void Usage()
-    {
-        Console.WriteLine("Usage:");
-        Console.WriteLine("\t<num iterations> <num threads>");
-    }
-
-    public static int[] ParseArgs(string[] args)
-    {
-        int[] parameters = new int[2];
-
-        // set defaults
-        parameters[0] = 100;
-        parameters[1] = 4;
-
-        if (args.Length == 0)
-        {
-            //use defaults
-            Console.WriteLine("Using defaults: 100 iterations, 4 threads");
-            return parameters;
-        }
-        if (args.Length == parameters.Length)
-        {
-            for (int i = 0; i < args.Length; i++)
-            {
-                int j = 0;
-                if (!int.TryParse(args[i], out j))
-                {
-                    Usage();
-                    return null;
-                }
-                parameters[i] = j;
-            }
-
-            return parameters;
-        }
-
-        // incorrect number of arguments        
-        Usage();
-        return null;
-    }
-
-
-    public static int Main(string[] args)
-    {
-
-        // parse arguments
-        int[] parameters = ParseArgs(args);
-        if (parameters == null)
-        {
-            return 0;
-        }
-
-        // set process affinity to 1 to repro bug easier
-        //Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)1;
-
-
-        PriorityTest priorityTest = new PriorityTest(1000000, 5000, parameters[0], 17, 30, 3);
-        ThreadStart startDelegate = new ThreadStart(priorityTest.RunTest);
-
-        // create threads
-        Thread[] threads = new Thread[parameters[1]];
-        for (int i = 0; i < threads.Length; i++)
-        {
-            threads[i] = new Thread(startDelegate);
-            threads[i].Name = String.Format("Thread{0}", i);
-            //if (i % 2 == 0)
-            //{
-            //    threads[i].Priority = ThreadPriority.Lowest;
-            //}
-            threads[i].Start();
-        }
-
-        // wait for threads to complete
-        for (int i = 0; i < threads.Length; i++)
-        {
-            threads[i].Join();
-        }
-
-        return 100;
-    }
-}
-
-
diff --git a/tests/src/GC/Coverage/concurrentspin2.csproj b/tests/src/GC/Coverage/concurrentspin2.csproj
deleted file mode 100644 (file)
index 7e63aff..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
-    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
-    <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
-  </PropertyGroup>
-  <!-- Default configurations to help VS understand the configurations -->
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-  </PropertyGroup>
-  <ItemGroup>
-    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
-      <Visible>False</Visible>
-    </CodeAnalysisDependentAssemblyPaths>
-  </ItemGroup>
-  <ItemGroup>
-    <!-- Add Compile Object Here -->
-    <Compile Include="ConcurrentSpin2.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="app.config" />
-    <None Include="$(GCPackagesConfigFileDirectory)minimal\project.json" />
-  </ItemGroup>
-  <PropertyGroup>
-    <ProjectJson>$(GCPackagesConfigFileDirectory)minimal\project.json</ProjectJson>
-    <ProjectLockJson>$(GCPackagesConfigFileDirectory)minimal\project.lock.json</ProjectLockJson>
-  </PropertyGroup>
-  <ItemGroup>
-    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
-  </ItemGroup>
-  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
-  <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
-  </PropertyGroup>
-</Project>
\ No newline at end of file
index 5e585cf..3158d18 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index f3adce1..3da854d 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index a360930..9dc2e8a 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index e4962bb..6e0f5e7 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index c6021a3..74314e8 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index 8ccc632..ec9e594 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index 905da65..9c2b2dd 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index 7048a0c..92728a0 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index 868ee9c..b9843ce 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index a6b0e5d..a11454a 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index 5742139..5ac2e52 100644 (file)
@@ -13,6 +13,7 @@
     <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages</ReferencePath>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
     <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp>
+    <IsLongRunningGCTest>true</IsLongRunningGCTest>
   </PropertyGroup>
   <!-- Default configurations to help VS understand the configurations -->
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
index 79b60bd..56c6c5d 100644 (file)
@@ -37,6 +37,7 @@
 
     <PropertyGroup>
       <ExcludeTraits Condition="'$(ExcludeTraits)'==''">category=outerloop;category=failing</ExcludeTraits>
+      <ParallelRun Condition="'$(ParallelRun)'==''">true</ParallelRun>
     </PropertyGroup>
     <ItemGroup>
       <IncludeTraitsItems Include="$(IncludeTraits)" />
@@ -44,8 +45,8 @@
     </ItemGroup>
 
     <xunit Assemblies="@(TestAssemblies)"
-      ParallelizeAssemblies="True"
-      ParallelizeTestCollections="True"
+      ParallelizeAssemblies="$(ParallelRun)"
+      ParallelizeTestCollections="$(ParallelRun)"
       Html="$(__TestRunHtmlLog)"
       Xml="$(__TestRunXmlLog)"
       IncludeTraits="@(IncludeTraitsItems)"
index e93fc3a..a2bd670 100644 (file)
@@ -178,7 +178,6 @@ GC/LargeMemory/API/gc/collect/collect.sh
 GC/LargeMemory/API/gc/getgeneration/getgeneration.sh
 GC/Scenarios/DoublinkList/doublinknoleak/doublinknoleak.sh
 GC/Scenarios/BaseFinal/basefinal/basefinal.sh
-GC/Coverage/concurrentspin2/concurrentspin2.sh
 GC/Coverage/smalloom/smalloom.sh
 GC/Coverage/271010/271010.sh
 GC/Features/BackgroundGC/concurrentspin2/concurrentspin2.sh
@@ -194,6 +193,5 @@ GC/Features/SustainedLowLatency/sustainedlowlatency_race_reverse/sustainedlowlat
 GC/Features/SustainedLowLatency/scenario/scenario.sh
 GC/Features/SustainedLowLatency/sustainedlowlatency_race/sustainedlowlatency_race.sh
 GC/Regressions/dev10bugs/536168/536168/536168.sh
-
 JIT/Regression/CLR-x86-EJIT/V1-M09.5-PDC/b14426/b14426/b14426.sh
 JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pi-digits/pi-digits.sh
index 5229bd4..bcfa557 100644 (file)
     <ExcludeList Include="$(XunitTestBinBase)\GC\Scenarios\BaseFinal\basefinal\*">
       <Issue>3392</Issue>
     </ExcludeList>
-    <ExcludeList Include="$(XunitTestBinBase)\GC\Coverage\concurrentspin2\*">
-      <Issue>3392</Issue>
-    </ExcludeList>
     <ExcludeList Include="$(XunitTestBinBase)\GC\Coverage\smalloom\*">
       <Issue>3392</Issue>
     </ExcludeList>