155c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein/* 255c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein * Copyright 2016 Google Inc. 355c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein * 455c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein * Use of this source code is governed by a BSD-style license that can be 555c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein * found in the LICENSE file. 655c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein */ 755c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein 855c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein#include "Benchmark.h" 955c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein#include "SkOpts.h" 1055c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein 1155c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtkleinclass SwizzleBench : public Benchmark { 1255c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtkleinpublic: 138bf7b79cf9776b4edb3f6810e5ab8c80c49d3480mtklein SwizzleBench(const char* name, SkOpts::Swizzle_8888 fn) : fName(name), fFn(fn) {} 1455c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein 1555c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } 1655c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein const char* onGetName() override { return fName; } 1755c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein void onDraw(int loops, SkCanvas*) override { 1855c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein static const int K = 1023; // Arbitrary, but nice to be a non-power-of-two to trip up SIMD. 1955c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein uint32_t dst[K], src[K]; 2055c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein while (loops --> 0) { 2155c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein fFn(dst, src, K); 2255c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein } 2355c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein } 2455c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtkleinprivate: 2555c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein const char* fName; 268bf7b79cf9776b4edb3f6810e5ab8c80c49d3480mtklein SkOpts::Swizzle_8888 fFn; 2755c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein}; 2855c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein 2955c86abedc7dcc76f5f04a256e46bb3bb065b2cbmtklein 308bf7b79cf9776b4edb3f6810e5ab8c80c49d3480mtkleinDEF_BENCH(return new SwizzleBench("SkOpts::RGBA_to_rgbA", SkOpts::RGBA_to_rgbA)); 318bf7b79cf9776b4edb3f6810e5ab8c80c49d3480mtkleinDEF_BENCH(return new SwizzleBench("SkOpts::RGBA_to_bgrA", SkOpts::RGBA_to_bgrA)); 328bf7b79cf9776b4edb3f6810e5ab8c80c49d3480mtkleinDEF_BENCH(return new SwizzleBench("SkOpts::RGBA_to_BGRA", SkOpts::RGBA_to_BGRA)); 33f1b8b6ae34e5a1f4b29e423401da39f88f0c117amsarettDEF_BENCH(return new SwizzleBench("SkOpts::RGB_to_RGB1", SkOpts::RGB_to_RGB1)); 34f1b8b6ae34e5a1f4b29e423401da39f88f0c117amsarettDEF_BENCH(return new SwizzleBench("SkOpts::RGB_to_BGR1", SkOpts::RGB_to_BGR1)); 352eff71c9b5f984b58961e5a6b4e66774c4385224msarettDEF_BENCH(return new SwizzleBench("SkOpts::gray_to_RGB1", SkOpts::gray_to_RGB1)); 36095742419d0277a4fb0d499a05ff29b7506f1c5emsarettDEF_BENCH(return new SwizzleBench("SkOpts::grayA_to_RGBA", SkOpts::grayA_to_RGBA)); 37095742419d0277a4fb0d499a05ff29b7506f1c5emsarettDEF_BENCH(return new SwizzleBench("SkOpts::grayA_to_rgbA", SkOpts::grayA_to_rgbA)); 38c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarettDEF_BENCH(return new SwizzleBench("SkOpts::inverted_CMYK_to_RGB1", SkOpts::inverted_CMYK_to_RGB1)); 39c5c322d8ecfc05718f9f04360956c4f1f9dc33c1msarettDEF_BENCH(return new SwizzleBench("SkOpts::inverted_CMYK_to_BGR1", SkOpts::inverted_CMYK_to_BGR1)); 40