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 "Benchmark.h" 9#include "SkCanvas.h" 10#include "SkString.h" 11 12class WritePixelsBench : public Benchmark { 13public: 14 WritePixelsBench(SkColorType ct, SkAlphaType at) 15 : fColorType(ct) 16 , fAlphaType(at) 17 , fName("writepix") 18 { 19 switch (ct) { 20 case kRGBA_8888_SkColorType: 21 fName.append("_RGBA"); 22 break; 23 case kBGRA_8888_SkColorType: 24 fName.append("_BGRA"); 25 break; 26 default: 27 SkASSERT(0); 28 break; 29 } 30 switch (at) { 31 case kPremul_SkAlphaType: 32 fName.append("_PM"); 33 break; 34 case kUnpremul_SkAlphaType: 35 fName.append("_UPM"); 36 break; 37 default: 38 SkASSERT(0); 39 break; 40 } 41 } 42 43protected: 44 const char* onGetName() override { 45 return fName.c_str(); 46 } 47 48 void onDraw(int loops, SkCanvas* canvas) override { 49 SkISize size = canvas->getDeviceSize(); 50 51 canvas->clear(0xFFFF0000); 52 53 SkBitmap bmp; 54 bmp.allocN32Pixels(size.width(), size.height()); 55 canvas->readPixels(&bmp, 0, 0); 56 57 SkImageInfo info = SkImageInfo::Make(bmp.width(), bmp.height(), fColorType, fAlphaType); 58 59 for (int loop = 0; loop < loops; ++loop) { 60 canvas->writePixels(info, bmp.getPixels(), bmp.rowBytes(), 0, 0); 61 } 62 } 63 64private: 65 SkColorType fColorType; 66 SkAlphaType fAlphaType; 67 SkString fName; 68 69 typedef Benchmark INHERITED; 70}; 71 72////////////////////////////////////////////////////////////////////////////// 73 74DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kPremul_SkAlphaType);) 75DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kUnpremul_SkAlphaType);) 76