1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2013 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "bench/Benchmark.h" 9cb93a386Sopenharmony_ci#include "include/core/SkBitmap.h" 10cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 11cb93a386Sopenharmony_ci#include "include/core/SkString.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ci// Time variants of write-pixels 14cb93a386Sopenharmony_ci// [ colortype ][ alphatype ][ colorspace ] 15cb93a386Sopenharmony_ci// Different combinations can trigger fast or slow paths in the impls 16cb93a386Sopenharmony_ci// 17cb93a386Sopenharmony_ciclass WritePixelsBench : public Benchmark { 18cb93a386Sopenharmony_cipublic: 19cb93a386Sopenharmony_ci WritePixelsBench(SkColorType ct, SkAlphaType at, sk_sp<SkColorSpace> cs) 20cb93a386Sopenharmony_ci : fColorType(ct) 21cb93a386Sopenharmony_ci , fAlphaType(at) 22cb93a386Sopenharmony_ci , fCS(cs) 23cb93a386Sopenharmony_ci { 24cb93a386Sopenharmony_ci fName.printf("writepix_%s_%s_%s", 25cb93a386Sopenharmony_ci at == kPremul_SkAlphaType ? "pm" : "um", 26cb93a386Sopenharmony_ci ct == kRGBA_8888_SkColorType ? "rgba" : "bgra", 27cb93a386Sopenharmony_ci cs ? "srgb" : "null"); 28cb93a386Sopenharmony_ci } 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ciprotected: 31cb93a386Sopenharmony_ci const char* onGetName() override { 32cb93a386Sopenharmony_ci return fName.c_str(); 33cb93a386Sopenharmony_ci } 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci void onDraw(int loops, SkCanvas* canvas) override { 36cb93a386Sopenharmony_ci SkISize size = canvas->getBaseLayerSize(); 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci SkImageInfo info = SkImageInfo::Make(size, fColorType, fAlphaType, fCS); 39cb93a386Sopenharmony_ci SkBitmap bmp; 40cb93a386Sopenharmony_ci bmp.allocPixels(info); 41cb93a386Sopenharmony_ci bmp.eraseColor(SK_ColorBLACK); 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci for (int loop = 0; loop < loops; ++loop) { 44cb93a386Sopenharmony_ci canvas->writePixels(info, bmp.getPixels(), bmp.rowBytes(), 0, 0); 45cb93a386Sopenharmony_ci } 46cb93a386Sopenharmony_ci } 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ciprivate: 49cb93a386Sopenharmony_ci SkColorType fColorType; 50cb93a386Sopenharmony_ci SkAlphaType fAlphaType; 51cb93a386Sopenharmony_ci sk_sp<SkColorSpace> fCS; 52cb93a386Sopenharmony_ci SkString fName; 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci using INHERITED = Benchmark; 55cb93a386Sopenharmony_ci}; 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci////////////////////////////////////////////////////////////////////////////// 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ciDEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr);) 60cb93a386Sopenharmony_ciDEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kUnpremul_SkAlphaType, nullptr);) 61cb93a386Sopenharmony_ciDEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeSRGB());) 62cb93a386Sopenharmony_ciDEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kUnpremul_SkAlphaType, SkColorSpace::MakeSRGB());) 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ciDEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kPremul_SkAlphaType, nullptr);) 65cb93a386Sopenharmony_ciDEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kUnpremul_SkAlphaType, nullptr);) 66cb93a386Sopenharmony_ciDEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeSRGB());) 67cb93a386Sopenharmony_ciDEF_BENCH(return new WritePixelsBench(kBGRA_8888_SkColorType, kUnpremul_SkAlphaType, SkColorSpace::MakeSRGB());) 68