Make LibYUVConvertTest.TestI400LargeSize skip test on low end arm cpu - detect lack of dot product instruction to infer the cpu is low end - only run the test on higher end arm Bug: 416842099 Change-Id: Idd2dd16a624bbba280cf531644440024b12f7ecf Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6804632 Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
diff --git a/README.chromium b/README.chromium index 0218877..1f07107 100644 --- a/README.chromium +++ b/README.chromium
@@ -1,6 +1,6 @@ Name: libyuv URL: https://chromium.googlesource.com/libyuv/libyuv/ -Version: 1913 +Version: 1914 License: BSD-3-Clause License File: LICENSE Shipped: yes
diff --git a/include/libyuv/version.h b/include/libyuv/version.h index fca53bd..5d06b3b 100644 --- a/include/libyuv/version.h +++ b/include/libyuv/version.h
@@ -11,6 +11,6 @@ #ifndef INCLUDE_LIBYUV_VERSION_H_ #define INCLUDE_LIBYUV_VERSION_H_ -#define LIBYUV_VERSION 1913 +#define LIBYUV_VERSION 1914 #endif // INCLUDE_LIBYUV_VERSION_H_
diff --git a/unit_test/convert_argb_test.cc b/unit_test/convert_argb_test.cc index dee8cb4..c36f37c 100644 --- a/unit_test/convert_argb_test.cc +++ b/unit_test/convert_argb_test.cc
@@ -2808,13 +2808,41 @@ // variant of the conversion function. const int kWidth = 1073741823; const int kHeight = 2; + +#if defined(__aarch64__) + // Infer malloc can accept a large size for cpu with dot product (a76/a55) + int has_large_malloc = TestCpuFlag(kCpuHasNeonDotProd); +#else + int has_large_malloc = 1; +#endif + if (!has_large_malloc) { + printf("WARNING: Skipped. Large allocation may assert for %ld\n", (size_t)kWidth * kHeight); + return; + } + // Allocate one extra column so that the coalesce optimizations do not trigger // in convert_argb.cc (they are triggered only when stride is equal to width). const size_t kStride = kWidth + 1; + + printf("WARNING: attempting to allocate I400 image of %zd bytes\n", (size_t)kWidth * kHeight); + fflush(stdout); align_buffer_page_end(orig_i400, (size_t)kWidth * kHeight); - ASSERT_NE(orig_i400, nullptr); + if (!orig_i400) { + printf("WARNING: unable to allocate I400 image of %zd bytes\n", (size_t)kWidth * kHeight); + fflush(stdout); + return; + } + printf("INFO: allocate I400 image returned %p\n", orig_i400); + fflush(stdout); align_buffer_page_end(dest_argb, (size_t)kWidth * kHeight * 4); - ASSERT_NE(dest_argb, nullptr); + if (!dest_argb) { + printf("WARNING: unable to allocate ARGB image of %zd bytes\n", (size_t)kWidth * kHeight * 4); + fflush(stdout); + free_aligned_buffer_page_end(orig_i400); + return; + } + printf("INFO: allocate ARGB image returned %p\n", dest_argb); + fflush(stdout); for (int i = 0; i < kWidth * kHeight; ++i) { orig_i400[i] = i % 256; }