Ver código fonte

Added the test property EXPENSIVE, which denotes that the given test(s) should be started prior to tests that are not marked as such. Also fixed test dependencies, and a few uninitialized variables in cmProcess.

Zach Mullen 16 anos atrás
pai
commit
c6e5dd21fd

+ 26 - 11
Source/CTest/cmCTestMultiProcessHandler.cxx

@@ -29,6 +29,7 @@ cmCTestMultiProcessHandler::cmCTestMultiProcessHandler()
   // Set the tests
   // Set the tests
 void 
 void 
 cmCTestMultiProcessHandler::SetTests(TestMap& tests,
 cmCTestMultiProcessHandler::SetTests(TestMap& tests,
+                                     TestMap& expensiveTests,
                                      PropertiesMap& properties)
                                      PropertiesMap& properties)
 {
 {
   // set test run map to false for all
   // set test run map to false for all
@@ -37,10 +38,16 @@ cmCTestMultiProcessHandler::SetTests(TestMap& tests,
     {
     {
     this->TestRunningMap[i->first] = false;
     this->TestRunningMap[i->first] = false;
     this->TestFinishMap[i->first] = false;
     this->TestFinishMap[i->first] = false;
+
+    if(this->Properties[i->first]->Expensive)
+      {
+      this->ExpensiveTests[i->first] = i->second;
+      }
     }
     }
   this->Tests = tests;
   this->Tests = tests;
-  this->Total = this->Tests.size();
+  this->ExpensiveTests = expensiveTests;
   this->Properties = properties;
   this->Properties = properties;
+  this->Total = this->Tests.size();
 }
 }
 
 
   // Set the max number of tests that can be run at the same time.
   // Set the max number of tests that can be run at the same time.
@@ -59,7 +66,7 @@ void cmCTestMultiProcessHandler::RunTests()
   this->CheckResume();
   this->CheckResume();
   this->TestHandler->SetMaxIndex(this->FindMaxIndex());
   this->TestHandler->SetMaxIndex(this->FindMaxIndex());
   this->StartNextTests();
   this->StartNextTests();
-  while(this->Tests.size() != 0)
+  while(this->Tests.size() != 0 || this->ExpensiveTests.size() != 0)
     {
     {
     this->CheckOutput();
     this->CheckOutput();
     this->StartNextTests();
     this->StartNextTests();
@@ -88,6 +95,10 @@ void cmCTestMultiProcessHandler::StartTestProcess(int test)
             << " test " << test << "\n");
             << " test " << test << "\n");
   this->TestRunningMap[test] = true; // mark the test as running
   this->TestRunningMap[test] = true; // mark the test as running
   // now remove the test itself
   // now remove the test itself
+  if(this->ExpensiveTests.size() > 0)
+    {
+    this->ExpensiveTests.erase(test);
+    }
   this->Tests.erase(test);
   this->Tests.erase(test);
   cmCTestRunTest* testRun = new cmCTestRunTest;
   cmCTestRunTest* testRun = new cmCTestRunTest;
   testRun->SetCTest(this->CTest);
   testRun->SetCTest(this->CTest);
@@ -139,7 +150,6 @@ bool cmCTestMultiProcessHandler::StartTest(int test)
   // if there are no depends left then run this test
   // if there are no depends left then run this test
   if(totalDepends == 0)
   if(totalDepends == 0)
     {
     {
-    // Start this test it has no depends 
     this->StartTestProcess(test);
     this->StartTestProcess(test);
     return true;
     return true;
     }
     }
@@ -150,15 +160,14 @@ bool cmCTestMultiProcessHandler::StartTest(int test)
 
 
 void cmCTestMultiProcessHandler::StartNextTests()
 void cmCTestMultiProcessHandler::StartNextTests()
 {
 {
-  //cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, std::endl
-  //           << "Number of running tests : " << this->RunningTests.size()
-  //           << "\n");
   size_t numToStart = this->ParallelLevel - this->RunningTests.size();
   size_t numToStart = this->ParallelLevel - this->RunningTests.size();
   if(numToStart == 0)
   if(numToStart == 0)
     {
     {
     return;
     return;
     }
     }
-  TestMap tests = this->Tests;
+  TestMap tests = this->ExpensiveTests.size() > 0 ? 
+    this->ExpensiveTests : this->Tests;
+
   for(TestMap::iterator i = tests.begin();
   for(TestMap::iterator i = tests.begin();
       i !=  tests.end(); ++i)
       i !=  tests.end(); ++i)
     {
     {
@@ -218,11 +227,16 @@ bool cmCTestMultiProcessHandler::CheckOutput()
       {
       {
       this->Failed->push_back(p->GetTestProperties()->Name);
       this->Failed->push_back(p->GetTestProperties()->Name);
       }
       }
+    for(TestMap::iterator j = this->ExpensiveTests.begin();
+        j != this->ExpensiveTests.end(); ++j)
+      {
+      j->second.erase(test);
+      }
     for(TestMap::iterator j = this->Tests.begin();
     for(TestMap::iterator j = this->Tests.begin();
-       j!=  this->Tests.end(); ++j)
-    {
-    j->second.erase(test);
-    }
+        j != this->Tests.end(); ++j)
+      {
+      j->second.erase(test);
+      }
     this->TestFinishMap[test] = true;
     this->TestFinishMap[test] = true;
     this->TestRunningMap[test] = false;
     this->TestRunningMap[test] = false;
     this->RunningTests.erase(p);
     this->RunningTests.erase(p);
@@ -323,6 +337,7 @@ void cmCTestMultiProcessHandler::RemoveTest(int index)
 {
 {
   this->Tests.erase(index);
   this->Tests.erase(index);
   this->Properties.erase(index);
   this->Properties.erase(index);
+  this->ExpensiveTests.erase(index);
   this->TestRunningMap[index] = false;
   this->TestRunningMap[index] = false;
   this->TestFinishMap[index] = true;
   this->TestFinishMap[index] = true;
   this->Completed++;
   this->Completed++;

+ 3 - 1
Source/CTest/cmCTestMultiProcessHandler.h

@@ -36,7 +36,8 @@ public:
 
 
   cmCTestMultiProcessHandler();
   cmCTestMultiProcessHandler();
   // Set the tests
   // Set the tests
-  void SetTests(TestMap& tests, PropertiesMap& properties);
+  void SetTests(TestMap& tests, TestMap& expensiveTests,
+                PropertiesMap& properties);
   // Set the max number of tests that can be run at the same time.
   // Set the max number of tests that can be run at the same time.
   void SetParallelLevel(size_t);
   void SetParallelLevel(size_t);
   void RunTests();
   void RunTests();
@@ -81,6 +82,7 @@ protected:
   int FindMaxIndex();
   int FindMaxIndex();
   // map from test number to set of depend tests
   // map from test number to set of depend tests
   TestMap Tests;
   TestMap Tests;
+  TestMap ExpensiveTests;
   //Total number of tests we'll be running
   //Total number of tests we'll be running
   size_t Total;
   size_t Total;
   //Number of tests that are complete
   //Number of tests that are complete

+ 9 - 3
Source/CTest/cmCTestTestHandler.cxx

@@ -1009,14 +1009,16 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<cmStdString> &passed,
     << "----------------------------------------------------------"
     << "----------------------------------------------------------"
     << std::endl;
     << std::endl;
 
 
-  cmCTestMultiProcessHandler::TestSet depends;
   cmCTestMultiProcessHandler::TestMap tests;
   cmCTestMultiProcessHandler::TestMap tests;
+  cmCTestMultiProcessHandler::TestMap expensiveTests;
   cmCTestMultiProcessHandler::PropertiesMap properties;
   cmCTestMultiProcessHandler::PropertiesMap properties;
+  
   for (ListOfTests::iterator it = this->TestList.begin();
   for (ListOfTests::iterator it = this->TestList.begin();
        it != this->TestList.end(); it ++ )
        it != this->TestList.end(); it ++ )
     { 
     { 
     cmCTestTestProperties& p = *it;
     cmCTestTestProperties& p = *it;
-    
+    cmCTestMultiProcessHandler::TestSet depends;
+
     if(p.Depends.size())
     if(p.Depends.size())
       {
       {
       for(std::vector<std::string>::iterator i = p.Depends.begin();
       for(std::vector<std::string>::iterator i = p.Depends.begin();
@@ -1035,8 +1037,12 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<cmStdString> &passed,
       }
       }
     tests[it->Index] = depends;
     tests[it->Index] = depends;
     properties[it->Index] = &*it;
     properties[it->Index] = &*it;
+    if(it->Expensive)
+      {
+      expensiveTests[it->Index] = depends;
+      }
     }
     }
-  parallel.SetTests(tests, properties);
+  parallel.SetTests(tests, expensiveTests, properties);
   parallel.SetPassFailVectors(&passed, &failed);
   parallel.SetPassFailVectors(&passed, &failed);
   this->TestResults.clear();
   this->TestResults.clear();
   parallel.SetTestResults(&this->TestResults);
   parallel.SetTestResults(&this->TestResults);

+ 5 - 0
Source/CTest/cmProcess.cxx

@@ -22,6 +22,11 @@ cmProcess::cmProcess()
 {
 {
   this->Process = 0;
   this->Process = 0;
   this->Timeout = 0;
   this->Timeout = 0;
+  this->TotalTime = 0;
+  this->LastOutputPipe = cmsysProcess_Pipe_None;
+  this->ExitValue = 0;
+  this->Id = 0;
+  this->StartTime = 0;
 }
 }
 
 
 cmProcess::~cmProcess()
 cmProcess::~cmProcess()