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.
This commit is contained in:
parent
85463b9955
commit
c6e5dd21fd
@ -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,6 +227,11 @@ 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 != this->Tests.end(); ++j)
|
||||||
{
|
{
|
||||||
@ -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++;
|
||||||
|
@ -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
|
||||||
|
@ -1009,13 +1009,15 @@ 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())
|
||||||
{
|
{
|
||||||
@ -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);
|
||||||
|
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user