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