Performance testing: added option to get list of all values for CV_ENUM; added perf...
authorAndrey Kamaev <no@email>
Tue, 1 Nov 2011 15:41:43 +0000 (15:41 +0000)
committerAndrey Kamaev <no@email>
Tue, 1 Nov 2011 15:41:43 +0000 (15:41 +0000)
modules/core/perf/perf_stat.cpp
modules/imgproc/perf/perf_filters.cpp [new file with mode: 0644]
modules/imgproc/perf/perf_inpaint.cpp
modules/ts/include/opencv2/ts/ts_perf.hpp
modules/ts/misc/chart.py

index 58718f9..06883a7 100644 (file)
@@ -386,7 +386,7 @@ PERF_TEST_P( Size_MatType_ROp, reduceR,
     testing::Combine( 
         testing::Values( TYPICAL_MAT_SIZES ), 
         testing::Values( TYPICAL_MAT_TYPES ),
-        testing::Values( CV_REDUCE_SUM, CV_REDUCE_AVG, CV_REDUCE_MAX, CV_REDUCE_MIN )
+        testing::ValuesIn(ROp::all())
     )
 )
 {
@@ -414,7 +414,7 @@ PERF_TEST_P( Size_MatType_ROp, reduceC,
     testing::Combine( 
         testing::Values( TYPICAL_MAT_SIZES ), 
         testing::Values( TYPICAL_MAT_TYPES ),
-        testing::Values( CV_REDUCE_SUM, CV_REDUCE_AVG, CV_REDUCE_MAX, CV_REDUCE_MIN )
+        testing::ValuesIn(ROp::all())
     )
 )
 {
diff --git a/modules/imgproc/perf/perf_filters.cpp b/modules/imgproc/perf/perf_filters.cpp
new file mode 100644 (file)
index 0000000..74eebd0
--- /dev/null
@@ -0,0 +1,38 @@
+#include "perf_precomp.hpp"
+
+using namespace std;
+using namespace cv;
+using namespace perf;
+
+using std::tr1::make_tuple;
+using std::tr1::get;
+
+CV_ENUM(SobelBorderType, BORDER_CONSTANT, BORDER_REFLECT, BORDER_REFLECT_101)
+
+typedef std::tr1::tuple<Size, std::tr1::tuple<int, int>, int, SobelBorderType> Size_dx_dy_kernel_Border_t;
+typedef perf::TestBaseWithParam<Size_dx_dy_kernel_Border_t> Size_dx_dy_kernel_Border;
+
+PERF_TEST_P(Size_dx_dy_kernel_Border, sobel,
+            testing::Combine(
+                testing::Values(szVGA, szQVGA),
+                testing::Values(make_tuple(0, 1), make_tuple(1, 0), make_tuple(1, 1), make_tuple(0, 2), make_tuple(2, 0), make_tuple(2, 2)),
+                testing::Values(3, 5),
+                testing::ValuesIn(SobelBorderType::all())
+            )
+          )
+{
+    Size size = get<0>(GetParam());
+    int dx = get<0>(get<1>(GetParam()));
+    int dy = get<1>(get<1>(GetParam()));
+    int ksize = get<2>(GetParam());
+    SobelBorderType border = get<3>(GetParam());
+
+    Mat src(size, CV_8U);
+    Mat dst(size, CV_32F);
+
+    declare.in(src, WARMUP_RNG).out(dst);
+
+    TEST_CYCLE(100) { Sobel(src, dst, CV_32F, dx, dy, ksize, 1, 0, border); }
+
+    SANITY_CHECK(dst);
+}
index 22bb7f3..bbd8e68 100644 (file)
@@ -19,7 +19,8 @@ CV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask,
 PERF_TEST_P( InpaintArea_InpaintingMethod, inpaint,\r
              testing::Combine(\r
                  SZ_ALL_SMALL,\r
-                 testing::Values( (int)INPAINT_NS, (int)INPAINT_TELEA ))\r
+                 testing::ValuesIn(InpaintingMethod::all())\r
+             )\r
            )\r
 {\r
     Mat src = imread( getDataPath("gpu/hog/road.png") );\r
index 5f8a816..f448b1c 100644 (file)
@@ -101,6 +101,17 @@ public:\
     }\\r
     *os << "UNKNOWN";\\r
   }\\r
+  struct Container{\\r
+    typedef class_name value_type;\\r
+      Container(class_name* first, size_t len): _begin(first), _end(first+len){}\\r
+      const class_name* begin() const {return _begin;}\\r
+      const class_name* end() const {return _end;}\\r
+    private: class_name *_begin, *_end;\\r
+  };\\r
+  static Container all(){\\r
+    static class_name vals[] = {__VA_ARGS__};\\r
+    return Container(vals, sizeof(vals)/sizeof(vals[0]));\\r
+  }\\r
 private: int _val;\\r
 };\\r
 inline void PrintTo(const class_name& t, std::ostream* os) { t.PrintTo(os); }\r
index f17395b..937b433 100644 (file)
@@ -40,7 +40,30 @@ def getValueParams(test):
         param = param[1:]
     if param.endswith(")"):
         param = param[:-1]
-    return [p.strip() for p in param.split(",")]
+    args = []
+    prev_pos = 0
+    start = 0
+    balance = 0
+    while True:
+        idx = param.find(",", prev_pos)
+        if idx < 0:
+            break
+        idxlb = param.find("(", prev_pos, idx)
+        while idxlb >= 0:
+            balance += 1
+            idxlb = param.find("(", idxlb+1, idx)
+        idxrb = param.find(")", prev_pos, idx)
+        while idxrb >= 0:
+            balance -= 1
+            idxrb = param.find(")", idxrb+1, idx)
+        assert(balance >= 0)
+        if balance == 0:
+            args.append(param[start:idx].strip())
+            start = idx + 1
+        prev_pos = idx + 1
+    args.append(param[start:].strip())
+    return args
+    #return [p.strip() for p in param.split(",")]
 
 def nextPermutation(indexes, lists, x, y):
     idx = len(indexes)-1