| /* | 
 |  * 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 "Benchmark.h" | 
 | #include "SkBitmap.h" | 
 | #include "SkCanvas.h" | 
 | #include "SkString.h" | 
 |  | 
 | class WritePixelsBench : public Benchmark { | 
 | public: | 
 |     WritePixelsBench(SkColorType ct, SkAlphaType at) | 
 |         : fColorType(ct) | 
 |         , fAlphaType(at) | 
 |         , fName("writepix") | 
 |     { | 
 |         switch (ct) { | 
 |             case kRGBA_8888_SkColorType: | 
 |                 fName.append("_RGBA"); | 
 |                 break; | 
 |             case kBGRA_8888_SkColorType: | 
 |                 fName.append("_BGRA"); | 
 |                 break; | 
 |             default: | 
 |                 SkASSERT(0); | 
 |                 break; | 
 |         } | 
 |         switch (at) { | 
 |             case kPremul_SkAlphaType: | 
 |                 fName.append("_PM"); | 
 |                 break; | 
 |             case kUnpremul_SkAlphaType: | 
 |                 fName.append("_UPM"); | 
 |                 break; | 
 |             default: | 
 |                 SkASSERT(0); | 
 |                 break; | 
 |         } | 
 |     } | 
 |  | 
 | protected: | 
 |     const char* onGetName() override { | 
 |         return fName.c_str(); | 
 |     } | 
 |  | 
 |     void onDraw(int loops, SkCanvas* canvas) override { | 
 |         SkISize size = canvas->getBaseLayerSize(); | 
 |  | 
 |         canvas->clear(0xFFFF0000); | 
 |  | 
 |         SkBitmap bmp; | 
 |         bmp.allocN32Pixels(size.width(), size.height()); | 
 |         canvas->readPixels(bmp, 0, 0); | 
 |  | 
 |         SkImageInfo info = SkImageInfo::Make(bmp.width(), bmp.height(), fColorType, fAlphaType); | 
 |  | 
 |         for (int loop = 0; loop < loops; ++loop) { | 
 |             canvas->writePixels(info, bmp.getPixels(), bmp.rowBytes(), 0, 0); | 
 |         } | 
 |     } | 
 |  | 
 | private: | 
 |     SkColorType fColorType; | 
 |     SkAlphaType fAlphaType; | 
 |     SkString    fName; | 
 |  | 
 |     typedef Benchmark INHERITED; | 
 | }; | 
 |  | 
 | ////////////////////////////////////////////////////////////////////////////// | 
 |  | 
 | DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kPremul_SkAlphaType);) | 
 | DEF_BENCH(return new WritePixelsBench(kRGBA_8888_SkColorType, kUnpremul_SkAlphaType);) |