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 12 class WritePixelsBench : public Benchmark { 13 public: WritePixelsBench(SkColorType ct,SkAlphaType at)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 43 protected: onGetName()44 const char* onGetName() override { 45 return fName.c_str(); 46 } 47 onDraw(const int loops,SkCanvas * canvas)48 void onDraw(const 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 64 private: 65 SkColorType fColorType; 66 SkAlphaType fAlphaType; 67 SkString fName; 68 69 typedef Benchmark INHERITED; 70 }; 71 72 ////////////////////////////////////////////////////////////////////////////// 73 74 DEF_BENCH( return SkNEW_ARGS(WritePixelsBench, (kRGBA_8888_SkColorType, kPremul_SkAlphaType)); ) 75 DEF_BENCH( return SkNEW_ARGS(WritePixelsBench, (kRGBA_8888_SkColorType, kUnpremul_SkAlphaType)); ) 76