| /* | 
 |  * 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<SkColorSpace> 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<SkColorSpace> 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());) |