diff --git a/modules/nonfree/perf/perf_main.cpp b/modules/nonfree/perf/perf_main.cpp index 03f9b71852..4959411403 100644 --- a/modules/nonfree/perf/perf_main.cpp +++ b/modules/nonfree/perf/perf_main.cpp @@ -11,4 +11,29 @@ static const char * impls[] = { "plain" }; -CV_PERF_TEST_MAIN_WITH_IMPLS(nonfree, impls, perf::printCudaInfo()) +#ifdef HAVE_OPENCL +#define DUMP_PROPERTY_XML(propertyName, propertyValue) \ + do { \ + std::stringstream ssName, ssValue;\ + ssName << propertyName;\ + ssValue << propertyValue; \ + ::testing::Test::RecordProperty(ssName.str(), ssValue.str()); \ + } while (false) + +#define DUMP_MESSAGE_STDOUT(msg) \ + do { \ + std::cout << msg << std::endl; \ + } while (false) + +#include "opencv2/ocl/private/opencl_dumpinfo.hpp" +#endif + +int main(int argc, char **argv) +{ + ::perf::TestBase::setPerformanceStrategy(::perf::PERF_STRATEGY_SIMPLE); +#if defined(HAVE_CUDA) + CV_PERF_TEST_MAIN_INTERNALS(nonfree, impls, perf::printCudaInfo()); +#else if defined(HAVE_OPENCL) + CV_PERF_TEST_MAIN_INTERNALS(nonfree, impls, dumpOpenCLDevice()); +#endif +} diff --git a/modules/nonfree/perf/perf_precomp.hpp b/modules/nonfree/perf/perf_precomp.hpp index addba7b000..57bbe16f08 100644 --- a/modules/nonfree/perf/perf_precomp.hpp +++ b/modules/nonfree/perf/perf_precomp.hpp @@ -9,6 +9,8 @@ #ifndef __OPENCV_PERF_PRECOMP_HPP__ #define __OPENCV_PERF_PRECOMP_HPP__ +#include "cvconfig.h" + #include "opencv2/ts/ts.hpp" #include "opencv2/nonfree/nonfree.hpp" diff --git a/modules/nonfree/perf/perf_surf.cpp b/modules/nonfree/perf/perf_surf.cpp index 84c21b4691..fed72137ca 100644 --- a/modules/nonfree/perf/perf_surf.cpp +++ b/modules/nonfree/perf/perf_surf.cpp @@ -13,36 +13,34 @@ typedef perf::TestBaseWithParam surf; "stitching/a3.png" #ifdef HAVE_OPENCV_OCL -static Ptr getSURF() -{ - ocl::PlatformsInfo p; - if(ocl::getOpenCLPlatforms(p) > 0) - return new ocl::SURF_OCL; - else - return new SURF; -} -#else -static Ptr getSURF() -{ - return new SURF; -} +#define OCL_TEST_CYCLE() for( ; startTimer(), next(); cv::ocl::finish(), stopTimer()) #endif PERF_TEST_P(surf, detect, testing::Values(SURF_IMAGES)) { String filename = getDataPath(GetParam()); Mat frame = imread(filename, IMREAD_GRAYSCALE); + ASSERT_FALSE(frame.empty()) << "Unable to load source image " << filename; - if (frame.empty()) - FAIL() << "Unable to load source image " << filename; + declare.in(frame); Mat mask; - declare.in(frame).time(90); - Ptr detector = getSURF(); - vector points; + Ptr detector; - TEST_CYCLE() detector->operator()(frame, mask, points, noArray()); + if (getSelectedImpl() == "plain") + { + detector = new SURF; + TEST_CYCLE() detector->operator()(frame, mask, points, noArray()); + } +#ifdef HAVE_OPENCV_OCL + else if (getSelectedImpl() == "ocl") + { + detector = new ocl::SURF_OCL; + OCL_TEST_CYCLE() detector->operator()(frame, mask, points, noArray()); + } +#endif + else CV_TEST_FAIL_NO_IMPL(); SANITY_CHECK_KEYPOINTS(points, 1e-3); } @@ -51,19 +49,30 @@ PERF_TEST_P(surf, extract, testing::Values(SURF_IMAGES)) { String filename = getDataPath(GetParam()); Mat frame = imread(filename, IMREAD_GRAYSCALE); + ASSERT_FALSE(frame.empty()) << "Unable to load source image " << filename; - if (frame.empty()) - FAIL() << "Unable to load source image " << filename; + declare.in(frame); Mat mask; - declare.in(frame).time(90); - - Ptr detector = getSURF(); + Ptr detector; vector points; vector descriptors; - detector->operator()(frame, mask, points, noArray()); - TEST_CYCLE() detector->operator()(frame, mask, points, descriptors, true); + if (getSelectedImpl() == "plain") + { + detector = new SURF; + detector->operator()(frame, mask, points, noArray()); + TEST_CYCLE() detector->operator()(frame, mask, points, descriptors, true); + } +#ifdef HAVE_OPENCV_OCL + else if (getSelectedImpl() == "ocl") + { + detector = new ocl::SURF_OCL; + detector->operator()(frame, mask, points, noArray()); + OCL_TEST_CYCLE() detector->operator()(frame, mask, points, descriptors, true); + } +#endif + else CV_TEST_FAIL_NO_IMPL(); SANITY_CHECK(descriptors, 1e-4); } @@ -72,17 +81,29 @@ PERF_TEST_P(surf, full, testing::Values(SURF_IMAGES)) { String filename = getDataPath(GetParam()); Mat frame = imread(filename, IMREAD_GRAYSCALE); + ASSERT_FALSE(frame.empty()) << "Unable to load source image " << filename; - if (frame.empty()) - FAIL() << "Unable to load source image " << filename; + declare.in(frame).time(90); Mat mask; - declare.in(frame).time(90); - Ptr detector = getSURF(); + Ptr detector; vector points; vector descriptors; - TEST_CYCLE() detector->operator()(frame, mask, points, descriptors, false); + if (getSelectedImpl() == "plain") + { + detector = new SURF; + TEST_CYCLE() detector->operator()(frame, mask, points, descriptors, false); + } +#ifdef HAVE_OPENCV_OCL + else if (getSelectedImpl() == "ocl") + { + detector = new ocl::SURF_OCL; + detector->operator()(frame, mask, points, noArray()); + OCL_TEST_CYCLE() detector->operator()(frame, mask, points, descriptors, false); + } +#endif + else CV_TEST_FAIL_NO_IMPL(); SANITY_CHECK_KEYPOINTS(points, 1e-3); SANITY_CHECK(descriptors, 1e-4);