From 94312b695ab1148417a6d5a61574c58d9875fc80 Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Fri, 16 Oct 2015 18:53:25 -0700 Subject: [PATCH] add gflags support files from webrtc files needed for command line support with gtest. These files are copied directly from webrtc. TBR=kjellander@chromium.org BUG=libyuv:507 Review URL: https://codereview.chromium.org/1414483002 . --- README.chromium | 2 +- include/libyuv/version.h | 2 +- libyuv_test.gyp | 9 + unit_test/unit_test.cc | 433 +++++++++++++++++++++++---------------- 4 files changed, 264 insertions(+), 182 deletions(-) diff --git a/README.chromium b/README.chromium index 286b32991..07fa47c84 100644 --- a/README.chromium +++ b/README.chromium @@ -1,6 +1,6 @@ Name: libyuv URL: http://code.google.com/p/libyuv/ -Version: 1513 +Version: 1514 License: BSD License File: LICENSE diff --git a/include/libyuv/version.h b/include/libyuv/version.h index a6877d440..2267ad594 100644 --- a/include/libyuv/version.h +++ b/include/libyuv/version.h @@ -11,6 +11,6 @@ #ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT #define INCLUDE_LIBYUV_VERSION_H_ -#define LIBYUV_VERSION 1513 +#define LIBYUV_VERSION 1514 #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT diff --git a/libyuv_test.gyp b/libyuv_test.gyp index 403f3cd3f..5358ffd76 100644 --- a/libyuv_test.gyp +++ b/libyuv_test.gyp @@ -18,6 +18,15 @@ 'dependencies': [ 'libyuv.gyp:libyuv', 'testing/gtest.gyp:gtest', + 'third_party/gflags/gflags.gyp:gflags', + ], + 'direct_dependent_settings': { + 'defines': [ + 'GTEST_RELATIVE_PATH', + ], + }, + 'export_dependent_settings': [ + '<(DEPTH)/testing/gtest.gyp:gtest', ], 'defines': [ # Enable the following 3 macros to turn off assembly for specified CPU. diff --git a/unit_test/unit_test.cc b/unit_test/unit_test.cc index 83e5910b4..e053a413a 100644 --- a/unit_test/unit_test.cc +++ b/unit_test/unit_test.cc @@ -14,223 +14,296 @@ #include +#include "gflags/gflags.h" +#include "testing/gtest/include/gtest/gtest.h" + // Change this to 1000 for benchmarking. // TODO(fbarchard): Add command line parsing to pass this as option. #define BENCHMARK_ITERATIONS 1 int fastrand_seed = 0xfb; +DEFINE_int32(libyuv_width, 0, "width of test image."); +DEFINE_int32(libyuv_height, 0, "height of test image."); +DEFINE_int32(libyuv_repeat, 0, "number of times to repeat test."); +DEFINE_int32(libyuv_flags, 0, "cpu flags for reference code. 0 = C -1 = asm"); + +// For quicker unittests, default is 128 x 72. But when benchmarking, +// default to 720p. Allow size to specify. +// Set flags to -1 for benchmarking to avoid slower C code. + LibYUVConvertTest::LibYUVConvertTest() : benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_height_(72), disable_cpu_flags_(0) { - const char* repeat = getenv("LIBYUV_REPEAT"); - if (repeat) { - benchmark_iterations_ = atoi(repeat); // NOLINT - // For quicker unittests, default is 128 x 72. But when benchmarking, - // default to 720p. Allow size to specify. - if (benchmark_iterations_ > 1) { - benchmark_width_ = 1280; - benchmark_height_ = 720; - } - } - const char* width = getenv("LIBYUV_WIDTH"); - if (width) { - benchmark_width_ = atoi(width); // NOLINT - } - const char* height = getenv("LIBYUV_HEIGHT"); - if (height) { - benchmark_height_ = atoi(height); // NOLINT - } - const char* cpu_flags = getenv("LIBYUV_FLAGS"); - if (cpu_flags) { - disable_cpu_flags_ = atoi(cpu_flags); // NOLINT - } - benchmark_pixels_div256_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 255.0) / 256.0); - benchmark_pixels_div1280_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 1279.0) / 1280.0); + const char* repeat = getenv("LIBYUV_REPEAT"); + if (repeat) { + benchmark_iterations_ = atoi(repeat); // NOLINT + } + if (FLAGS_libyuv_repeat) { + benchmark_iterations_ = FLAGS_libyuv_repeat; + } + if (benchmark_iterations_ > 1) { + benchmark_width_ = 1280; + benchmark_height_ = 720; + } + const char* width = getenv("LIBYUV_WIDTH"); + if (width) { + benchmark_width_ = atoi(width); // NOLINT + } + if (FLAGS_libyuv_width) { + benchmark_width_ = FLAGS_libyuv_width; + } + const char* height = getenv("LIBYUV_HEIGHT"); + if (height) { + benchmark_height_ = atoi(height); // NOLINT + } + if (FLAGS_libyuv_height) { + benchmark_height_ = FLAGS_libyuv_height; + } + const char* cpu_flags = getenv("LIBYUV_FLAGS"); + if (cpu_flags) { + disable_cpu_flags_ = atoi(cpu_flags); // NOLINT + } + if (FLAGS_libyuv_flags) { + disable_cpu_flags_ = FLAGS_libyuv_flags; + } + benchmark_pixels_div256_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 255.0) / 256.0); + benchmark_pixels_div1280_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 1279.0) / 1280.0); } LibYUVColorTest::LibYUVColorTest() : benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_height_(72), disable_cpu_flags_(0) { - const char* repeat = getenv("LIBYUV_REPEAT"); - if (repeat) { - benchmark_iterations_ = atoi(repeat); // NOLINT - // For quicker unittests, default is 128 x 72. But when benchmarking, - // default to 720p. Allow size to specify. - if (benchmark_iterations_ > 1) { - benchmark_width_ = 1280; - benchmark_height_ = 720; - } - } - const char* width = getenv("LIBYUV_WIDTH"); - if (width) { - benchmark_width_ = atoi(width); // NOLINT - } - const char* height = getenv("LIBYUV_HEIGHT"); - if (height) { - benchmark_height_ = atoi(height); // NOLINT - } - const char* cpu_flags = getenv("LIBYUV_FLAGS"); - if (cpu_flags) { - disable_cpu_flags_ = atoi(cpu_flags); // NOLINT - } - benchmark_pixels_div256_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 255.0) / 256.0); - benchmark_pixels_div1280_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 1279.0) / 1280.0); + const char* repeat = getenv("LIBYUV_REPEAT"); + if (repeat) { + benchmark_iterations_ = atoi(repeat); // NOLINT + } + if (FLAGS_libyuv_repeat) { + benchmark_iterations_ = FLAGS_libyuv_repeat; + } + if (benchmark_iterations_ > 1) { + benchmark_width_ = 1280; + benchmark_height_ = 720; + } + const char* width = getenv("LIBYUV_WIDTH"); + if (width) { + benchmark_width_ = atoi(width); // NOLINT + } + if (FLAGS_libyuv_width) { + benchmark_width_ = FLAGS_libyuv_width; + } + const char* height = getenv("LIBYUV_HEIGHT"); + if (height) { + benchmark_height_ = atoi(height); // NOLINT + } + if (FLAGS_libyuv_height) { + benchmark_height_ = FLAGS_libyuv_height; + } + const char* cpu_flags = getenv("LIBYUV_FLAGS"); + if (cpu_flags) { + disable_cpu_flags_ = atoi(cpu_flags); // NOLINT + } + if (FLAGS_libyuv_flags) { + disable_cpu_flags_ = FLAGS_libyuv_flags; + } + benchmark_pixels_div256_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 255.0) / 256.0); + benchmark_pixels_div1280_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 1279.0) / 1280.0); } LibYUVScaleTest::LibYUVScaleTest() : benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_height_(72), disable_cpu_flags_(0) { - const char* repeat = getenv("LIBYUV_REPEAT"); - if (repeat) { - benchmark_iterations_ = atoi(repeat); // NOLINT - // For quicker unittests, default is 128 x 72. But when benchmarking, - // default to 720p. Allow size to specify. - if (benchmark_iterations_ > 1) { - benchmark_width_ = 1280; - benchmark_height_ = 720; - } - } - const char* width = getenv("LIBYUV_WIDTH"); - if (width) { - benchmark_width_ = atoi(width); // NOLINT - } - const char* height = getenv("LIBYUV_HEIGHT"); - if (height) { - benchmark_height_ = atoi(height); // NOLINT - } - const char* cpu_flags = getenv("LIBYUV_FLAGS"); - if (cpu_flags) { - disable_cpu_flags_ = atoi(cpu_flags); // NOLINT - } - benchmark_pixels_div256_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 255.0) / 256.0); - benchmark_pixels_div1280_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 1279.0) / 1280.0); + const char* repeat = getenv("LIBYUV_REPEAT"); + if (repeat) { + benchmark_iterations_ = atoi(repeat); // NOLINT + } + if (FLAGS_libyuv_repeat) { + benchmark_iterations_ = FLAGS_libyuv_repeat; + } + if (benchmark_iterations_ > 1) { + benchmark_width_ = 1280; + benchmark_height_ = 720; + } + const char* width = getenv("LIBYUV_WIDTH"); + if (width) { + benchmark_width_ = atoi(width); // NOLINT + } + if (FLAGS_libyuv_width) { + benchmark_width_ = FLAGS_libyuv_width; + } + const char* height = getenv("LIBYUV_HEIGHT"); + if (height) { + benchmark_height_ = atoi(height); // NOLINT + } + if (FLAGS_libyuv_height) { + benchmark_height_ = FLAGS_libyuv_height; + } + const char* cpu_flags = getenv("LIBYUV_FLAGS"); + if (cpu_flags) { + disable_cpu_flags_ = atoi(cpu_flags); // NOLINT + } + if (FLAGS_libyuv_flags) { + disable_cpu_flags_ = FLAGS_libyuv_flags; + } + benchmark_pixels_div256_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 255.0) / 256.0); + benchmark_pixels_div1280_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 1279.0) / 1280.0); } LibYUVRotateTest::LibYUVRotateTest() : benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_height_(72), disable_cpu_flags_(0) { - const char* repeat = getenv("LIBYUV_REPEAT"); - if (repeat) { - benchmark_iterations_ = atoi(repeat); // NOLINT - // For quicker unittests, default is 128 x 72. But when benchmarking, - // default to 720p. Allow size to specify. - if (benchmark_iterations_ > 1) { - benchmark_width_ = 1280; - benchmark_height_ = 720; - } - } - const char* width = getenv("LIBYUV_WIDTH"); - if (width) { - benchmark_width_ = atoi(width); // NOLINT - } - const char* height = getenv("LIBYUV_HEIGHT"); - if (height) { - benchmark_height_ = atoi(height); // NOLINT - } - const char* cpu_flags = getenv("LIBYUV_FLAGS"); - if (cpu_flags) { - disable_cpu_flags_ = atoi(cpu_flags); // NOLINT - } - benchmark_pixels_div256_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 255.0) / 256.0); - benchmark_pixels_div1280_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 1279.0) / 1280.0); + const char* repeat = getenv("LIBYUV_REPEAT"); + if (repeat) { + benchmark_iterations_ = atoi(repeat); // NOLINT + } + if (FLAGS_libyuv_repeat) { + benchmark_iterations_ = FLAGS_libyuv_repeat; + } + if (benchmark_iterations_ > 1) { + benchmark_width_ = 1280; + benchmark_height_ = 720; + } + const char* width = getenv("LIBYUV_WIDTH"); + if (width) { + benchmark_width_ = atoi(width); // NOLINT + } + if (FLAGS_libyuv_width) { + benchmark_width_ = FLAGS_libyuv_width; + } + const char* height = getenv("LIBYUV_HEIGHT"); + if (height) { + benchmark_height_ = atoi(height); // NOLINT + } + if (FLAGS_libyuv_height) { + benchmark_height_ = FLAGS_libyuv_height; + } + const char* cpu_flags = getenv("LIBYUV_FLAGS"); + if (cpu_flags) { + disable_cpu_flags_ = atoi(cpu_flags); // NOLINT + } + if (FLAGS_libyuv_flags) { + disable_cpu_flags_ = FLAGS_libyuv_flags; + } + benchmark_pixels_div256_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 255.0) / 256.0); + benchmark_pixels_div1280_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 1279.0) / 1280.0); } LibYUVPlanarTest::LibYUVPlanarTest() : benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_height_(72), disable_cpu_flags_(0) { - const char* repeat = getenv("LIBYUV_REPEAT"); - if (repeat) { - benchmark_iterations_ = atoi(repeat); // NOLINT - // For quicker unittests, default is 128 x 72. But when benchmarking, - // default to 720p. Allow size to specify. - if (benchmark_iterations_ > 1) { - benchmark_width_ = 1280; - benchmark_height_ = 720; - } - } - const char* width = getenv("LIBYUV_WIDTH"); - if (width) { - benchmark_width_ = atoi(width); // NOLINT - } - const char* height = getenv("LIBYUV_HEIGHT"); - if (height) { - benchmark_height_ = atoi(height); // NOLINT - } - const char* cpu_flags = getenv("LIBYUV_FLAGS"); - if (cpu_flags) { - disable_cpu_flags_ = atoi(cpu_flags); // NOLINT - } - benchmark_pixels_div256_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 255.0) / 256.0); - benchmark_pixels_div1280_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 1279.0) / 1280.0); + const char* repeat = getenv("LIBYUV_REPEAT"); + if (repeat) { + benchmark_iterations_ = atoi(repeat); // NOLINT + } + if (FLAGS_libyuv_repeat) { + benchmark_iterations_ = FLAGS_libyuv_repeat; + } + if (benchmark_iterations_ > 1) { + benchmark_width_ = 1280; + benchmark_height_ = 720; + } + const char* width = getenv("LIBYUV_WIDTH"); + if (width) { + benchmark_width_ = atoi(width); // NOLINT + } + if (FLAGS_libyuv_width) { + benchmark_width_ = FLAGS_libyuv_width; + } + const char* height = getenv("LIBYUV_HEIGHT"); + if (height) { + benchmark_height_ = atoi(height); // NOLINT + } + if (FLAGS_libyuv_height) { + benchmark_height_ = FLAGS_libyuv_height; + } + const char* cpu_flags = getenv("LIBYUV_FLAGS"); + if (cpu_flags) { + disable_cpu_flags_ = atoi(cpu_flags); // NOLINT + } + if (FLAGS_libyuv_flags) { + disable_cpu_flags_ = FLAGS_libyuv_flags; + } + benchmark_pixels_div256_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 255.0) / 256.0); + benchmark_pixels_div1280_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 1279.0) / 1280.0); } LibYUVBaseTest::LibYUVBaseTest() : benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_height_(72), disable_cpu_flags_(0) { - const char* repeat = getenv("LIBYUV_REPEAT"); - if (repeat) { - benchmark_iterations_ = atoi(repeat); // NOLINT - // For quicker unittests, default is 128 x 72. But when benchmarking, - // default to 720p. Allow size to specify. - if (benchmark_iterations_ > 1) { - benchmark_width_ = 1280; - benchmark_height_ = 720; - } - } - const char* width = getenv("LIBYUV_WIDTH"); - if (width) { - benchmark_width_ = atoi(width); // NOLINT - } - const char* height = getenv("LIBYUV_HEIGHT"); - if (height) { - benchmark_height_ = atoi(height); // NOLINT - } - const char* cpu_flags = getenv("LIBYUV_FLAGS"); - if (cpu_flags) { - disable_cpu_flags_ = atoi(cpu_flags); // NOLINT - } - benchmark_pixels_div256_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 255.0) / 256.0); - benchmark_pixels_div1280_ = static_cast(( - static_cast(Abs(benchmark_width_)) * - static_cast(Abs(benchmark_height_)) * - static_cast(benchmark_iterations_) + 1279.0) / 1280.0); + const char* repeat = getenv("LIBYUV_REPEAT"); + if (repeat) { + benchmark_iterations_ = atoi(repeat); // NOLINT + } + if (FLAGS_libyuv_repeat) { + benchmark_iterations_ = FLAGS_libyuv_repeat; + } + if (benchmark_iterations_ > 1) { + benchmark_width_ = 1280; + benchmark_height_ = 720; + } + const char* width = getenv("LIBYUV_WIDTH"); + if (width) { + benchmark_width_ = atoi(width); // NOLINT + } + if (FLAGS_libyuv_width) { + benchmark_width_ = FLAGS_libyuv_width; + } + const char* height = getenv("LIBYUV_HEIGHT"); + if (height) { + benchmark_height_ = atoi(height); // NOLINT + } + if (FLAGS_libyuv_height) { + benchmark_height_ = FLAGS_libyuv_height; + } + const char* cpu_flags = getenv("LIBYUV_FLAGS"); + if (cpu_flags) { + disable_cpu_flags_ = atoi(cpu_flags); // NOLINT + } + if (FLAGS_libyuv_flags) { + disable_cpu_flags_ = FLAGS_libyuv_flags; + } + benchmark_pixels_div256_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 255.0) / 256.0); + benchmark_pixels_div1280_ = static_cast(( + static_cast(Abs(benchmark_width_)) * + static_cast(Abs(benchmark_height_)) * + static_cast(benchmark_iterations_) + 1279.0) / 1280.0); } int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); + google::ParseCommandLineFlags(&argc, &argv, true); return RUN_ALL_TESTS(); }