From 29201324de188dc3f88d835a90af18e10f5ff868 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Mon, 6 Aug 2018 18:17:23 +0000 Subject: Small optimization in CJBig2_Image::SubImage() We can use the memcpy() path whenever byte aligned. Split code into helper methods. Add test for fast path specifically. Change-Id: I52f6129b0e788eb2da60536cfa6fce12a0609375 Reviewed-on: https://pdfium-review.googlesource.com/39432 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fxcodec/jbig2/JBig2_Image_unittest.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'core/fxcodec/jbig2/JBig2_Image_unittest.cpp') diff --git a/core/fxcodec/jbig2/JBig2_Image_unittest.cpp b/core/fxcodec/jbig2/JBig2_Image_unittest.cpp index 4b078324e1..13e6eb5691 100644 --- a/core/fxcodec/jbig2/JBig2_Image_unittest.cpp +++ b/core/fxcodec/jbig2/JBig2_Image_unittest.cpp @@ -219,6 +219,15 @@ TEST(fxcodec, JBig2SubImage) { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; + // 1-px wide rectangle in image, offset 16 in x, 1 in y, padded. + uint8_t pattern161[5][8] = { + {0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + }; + // Image size a nice clean power of two. auto img32 = pdfium::MakeUnique( 32, 5, 8, reinterpret_cast(pattern)); @@ -234,6 +243,9 @@ TEST(fxcodec, JBig2SubImage) { auto expected22 = pdfium::MakeUnique( 30, 5, 8, reinterpret_cast(pattern22)); + auto expected161 = pdfium::MakeUnique( + 25, 5, 8, reinterpret_cast(pattern161)); + auto expected_zeros = pdfium::MakeUnique(32, 5); // Empty subimage. @@ -259,6 +271,10 @@ TEST(fxcodec, JBig2SubImage) { sub = img37->SubImage(2, 2, 30, 5); CheckImageEq(expected22.get(), sub.get(), __LINE__); + // Fast path. + sub = img37->SubImage(16, 1, 25, 5); + CheckImageEq(expected161.get(), sub.get(), __LINE__); + // Aligned Sub-image including cruft in stride beyond width. sub = img37->SubImage(32, 0, 32, 5); CheckImageEq(expected_zeros.get(), sub.get(), __LINE__); -- cgit v1.2.3