Home | History | Annotate | Download | only in bench
      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:
     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:
     44     virtual const char* onGetName() SK_OVERRIDE {
     45         return fName.c_str();
     46     }
     47 
     48     virtual void onDraw(const int loops, SkCanvas* canvas) SK_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