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>
diff --git a/bench/SkBlend_optsBench.cpp b/bench/SkBlend_optsBench.cpp
deleted file mode 100644
index d7ba2be..0000000
--- 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 a61fdbf..47a1d82 100644
--- a/gn/bench.gni
+++ b/gn/bench.gni
@@ -106,7 +106,6 @@
   "$_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 9b5613a..35c43c5 100644
--- a/gn/tests.gni
+++ b/gn/tests.gni
@@ -200,7 +200,6 @@
   "$_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 33c3690..2b7f1f2 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 @@
     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 a4f1ea2..92d6f28 100644
--- a/src/core/SkOpts.h
+++ b/src/core/SkOpts.h
@@ -49,10 +49,6 @@
                         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 86ae502..0000000
--- 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 17ce066..6fd7c3c 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 f8cf2d8..0000000
--- 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]));
-    }
-}