/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "bench/Benchmark.h" #include "include/core/SkBitmap.h" #include "include/core/SkCanvas.h" #include "include/core/SkColorSpace.h" #include "include/core/SkString.h" // Time variants of write-pixels // [ colortype ][ alphatype ][ colorspace ] // Different combinations can trigger fast or slow paths in the impls // class WritePixelsBench : public Benchmark { public: WritePixelsBench(SkColorType ct, SkAlphaType at, sk_sp cs) : fColorType(ct) , fAlphaType(at) , fCS(cs) { fName.printf("writepix_%s_%s_%s", at == kPremul_SkAlphaType ? "pm" : "um", ct == kRGBA_8888_SkColorType ? "rgba" : "bgra", cs ? "srgb" : "null"); } protected: const char* onGetName() override { return fName.c_str(); } void onDraw(int loops, SkCanvas* canvas) override { SkISize size = canvas->getBaseLayerSize(); SkImageInfo info = SkImageInfo::Make(size, fColorType, fAlphaType, fCS); SkBitmap bmp; bmp.allocPixels(info); bmp.eraseColor(SK_ColorBLACK); for (int loop = 0; loop < loops; ++loop) { canvas->writePixels(info, bmp.getPixels(), bmp.rowBytes(), 0, 0); } } private: SkColorType fColorType; SkAlphaType fAlphaType; sk_sp fCS; SkString fName; using INHERITED = Benchmark; }; ////////////////////////////////////////////////////////////////////////////// DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr);) DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kUnpremul_SkAlphaType, nullptr);) DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeSRGB());) DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kUnpremul_SkAlphaType, SkColorSpace::MakeSRGB());) DEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kPremul_SkAlphaType, nullptr);) DEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kUnpremul_SkAlphaType, nullptr);) DEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeSRGB());) DEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kUnpremul_SkAlphaType, SkColorSpace::MakeSRGB());)