diff --git a/modules/ts/include/opencv2/ts/ts_ext.hpp b/modules/ts/include/opencv2/ts/ts_ext.hpp index d0a699963c..0cfab432d8 100644 --- a/modules/ts/include/opencv2/ts/ts_ext.hpp +++ b/modules/ts/include/opencv2/ts/ts_ext.hpp @@ -11,11 +11,13 @@ namespace cvtest { void checkIppStatus(); extern bool skipUnstableTests; +extern int testThreads; } #define CV__TEST_INIT \ cv::ipp::setIppStatus(0); \ - cv::theRNG().state = cvtest::param_seed; + cv::theRNG().state = cvtest::param_seed; \ + cv::setNumThreads(cvtest::testThreads); #define CV__TEST_CLEANUP ::cvtest::checkIppStatus(); #define CV__TEST_BODY_IMPL(name) \ { \ diff --git a/modules/ts/src/ts.cpp b/modules/ts/src/ts.cpp index f2d373edce..0cbc9d0fbf 100644 --- a/modules/ts/src/ts.cpp +++ b/modules/ts/src/ts.cpp @@ -695,12 +695,14 @@ void checkIppStatus() } bool skipUnstableTests = false; +int testThreads = 0; void parseCustomOptions(int argc, char **argv) { const char * const command_line_keys = "{ ipp test_ipp_check |false |check whether IPP works without failures }" "{ test_seed |809564 |seed for random numbers generator }" + "{ test_threads |-1 |the number of worker threads, if parallel execution is enabled}" "{ skip_unstable |false |skip unstable tests }" "{ h help |false |print help info }"; @@ -721,6 +723,8 @@ void parseCustomOptions(int argc, char **argv) param_seed = parser.get("test_seed"); + testThreads = parser.get("test_threads"); + skipUnstableTests = parser.get("skip_unstable"); } diff --git a/modules/ts/src/ts_perf.cpp b/modules/ts/src/ts_perf.cpp index 01bbf86640..05ad22e691 100644 --- a/modules/ts/src/ts_perf.cpp +++ b/modules/ts/src/ts_perf.cpp @@ -39,7 +39,6 @@ static double param_max_deviation; static unsigned int param_min_samples; static unsigned int param_force_samples; static double param_time_limit; -static int param_threads; static bool param_write_sanity; static bool param_verify_sanity; #ifdef CV_COLLECT_IMPL_DATA @@ -1042,7 +1041,7 @@ void TestBase::Init(const std::vector & availableImpls, #ifdef HAVE_IPP test_ipp_check = !args.get("perf_ipp_check") ? getenv("OPENCV_IPP_CHECK") != NULL : true; #endif - param_threads = args.get("perf_threads"); + testThreads = args.get("perf_threads"); #ifdef CV_COLLECT_IMPL_DATA param_collect_impl = args.get("perf_collect_impl"); #endif @@ -1160,7 +1159,7 @@ void TestBase::Init(const std::vector & availableImpls, void TestBase::RecordRunParameters() { ::testing::Test::RecordProperty("cv_implementation", param_impl); - ::testing::Test::RecordProperty("cv_num_threads", param_threads); + ::testing::Test::RecordProperty("cv_num_threads", testThreads); #ifdef HAVE_CUDA if (param_impl == "cuda") @@ -1851,8 +1850,8 @@ void TestBase::SetUp() { cv::theRNG().state = param_seed; // this rng should generate same numbers for each run - if (param_threads >= 0) - cv::setNumThreads(param_threads); + if (testThreads >= 0) + cv::setNumThreads(testThreads); else cv::setNumThreads(-1);