diff options
author | 2017-06-23 18:05:52 -0400 | |
---|---|---|
committer | 2017-06-24 16:08:23 +0000 | |
commit | d9b1fe02a677ec44bc1c99809f3ee7eb08708137 (patch) | |
tree | a42689274894a457257ac1b067edb7ebe3df8b1c | |
parent | 2e3c955254388927095147e606a1dc2913b80bd1 (diff) |
remove a bit more dead code
Change-Id: I61484672e88d6bb4f75833ee89e7178c4f34d610
Reviewed-on: https://skia-review.googlesource.com/20780
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Herb Derby <herb@google.com>
-rw-r--r-- | bench/SkBlend_optsBench.cpp | 202 | ||||
-rw-r--r-- | gn/bench.gni | 1 | ||||
-rw-r--r-- | gn/tests.gni | 1 | ||||
-rw-r--r-- | src/core/SkOpts.cpp | 3 | ||||
-rw-r--r-- | src/core/SkOpts.h | 4 | ||||
-rw-r--r-- | src/opts/SkBlend_opts.h | 98 | ||||
-rw-r--r-- | src/opts/SkOpts_sse41.cpp | 2 | ||||
-rw-r--r-- | tests/SkBlend_optsTest.cpp | 107 |
8 files changed, 0 insertions, 418 deletions
diff --git a/bench/SkBlend_optsBench.cpp b/bench/SkBlend_optsBench.cpp deleted file mode 100644 index d7ba2bedc2..0000000000 --- a/bench/SkBlend_optsBench.cpp +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright 2016 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include <tuple> - -#include "Benchmark.h" -#include "Resources.h" -#include "SkCpu.h" -#include "SkImage.h" -#include "SkImage_Base.h" -#include "SkNx.h" -#include "SkOpts.h" -#include "SkPM4fPriv.h" -#include "SkString.h" - -#define INNER_LOOPS 10 - -static inline void brute_srcover_srgb_srgb_1(uint32_t* dst, uint32_t src) { - auto d = Sk4f_fromS32(*dst), - s = Sk4f_fromS32( src); - *dst = Sk4f_toS32(s + d * (1.0f - s[3])); -} - -static inline void srcover_srgb_srgb_1(uint32_t* dst, uint32_t src) { - if (src >= 0xFF000000) { - *dst = src; - return; - } - brute_srcover_srgb_srgb_1(dst, src); -} - -static void brute_force_srcover_srgb_srgb( - uint32_t* dst, const uint32_t* const src, int ndst, const int nsrc) { - while (ndst > 0) { - int n = SkTMin(ndst, nsrc); - - for (int i = 0; i < n; i++) { - brute_srcover_srgb_srgb_1(dst++, src[i]); - } - ndst -= n; - } -} - -static void trivial_srcover_srgb_srgb( - uint32_t* dst, const uint32_t* const src, int ndst, const int nsrc) { - while (ndst > 0) { - int n = SkTMin(ndst, nsrc); - - for (int i = 0; i < n; i++) { - srcover_srgb_srgb_1(dst++, src[i]); - } - ndst -= n; - } -} - -static void best_non_simd_srcover_srgb_srgb( - uint32_t* dst, const uint32_t* const src, int ndst, const int nsrc) { - uint64_t* ddst = reinterpret_cast<uint64_t*>(dst); - - auto srcover_srgb_srgb_2 = [](uint32_t* dst, const uint32_t* src) { - srcover_srgb_srgb_1(dst++, *src++); - srcover_srgb_srgb_1(dst, *src); - }; - - while (ndst >0) { - int count = SkTMin(ndst, nsrc); - ndst -= count; - const uint64_t* dsrc = reinterpret_cast<const uint64_t*>(src); - const uint64_t* end = dsrc + (count >> 1); - do { - if ((~*dsrc & 0xFF000000FF000000) == 0) { - do { - *ddst++ = *dsrc++; - } while (dsrc < end && (~*dsrc & 0xFF000000FF000000) == 0); - } else if ((*dsrc & 0xFF000000FF000000) == 0) { - do { - dsrc++; - ddst++; - } while (dsrc < end && (*dsrc & 0xFF000000FF000000) == 0); - } else { - srcover_srgb_srgb_2(reinterpret_cast<uint32_t*>(ddst++), - reinterpret_cast<const uint32_t*>(dsrc++)); - } - } while (dsrc < end); - - if ((count & 1) != 0) { - uint32_t s1; - memcpy(&s1, dsrc, 4); - srcover_srgb_srgb_1(reinterpret_cast<uint32_t*>(ddst), s1); - } - } -} - -class SrcOverVSkOptsBruteForce { -public: - static SkString Name() { return SkString{"VSkOptsBruteForce"}; } - static void BlendN(uint32_t* dst, const uint32_t* src, int count) { - brute_force_srcover_srgb_srgb(dst, src, count, count); - } -}; - -class SrcOverVSkOptsTrivial { -public: - static SkString Name() { return SkString{"VSkOptsTrivial"}; } - static void BlendN(uint32_t* dst, const uint32_t* src, int count) { - trivial_srcover_srgb_srgb(dst, src, count, count); - } -}; - -class SrcOverVSkOptsNonSimdCore { -public: - static SkString Name() { return SkString{"VSkOptsNonSimdCore"}; } - static void BlendN(uint32_t* dst, const uint32_t* src, int count) { - best_non_simd_srcover_srgb_srgb(dst, src, count, count); - } -}; - -class SrcOverVSkOptsDefault { -public: - static SkString Name() { return SkString{"VSkOptsDefault"}; } - static void BlendN(uint32_t* dst, const uint32_t* src, int count) { - SkOpts::srcover_srgb_srgb(dst, src, count, count); - } -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -template <typename Blender> -class LinearSrcOverBench : public Benchmark { -public: - LinearSrcOverBench(const char* fileName) : fFileName(fileName) { - fName = "LinearSrcOver_"; - fName.append(fileName); - fName.append(Blender::Name()); - } - -protected: - bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } - const char* onGetName() override { return fName.c_str(); } - - void onPreDraw(SkCanvas*) override { - if (!fPixmap.addr()) { - sk_sp<SkImage> image = GetResourceAsImage(fFileName.c_str()); - SkBitmap bm; - SkColorSpace* legacyColorSpace = nullptr; - if (!as_IB(image)->getROPixels(&bm, legacyColorSpace)) { - SkFAIL("Could not read resource"); - } - bm.peekPixels(&fPixmap); - fCount = fPixmap.rowBytesAsPixels(); - fDst.reset(fCount); - sk_bzero(fDst.get(), fPixmap.rowBytes()); - } - } - - void onDraw(int loops, SkCanvas*) override { - SkASSERT(fPixmap.colorType() == kN32_SkColorType); - - const int width = fPixmap.rowBytesAsPixels(); - - for (int i = 0; i < loops * INNER_LOOPS; ++i) { - const uint32_t* src = fPixmap.addr32(); - for (int y = 0; y < fPixmap.height(); y++) { - Blender::BlendN(fDst.get(), src, width); - src += width; - } - } - } - - void onPostDraw(SkCanvas*) override { - // Make sure the compiler does not optimize away the operation. - volatile uint32_t v = 0; - for (int i = 0; i < fCount; i++) { - v ^= fDst[i]; - } - } - -private: - int fCount; - SkAutoTArray<uint32_t> fDst; - SkString fFileName; - SkString fName; - SkPixmap fPixmap; - - typedef Benchmark INHERITED; -}; - -#define BENCHES(fileName) \ - DEF_BENCH( return new LinearSrcOverBench<SrcOverVSkOptsBruteForce>(fileName); ) \ - DEF_BENCH( return new LinearSrcOverBench<SrcOverVSkOptsTrivial>(fileName); ) \ - DEF_BENCH( return new LinearSrcOverBench<SrcOverVSkOptsNonSimdCore>(fileName); ) \ - DEF_BENCH( return new LinearSrcOverBench<SrcOverVSkOptsDefault>(fileName); ) - -BENCHES("yellow_rose.png") -BENCHES("baby_tux.png") -BENCHES("plane.png") -BENCHES("mandrill_512.png") -BENCHES("iconstrip.png") diff --git a/gn/bench.gni b/gn/bench.gni index a61fdbfd21..47a1d823a4 100644 --- a/gn/bench.gni +++ b/gn/bench.gni @@ -106,7 +106,6 @@ bench_sources = [ "$_bench/ShadowBench.cpp", "$_bench/ShapesBench.cpp", "$_bench/Sk4fBench.cpp", - "$_bench/SkBlend_optsBench.cpp", "$_bench/SkGlyphCacheBench.cpp", "$_bench/SKPAnimationBench.cpp", "$_bench/SKPBench.cpp", diff --git a/gn/tests.gni b/gn/tests.gni index 9b5613aa4c..35c43c5c3f 100644 --- a/gn/tests.gni +++ b/gn/tests.gni @@ -200,7 +200,6 @@ tests_sources = [ "$_tests/SizeTest.cpp", "$_tests/Sk4x4fTest.cpp", "$_tests/SkBase64Test.cpp", - "$_tests/SkBlend_optsTest.cpp", "$_tests/skbug5221.cpp", "$_tests/skbug6389.cpp", "$_tests/skbug6653.cpp", diff --git a/src/core/SkOpts.cpp b/src/core/SkOpts.cpp index 33c3690f4e..2b7f1f2ed8 100644 --- a/src/core/SkOpts.cpp +++ b/src/core/SkOpts.cpp @@ -37,7 +37,6 @@ #endif #include "SkBitmapFilter_opts.h" -#include "SkBlend_opts.h" #include "SkBlitMask_opts.h" #include "SkBlitRow_opts.h" #include "SkBlurImageFilter_opts.h" @@ -80,8 +79,6 @@ namespace SkOpts { DEFINE_DEFAULT(inverted_CMYK_to_RGB1); DEFINE_DEFAULT(inverted_CMYK_to_BGR1); - DEFINE_DEFAULT(srcover_srgb_srgb); - DEFINE_DEFAULT(memset16); DEFINE_DEFAULT(memset32); DEFINE_DEFAULT(memset64); diff --git a/src/core/SkOpts.h b/src/core/SkOpts.h index a4f1ea284c..92d6f284ca 100644 --- a/src/core/SkOpts.h +++ b/src/core/SkOpts.h @@ -49,10 +49,6 @@ namespace SkOpts { inverted_CMYK_to_RGB1, // i.e. convert color space inverted_CMYK_to_BGR1; // i.e. convert color space - // Blend ndst src pixels over dst, where both src and dst point to sRGB pixels (RGBA or BGRA). - // If nsrc < ndst, we loop over src to create a pattern. - extern void (*srcover_srgb_srgb)(uint32_t* dst, const uint32_t* src, int ndst, int nsrc); - extern void (*memset16)(uint16_t[], uint16_t, int); extern void (*memset32)(uint32_t[], uint32_t, int); extern void (*memset64)(uint64_t[], uint64_t, int); diff --git a/src/opts/SkBlend_opts.h b/src/opts/SkBlend_opts.h deleted file mode 100644 index 86ae50288a..0000000000 --- a/src/opts/SkBlend_opts.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2016 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* -ninja -C out/Release dm nanobench ; and ./out/Release/dm --match Blend_opts ; and ./out/Release/nanobench --samples 300 --nompd --match LinearSrcOver -q - */ - -#ifndef SkBlend_opts_DEFINED -#define SkBlend_opts_DEFINED - -#include "SkNx.h" -#include "SkPM4fPriv.h" - -#if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE41 - #include <immintrin.h> -#endif - -namespace SK_OPTS_NS { - -static inline void srcover_srgb_srgb_1(uint32_t* dst, uint32_t src) { - if (src >= 0xFF000000) { - *dst = src; - return; - } - auto d = Sk4f_fromS32(*dst), - s = Sk4f_fromS32( src); - *dst = Sk4f_toS32(s + d * (1.0f - s[3])); -} - -static inline void srcover_srgb_srgb_4(uint32_t* dst, const uint32_t* src) { - srcover_srgb_srgb_1(dst++, *src++); - srcover_srgb_srgb_1(dst++, *src++); - srcover_srgb_srgb_1(dst++, *src++); - srcover_srgb_srgb_1(dst , *src ); -} - -#if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE41 - - static inline __m128i load(const uint32_t* p) { - return _mm_loadu_si128(reinterpret_cast<const __m128i*>(p)); - } - - static inline void store(uint32_t* p, __m128i v) { - _mm_storeu_si128(reinterpret_cast<__m128i*>(p), v); - } - - static void srcover_srgb_srgb( - uint32_t* dst, const uint32_t* const srcStart, int ndst, const int nsrc) { - const __m128i alphaMask = _mm_set1_epi32(0xFF000000); - while (ndst > 0) { - int count = SkTMin(ndst, nsrc); - ndst -= count; - const uint32_t* src = srcStart; - const uint32_t* end = dst + (count & ~3); - - while (dst < end) { - __m128i pixels = load(src); - - if (_mm_testc_si128(pixels, alphaMask)) { - store(dst, pixels); - } else if (!_mm_testz_si128(pixels, alphaMask)) { - srcover_srgb_srgb_4(dst, src); - } - - dst += 4; - src += 4; - } - - count = count & 3; - while (count-- > 0) { - srcover_srgb_srgb_1(dst++, *src++); - } - } - } - -#else - - static void srcover_srgb_srgb( - uint32_t* dst, const uint32_t* const src, int ndst, const int nsrc) { - while (ndst > 0) { - int n = SkTMin(ndst, nsrc); - - for (int i = 0; i < n; i++) { - srcover_srgb_srgb_1(dst++, src[i]); - } - ndst -= n; - } - } - -#endif - -} // namespace SK_OPTS_NS - -#endif//SkBlend_opts_DEFINED diff --git a/src/opts/SkOpts_sse41.cpp b/src/opts/SkOpts_sse41.cpp index 17ce0668ff..6fd7c3c3a7 100644 --- a/src/opts/SkOpts_sse41.cpp +++ b/src/opts/SkOpts_sse41.cpp @@ -10,14 +10,12 @@ #define SK_OPTS_NS sse41 #include "SkBlurImageFilter_opts.h" #include "SkBlitRow_opts.h" -#include "SkBlend_opts.h" namespace SkOpts { void Init_sse41() { box_blur_xx = sse41::box_blur_xx; box_blur_xy = sse41::box_blur_xy; box_blur_yx = sse41::box_blur_yx; - srcover_srgb_srgb = sse41::srcover_srgb_srgb; blit_row_s32a_opaque = sse41::blit_row_s32a_opaque; } } diff --git a/tests/SkBlend_optsTest.cpp b/tests/SkBlend_optsTest.cpp deleted file mode 100644 index f8cf2d83de..0000000000 --- a/tests/SkBlend_optsTest.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2016 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include <string> -#include <tuple> -#include <vector> -#include "Resources.h" -#include "SkCpu.h" -#include "SkImage.h" -#include "SkImage_Base.h" -#include "SkOpts.h" -#include "SkPM4fPriv.h" -#include "SkNx.h" -#include "Test.h" - -typedef void (*Blender)(uint32_t* dst, const uint32_t* const srcStart, int ndst, const int nsrc); - -static inline void srcover_srgb_srgb_1(uint32_t* dst, uint32_t src) { - auto d = Sk4f_fromS32(*dst), - s = Sk4f_fromS32( src); - *dst = Sk4f_toS32(s + d * (1.0f - s[3])); -} - -static void brute_force_srcover_srgb_srgb( - uint32_t* dst, const uint32_t* const src, int ndst, const int nsrc) { - while (ndst > 0) { - int n = SkTMin(ndst, nsrc); - - for (int i = 0; i < n; i++) { - srcover_srgb_srgb_1(dst++, src[i]); - } - ndst -= n; - } -} - -static SkString mismatch_message(std::string resourceName, int x, int y, - uint32_t src, uint32_t good, uint32_t bad) { - return SkStringPrintf( - "%s - missmatch at %d, %d src: %08x good: %08x bad: %08x", - resourceName.c_str(), x, y, src, good, bad); -} - -static void test_blender(std::string resourceName, skiatest::Reporter* reporter) { - std::string fileName = resourceName + ".png"; - sk_sp<SkImage> image = GetResourceAsImage(fileName.c_str()); - if (image == nullptr) { - ERRORF(reporter, "image is NULL"); - return; - } - SkBitmap bm; - sk_sp<SkColorSpace> srgbColorSpace = SkColorSpace::MakeSRGB(); - if (!as_IB(image)->getROPixels(&bm, srgbColorSpace.get())) { - ERRORF(reporter, "Could not read resource"); - return; - } - - SkPixmap pixmap; - bm.peekPixels(&pixmap); - SkASSERTF(pixmap.colorType() == kN32_SkColorType, "colorType: %d", pixmap.colorType()); - SkASSERT(pixmap.alphaType() != kUnpremul_SkAlphaType); - const uint32_t* src = pixmap.addr32(); - const int width = pixmap.rowBytesAsPixels(); - SkASSERT(width > 0); - SkASSERT(width < 4000); - SkAutoTArray<uint32_t> correctDst(width); - SkAutoTArray<uint32_t> testDst(width); - - for (int y = 0; y < pixmap.height(); y++) { - // TODO: zero is not the most interesting dst to test srcover... - sk_bzero(correctDst.get(), width * sizeof(uint32_t)); - sk_bzero(testDst.get(), width * sizeof(uint32_t)); - brute_force_srcover_srgb_srgb(correctDst.get(), src, width, width); - SkOpts:: srcover_srgb_srgb( testDst.get(), src, width, width); - for (int x = 0; x < width; x++) { - REPORTER_ASSERT_MESSAGE( - reporter, correctDst[x] == testDst[x], - mismatch_message(resourceName, x, y, src[x], correctDst[x], testDst[x])); - if (correctDst[x] != testDst[x]) break; - } - src += width; - } -} - -DEF_TEST(SkBlend_optsCheck, reporter) { - std::vector<std::string> testResources = { - "yellow_rose", "baby_tux", "plane", "mandrill_512", "iconstrip" - }; - - for (auto& resourceName : testResources) { - test_blender(resourceName, reporter); - } -} - -DEF_TEST(SkBlend_optsSqrtCheck, reporter) { - for (int c = 0; c < 256; c++) { - Sk4f i{(float)c}; - Sk4f ii = i * i; - Sk4f s = ii.sqrt() + 0.5f; - Sk4f sf = s.floor(); - REPORTER_ASSERT_MESSAGE( - reporter, i[0] == sf[0], SkStringPrintf("i: %f, s: %f", i[0], sf[0])); - } -} |