Commit e2417df4 authored by Frank Barchard's avatar Frank Barchard

create color test category of unittests to narrow down arm bug

A hang in color conversion on arm occurs somewhere in yuv to rgb.
Breaking the color test into its own category of test will help
run selective tests to narrow down the issue.

R=harryjin@google.com
BUG=libyuv:506

Review URL: https://codereview.chromium.org/1405543003 .
parent 156ad8ee
...@@ -67,7 +67,6 @@ set(ly_unittest_sources ...@@ -67,7 +67,6 @@ set(ly_unittest_sources
${ly_base_dir}/unit_test/rotate_argb_test.cc ${ly_base_dir}/unit_test/rotate_argb_test.cc
${ly_base_dir}/unit_test/rotate_test.cc ${ly_base_dir}/unit_test/rotate_test.cc
${ly_base_dir}/unit_test/scale_argb_test.cc ${ly_base_dir}/unit_test/scale_argb_test.cc
${ly_base_dir}/unit_test/scale_color_test.cc
${ly_base_dir}/unit_test/scale_test.cc ${ly_base_dir}/unit_test/scale_test.cc
${ly_base_dir}/unit_test/unit_test.cc ${ly_base_dir}/unit_test/unit_test.cc
${ly_base_dir}/unit_test/video_common_test.cc ${ly_base_dir}/unit_test/video_common_test.cc
......
Name: libyuv Name: libyuv
URL: http://code.google.com/p/libyuv/ URL: http://code.google.com/p/libyuv/
Version: 1508 Version: 1509
License: BSD License: BSD
License File: LICENSE License File: LICENSE
......
...@@ -11,6 +11,6 @@ ...@@ -11,6 +11,6 @@
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT #ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
#define INCLUDE_LIBYUV_VERSION_H_ #define INCLUDE_LIBYUV_VERSION_H_
#define LIBYUV_VERSION 1508 #define LIBYUV_VERSION 1509
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
'unit_test/rotate_argb_test.cc', 'unit_test/rotate_argb_test.cc',
'unit_test/rotate_test.cc', 'unit_test/rotate_test.cc',
'unit_test/scale_argb_test.cc', 'unit_test/scale_argb_test.cc',
'unit_test/scale_color_test.cc',
'unit_test/scale_test.cc', 'unit_test/scale_test.cc',
'unit_test/unit_test.cc', 'unit_test/unit_test.cc',
'unit_test/video_common_test.cc', 'unit_test/video_common_test.cc',
...@@ -175,7 +174,7 @@ ...@@ -175,7 +174,7 @@
{ {
# TODO(kjellander): Figure out what to change in build/apk_test.gypi # TODO(kjellander): Figure out what to change in build/apk_test.gypi
# to it can be used instead of the copied code below. Using it in its # to it can be used instead of the copied code below. Using it in its
# current version was not possible, since the target starts with 'lib', # current version was not possible, since the target starts with 'lib',
# which somewhere confuses the variables. # which somewhere confuses the variables.
'target_name': 'libyuv_unittest_apk', 'target_name': 'libyuv_unittest_apk',
'type': 'none', 'type': 'none',
......
...@@ -37,7 +37,7 @@ namespace libyuv { ...@@ -37,7 +37,7 @@ namespace libyuv {
#endif #endif
#define TESTCS(TESTNAME, YUVTOARGB, ARGBTOYUV, HS1, HS, HN, DIFF) \ #define TESTCS(TESTNAME, YUVTOARGB, ARGBTOYUV, HS1, HS, HN, DIFF) \
TEST_F(LibYUVConvertTest, TESTNAME) { \ TEST_F(LibYUVColorTest, TESTNAME) { \
const int kPixels = benchmark_width_ * benchmark_height_; \ const int kPixels = benchmark_width_ * benchmark_height_; \
const int kHalfPixels = ((benchmark_width_ + 1) / 2) * \ const int kHalfPixels = ((benchmark_width_ + 1) / 2) * \
((benchmark_height_ + HS1) / HS); \ ((benchmark_height_ + HS1) / HS); \
...@@ -312,7 +312,7 @@ static int RoundToByte(float f) { ...@@ -312,7 +312,7 @@ static int RoundToByte(float f) {
#define RANDOM256(s) ((s & 1) ? ((s >> 1) ^ 0xb8) : (s >> 1)) #define RANDOM256(s) ((s & 1) ? ((s >> 1) ^ 0xb8) : (s >> 1))
TEST_F(LibYUVConvertTest, TestRoundToByte) { TEST_F(LibYUVColorTest, TestRoundToByte) {
int allb = 0; int allb = 0;
int count = benchmark_width_ * benchmark_height_; int count = benchmark_width_ * benchmark_height_;
for (int i = 0; i < benchmark_iterations_; ++i) { for (int i = 0; i < benchmark_iterations_; ++i) {
...@@ -339,7 +339,7 @@ static void YUVJToRGBReference(int y, int u, int v, int* r, int* g, int* b) { ...@@ -339,7 +339,7 @@ static void YUVJToRGBReference(int y, int u, int v, int* r, int* g, int* b) {
*b = RoundToByte(y - (u - 128) * -1.77200); *b = RoundToByte(y - (u - 128) * -1.77200);
} }
TEST_F(LibYUVConvertTest, TestYUV) { TEST_F(LibYUVColorTest, TestYUV) {
int r0, g0, b0, r1, g1, b1; int r0, g0, b0, r1, g1, b1;
// cyan (less red) // cyan (less red)
...@@ -385,7 +385,7 @@ TEST_F(LibYUVConvertTest, TestYUV) { ...@@ -385,7 +385,7 @@ TEST_F(LibYUVConvertTest, TestYUV) {
} }
} }
TEST_F(LibYUVConvertTest, TestGreyYUV) { TEST_F(LibYUVColorTest, TestGreyYUV) {
int r0, g0, b0, r1, g1, b1, r2, g2, b2; int r0, g0, b0, r1, g1, b1, r2, g2, b2;
// black // black
...@@ -464,7 +464,7 @@ static void PrintHistogram(int rh[256], int gh[256], int bh[256]) { ...@@ -464,7 +464,7 @@ static void PrintHistogram(int rh[256], int gh[256], int bh[256]) {
printf("\n"); printf("\n");
} }
TEST_F(LibYUVConvertTest, TestFullYUV) { TEST_F(LibYUVColorTest, TestFullYUV) {
int rh[256] = { 0, }, gh[256] = { 0, }, bh[256] = { 0, }; int rh[256] = { 0, }, gh[256] = { 0, }, bh[256] = { 0, };
for (int u = 0; u < 256; ++u) { for (int u = 0; u < 256; ++u) {
for (int v = 0; v < 256; ++v) { for (int v = 0; v < 256; ++v) {
...@@ -485,7 +485,7 @@ TEST_F(LibYUVConvertTest, TestFullYUV) { ...@@ -485,7 +485,7 @@ TEST_F(LibYUVConvertTest, TestFullYUV) {
PrintHistogram(rh, gh, bh); PrintHistogram(rh, gh, bh);
} }
TEST_F(LibYUVConvertTest, TestFullYUVJ) { TEST_F(LibYUVColorTest, TestFullYUVJ) {
int rh[256] = { 0, }, gh[256] = { 0, }, bh[256] = { 0, }; int rh[256] = { 0, }, gh[256] = { 0, }, bh[256] = { 0, };
for (int u = 0; u < 256; ++u) { for (int u = 0; u < 256; ++u) {
for (int v = 0; v < 256; ++v) { for (int v = 0; v < 256; ++v) {
...@@ -506,7 +506,7 @@ TEST_F(LibYUVConvertTest, TestFullYUVJ) { ...@@ -506,7 +506,7 @@ TEST_F(LibYUVConvertTest, TestFullYUVJ) {
PrintHistogram(rh, gh, bh); PrintHistogram(rh, gh, bh);
} }
TEST_F(LibYUVConvertTest, TestGreyYUVJ) { TEST_F(LibYUVColorTest, TestGreyYUVJ) {
int r0, g0, b0, r1, g1, b1, r2, g2, b2; int r0, g0, b0, r1, g1, b1, r2, g2, b2;
// black // black
......
This diff is collapsed.
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
int fastrand_seed = 0xfb; int fastrand_seed = 0xfb;
LibYUVConvertTest::LibYUVConvertTest() : rotate_max_w_(128), rotate_max_h_(128), LibYUVConvertTest::LibYUVConvertTest() :
benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128),
benchmark_height_(72), disable_cpu_flags_(0) { benchmark_height_(72), disable_cpu_flags_(0) {
const char* repeat = getenv("LIBYUV_REPEAT"); const char* repeat = getenv("LIBYUV_REPEAT");
...@@ -55,7 +55,7 @@ LibYUVConvertTest::LibYUVConvertTest() : rotate_max_w_(128), rotate_max_h_(128), ...@@ -55,7 +55,7 @@ LibYUVConvertTest::LibYUVConvertTest() : rotate_max_w_(128), rotate_max_h_(128),
static_cast<double>(benchmark_iterations_) + 1279.0) / 1280.0); static_cast<double>(benchmark_iterations_) + 1279.0) / 1280.0);
} }
LibYUVScaleTest::LibYUVScaleTest() : rotate_max_w_(128), rotate_max_h_(128), LibYUVColorTest::LibYUVColorTest() :
benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128),
benchmark_height_(72), disable_cpu_flags_(0) { benchmark_height_(72), disable_cpu_flags_(0) {
const char* repeat = getenv("LIBYUV_REPEAT"); const char* repeat = getenv("LIBYUV_REPEAT");
...@@ -90,7 +90,7 @@ LibYUVScaleTest::LibYUVScaleTest() : rotate_max_w_(128), rotate_max_h_(128), ...@@ -90,7 +90,7 @@ LibYUVScaleTest::LibYUVScaleTest() : rotate_max_w_(128), rotate_max_h_(128),
static_cast<double>(benchmark_iterations_) + 1279.0) / 1280.0); static_cast<double>(benchmark_iterations_) + 1279.0) / 1280.0);
} }
LibYUVRotateTest::LibYUVRotateTest() : rotate_max_w_(128), rotate_max_h_(128), LibYUVScaleTest::LibYUVScaleTest() :
benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128),
benchmark_height_(72), disable_cpu_flags_(0) { benchmark_height_(72), disable_cpu_flags_(0) {
const char* repeat = getenv("LIBYUV_REPEAT"); const char* repeat = getenv("LIBYUV_REPEAT");
...@@ -125,7 +125,7 @@ LibYUVRotateTest::LibYUVRotateTest() : rotate_max_w_(128), rotate_max_h_(128), ...@@ -125,7 +125,7 @@ LibYUVRotateTest::LibYUVRotateTest() : rotate_max_w_(128), rotate_max_h_(128),
static_cast<double>(benchmark_iterations_) + 1279.0) / 1280.0); static_cast<double>(benchmark_iterations_) + 1279.0) / 1280.0);
} }
LibYUVPlanarTest::LibYUVPlanarTest() : rotate_max_w_(128), rotate_max_h_(128), LibYUVRotateTest::LibYUVRotateTest() :
benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128),
benchmark_height_(72), disable_cpu_flags_(0) { benchmark_height_(72), disable_cpu_flags_(0) {
const char* repeat = getenv("LIBYUV_REPEAT"); const char* repeat = getenv("LIBYUV_REPEAT");
...@@ -160,7 +160,42 @@ LibYUVPlanarTest::LibYUVPlanarTest() : rotate_max_w_(128), rotate_max_h_(128), ...@@ -160,7 +160,42 @@ LibYUVPlanarTest::LibYUVPlanarTest() : rotate_max_w_(128), rotate_max_h_(128),
static_cast<double>(benchmark_iterations_) + 1279.0) / 1280.0); static_cast<double>(benchmark_iterations_) + 1279.0) / 1280.0);
} }
LibYUVBaseTest::LibYUVBaseTest() : rotate_max_w_(128), rotate_max_h_(128), 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<int>((
static_cast<double>(Abs(benchmark_width_)) *
static_cast<double>(Abs(benchmark_height_)) *
static_cast<double>(benchmark_iterations_) + 255.0) / 256.0);
benchmark_pixels_div1280_ = static_cast<int>((
static_cast<double>(Abs(benchmark_width_)) *
static_cast<double>(Abs(benchmark_height_)) *
static_cast<double>(benchmark_iterations_) + 1279.0) / 1280.0);
}
LibYUVBaseTest::LibYUVBaseTest() :
benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128),
benchmark_height_(72), disable_cpu_flags_(0) { benchmark_height_(72), disable_cpu_flags_(0) {
const char* repeat = getenv("LIBYUV_REPEAT"); const char* repeat = getenv("LIBYUV_REPEAT");
......
...@@ -72,13 +72,22 @@ static inline void MemRandomize(uint8* dst, int64 len) { ...@@ -72,13 +72,22 @@ static inline void MemRandomize(uint8* dst, int64 len) {
} }
} }
class LibYUVColorTest : public ::testing::Test {
protected:
LibYUVColorTest();
int benchmark_iterations_; // Default 1. Use 1000 for benchmarking.
int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA.
int benchmark_height_; // Default 720. Use 360 for benchmarking VGA.
int benchmark_pixels_div256_; // Total pixels to benchmark / 256.
int benchmark_pixels_div1280_; // Total pixels to benchmark / 1280.
int disable_cpu_flags_; // Default 0. Use -1 for benchmarking.
};
class LibYUVConvertTest : public ::testing::Test { class LibYUVConvertTest : public ::testing::Test {
protected: protected:
LibYUVConvertTest(); LibYUVConvertTest();
const int rotate_max_w_;
const int rotate_max_h_;
int benchmark_iterations_; // Default 1. Use 1000 for benchmarking. int benchmark_iterations_; // Default 1. Use 1000 for benchmarking.
int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA. int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA.
int benchmark_height_; // Default 720. Use 360 for benchmarking VGA. int benchmark_height_; // Default 720. Use 360 for benchmarking VGA.
...@@ -91,9 +100,6 @@ class LibYUVScaleTest : public ::testing::Test { ...@@ -91,9 +100,6 @@ class LibYUVScaleTest : public ::testing::Test {
protected: protected:
LibYUVScaleTest(); LibYUVScaleTest();
const int rotate_max_w_;
const int rotate_max_h_;
int benchmark_iterations_; // Default 1. Use 1000 for benchmarking. int benchmark_iterations_; // Default 1. Use 1000 for benchmarking.
int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA. int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA.
int benchmark_height_; // Default 720. Use 360 for benchmarking VGA. int benchmark_height_; // Default 720. Use 360 for benchmarking VGA.
...@@ -106,9 +112,6 @@ class LibYUVRotateTest : public ::testing::Test { ...@@ -106,9 +112,6 @@ class LibYUVRotateTest : public ::testing::Test {
protected: protected:
LibYUVRotateTest(); LibYUVRotateTest();
const int rotate_max_w_;
const int rotate_max_h_;
int benchmark_iterations_; // Default 1. Use 1000 for benchmarking. int benchmark_iterations_; // Default 1. Use 1000 for benchmarking.
int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA. int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA.
int benchmark_height_; // Default 720. Use 360 for benchmarking VGA. int benchmark_height_; // Default 720. Use 360 for benchmarking VGA.
...@@ -121,9 +124,6 @@ class LibYUVPlanarTest : public ::testing::Test { ...@@ -121,9 +124,6 @@ class LibYUVPlanarTest : public ::testing::Test {
protected: protected:
LibYUVPlanarTest(); LibYUVPlanarTest();
const int rotate_max_w_;
const int rotate_max_h_;
int benchmark_iterations_; // Default 1. Use 1000 for benchmarking. int benchmark_iterations_; // Default 1. Use 1000 for benchmarking.
int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA. int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA.
int benchmark_height_; // Default 720. Use 360 for benchmarking VGA. int benchmark_height_; // Default 720. Use 360 for benchmarking VGA.
...@@ -136,9 +136,6 @@ class LibYUVBaseTest : public ::testing::Test { ...@@ -136,9 +136,6 @@ class LibYUVBaseTest : public ::testing::Test {
protected: protected:
LibYUVBaseTest(); LibYUVBaseTest();
const int rotate_max_w_;
const int rotate_max_h_;
int benchmark_iterations_; // Default 1. Use 1000 for benchmarking. int benchmark_iterations_; // Default 1. Use 1000 for benchmarking.
int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA. int benchmark_width_; // Default 1280. Use 640 for benchmarking VGA.
int benchmark_height_; // Default 720. Use 360 for benchmarking VGA. int benchmark_height_; // Default 720. Use 360 for benchmarking VGA.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment