diff options
author | Brad King <brad.king@kitware.com> | 2017-09-11 11:48:38 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2017-09-11 11:48:46 (GMT) |
commit | 15b26ace186f08625337d59328ce5d7190cd5384 (patch) | |
tree | 12ade530ada0f7698cbf70ab73260b379f455551 /Source | |
parent | e8463e3570eaca13e4ee61fcec55b609602cbcea (diff) | |
parent | b2242ea9641cd09d94aaf77a33345100cc3a3def (diff) | |
download | CMake-15b26ace186f08625337d59328ce5d7190cd5384.zip CMake-15b26ace186f08625337d59328ce5d7190cd5384.tar.gz CMake-15b26ace186f08625337d59328ce5d7190cd5384.tar.bz2 |
Merge topic 'show_weighted_times'
b2242ea9 Help: Update documentation for PROCESSORS test property
5b829c89 CTest: Weight reported test times by PROCESSORS in summaries
a6e32eb0 CTest: Split out labels and subproject labels in summary output
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1226
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CTest/cmCTestTestHandler.cxx | 137 | ||||
-rw-r--r-- | Source/CTest/cmCTestTestHandler.h | 3 |
2 files changed, 39 insertions, 101 deletions
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index 18d9346..9962c49 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -535,14 +535,13 @@ int cmCTestTestHandler::ProcessHandler() << static_cast<int>(percent + .5f) << "% tests passed, " << failed.size() << " tests failed out of " << total << std::endl); - - if (!this->CTest->GetLabelsForSubprojects().empty() && - this->CTest->GetSubprojectSummary()) { - this->PrintSubprojectSummary(); - } else if (this->CTest->GetLabelSummary()) { - this->PrintLabelSummary(); + if ((!this->CTest->GetLabelsForSubprojects().empty() && + this->CTest->GetSubprojectSummary())) { + this->PrintLabelOrSubprojectSummary(true); + } + if (this->CTest->GetLabelSummary()) { + this->PrintLabelOrSubprojectSummary(false); } - char realBuf[1024]; sprintf(realBuf, "%6.2f sec", clock_finish - clock_start); cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, @@ -620,96 +619,32 @@ int cmCTestTestHandler::ProcessHandler() return 0; } -void cmCTestTestHandler::PrintLabelSummary() -{ - cmCTestTestHandler::ListOfTests::iterator it = this->TestList.begin(); - std::map<std::string, double> labelTimes; - std::map<std::string, int> labelCounts; - std::set<std::string> labels; - // initialize maps - std::string::size_type maxlen = 0; - for (; it != this->TestList.end(); ++it) { - cmCTestTestProperties& p = *it; - if (!p.Labels.empty()) { - for (std::vector<std::string>::iterator l = p.Labels.begin(); - l != p.Labels.end(); ++l) { - if ((*l).size() > maxlen) { - maxlen = (*l).size(); - } - labels.insert(*l); - labelTimes[*l] = 0; - labelCounts[*l] = 0; - } - } - } - cmCTestTestHandler::TestResultsVector::iterator ri = - this->TestResults.begin(); - // fill maps - for (; ri != this->TestResults.end(); ++ri) { - cmCTestTestResult& result = *ri; - cmCTestTestProperties& p = *result.Properties; - if (!p.Labels.empty()) { - for (std::vector<std::string>::iterator l = p.Labels.begin(); - l != p.Labels.end(); ++l) { - labelTimes[*l] += result.ExecutionTime; - ++labelCounts[*l]; - } - } - } - // now print times - if (!labels.empty()) { - cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\nLabel Time Summary:", - this->Quiet); - } - for (std::set<std::string>::const_iterator i = labels.begin(); - i != labels.end(); ++i) { - std::string label = *i; - label.resize(maxlen + 3, ' '); - - char buf[1024]; - sprintf(buf, "%6.2f sec", labelTimes[*i]); - - std::ostringstream labelCountStr; - labelCountStr << "(" << labelCounts[*i] << " test"; - if (labelCounts[*i] > 1) { - labelCountStr << "s"; - } - labelCountStr << ")"; - - cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n" - << label << " = " << buf << " " - << labelCountStr.str(), - this->Quiet); - if (this->LogFile) { - *this->LogFile << "\n" << *i << " = " << buf << "\n"; - } - } - if (!labels.empty()) { - if (this->LogFile) { - *this->LogFile << "\n"; - } - cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n", this->Quiet); - } -} - -void cmCTestTestHandler::PrintSubprojectSummary() +void cmCTestTestHandler::PrintLabelOrSubprojectSummary(bool doSubProject) { + // collect subproject labels std::vector<std::string> subprojects = this->CTest->GetLabelsForSubprojects(); - - cmCTestTestHandler::ListOfTests::iterator it = this->TestList.begin(); std::map<std::string, double> labelTimes; std::map<std::string, int> labelCounts; std::set<std::string> labels; - // initialize maps std::string::size_type maxlen = 0; - for (; it != this->TestList.end(); ++it) { + // initialize maps + for (cmCTestTestHandler::ListOfTests::iterator it = this->TestList.begin(); + it != this->TestList.end(); ++it) { cmCTestTestProperties& p = *it; for (std::vector<std::string>::iterator l = p.Labels.begin(); l != p.Labels.end(); ++l) { + // first check to see if the current label is a subproject label + bool isSubprojectLabel = false; std::vector<std::string>::iterator subproject = std::find(subprojects.begin(), subprojects.end(), *l); if (subproject != subprojects.end()) { + isSubprojectLabel = true; + } + // if we are doing sub projects and this label is one, then use it + // if we are not doing sub projects and the label is not one use it + if ((doSubProject && isSubprojectLabel) || + (!doSubProject && !isSubprojectLabel)) { if ((*l).size() > maxlen) { maxlen = (*l).size(); } @@ -719,26 +654,32 @@ void cmCTestTestHandler::PrintSubprojectSummary() } } } - cmCTestTestHandler::TestResultsVector::iterator ri = - this->TestResults.begin(); // fill maps - for (; ri != this->TestResults.end(); ++ri) { + for (cmCTestTestHandler::TestResultsVector::iterator ri = + this->TestResults.begin(); + ri != this->TestResults.end(); ++ri) { cmCTestTestResult& result = *ri; cmCTestTestProperties& p = *result.Properties; for (std::vector<std::string>::iterator l = p.Labels.begin(); l != p.Labels.end(); ++l) { - std::vector<std::string>::iterator subproject = - std::find(subprojects.begin(), subprojects.end(), *l); - if (subproject != subprojects.end()) { - labelTimes[*l] += result.ExecutionTime; + // only use labels found in labels + if (labels.find(*l) != labels.end()) { + labelTimes[*l] += result.ExecutionTime * result.Properties->Processors; ++labelCounts[*l]; } } } + // if no labels are found return and print nothing + if (labels.empty()) { + return; + } // now print times - if (!labels.empty()) { + if (doSubProject) { cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\nSubproject Time Summary:", this->Quiet); + } else { + cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\nLabel Time Summary:", + this->Quiet); } for (std::set<std::string>::const_iterator i = labels.begin(); i != labels.end(); ++i) { @@ -746,7 +687,7 @@ void cmCTestTestHandler::PrintSubprojectSummary() label.resize(maxlen + 3, ' '); char buf[1024]; - sprintf(buf, "%6.2f sec", labelTimes[*i]); + sprintf(buf, "%6.2f sec*proc", labelTimes[*i]); std::ostringstream labelCountStr; labelCountStr << "(" << labelCounts[*i] << " test"; @@ -754,7 +695,6 @@ void cmCTestTestHandler::PrintSubprojectSummary() labelCountStr << "s"; } labelCountStr << ")"; - cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n" << label << " = " << buf << " " << labelCountStr.str(), @@ -763,13 +703,12 @@ void cmCTestTestHandler::PrintSubprojectSummary() *this->LogFile << "\n" << *i << " = " << buf << "\n"; } } - if (!labels.empty()) { - if (this->LogFile) { - *this->LogFile << "\n"; - } - cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n", this->Quiet); + if (this->LogFile) { + *this->LogFile << "\n"; } + cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n", this->Quiet); } + void cmCTestTestHandler::CheckLabelFilterInclude(cmCTestTestProperties& it) { // if not using Labels to filter then return diff --git a/Source/CTest/cmCTestTestHandler.h b/Source/CTest/cmCTestTestHandler.h index 965552c..4c5b55f 100644 --- a/Source/CTest/cmCTestTestHandler.h +++ b/Source/CTest/cmCTestTestHandler.h @@ -232,8 +232,7 @@ private: */ virtual void GenerateDartOutput(cmXMLWriter& xml); - void PrintLabelSummary(); - void PrintSubprojectSummary(); + void PrintLabelOrSubprojectSummary(bool isSubProject); /** * Run the tests for a directory and any subdirectories |