180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc. 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkBenchmark.h" 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkBitmap.h" 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPaint.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkCanvas.h" 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkColorPriv.h" 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkRandom.h" 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkString.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic const char* gConfigName[] = { 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru "ERROR", "a1", "a8", "index8", "565", "4444", "8888" 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic int conv6ToByte(int x) { 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return x * 0xFF / 5; 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic int convByteTo6(int x) { 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return x * 5 / 255; 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic uint8_t compute666Index(SkPMColor c) { 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int r = SkGetPackedR32(c); 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int g = SkGetPackedG32(c); 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int b = SkGetPackedB32(c); 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return convByteTo6(r) * 36 + convByteTo6(g) * 6 + convByteTo6(b); 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void convertToIndex666(const SkBitmap& src, SkBitmap* dst) { 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkColorTable* ctable = new SkColorTable(216); 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPMColor* colors = ctable->lockColors(); 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // rrr ggg bbb 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int r = 0; r < 6; r++) { 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int rr = conv6ToByte(r); 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int g = 0; g < 6; g++) { 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int gg = conv6ToByte(g); 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int b = 0; b < 6; b++) { 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int bb = conv6ToByte(b); 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *colors++ = SkPreMultiplyARGB(0xFF, rr, gg, bb); 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru ctable->unlockColors(true); 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dst->setConfig(SkBitmap::kIndex8_Config, src.width(), src.height()); 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dst->allocPixels(ctable); 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru ctable->unref(); 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAutoLockPixels alps(src); 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAutoLockPixels alpd(*dst); 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int y = 0; y < src.height(); y++) { 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkPMColor* srcP = src.getAddr32(0, y); 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru uint8_t* dstP = dst->getAddr8(0, y); 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int x = src.width() - 1; x >= 0; --x) { 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *dstP++ = compute666Index(*srcP++); 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* Variants for bitmaps 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru - src depth (32 w+w/o alpha), 565, 4444, index, a8 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru - paint options: filtering, dither, alpha 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru - matrix options: translate, scale, rotate, persp 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru - tiling: none, repeat, mirror, clamp 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass BitmapBench : public SkBenchmark { 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkBitmap fBitmap; 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPaint fPaint; 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool fIsOpaque; 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool fForceUpdate; //bitmap marked as dirty before each draw. forces bitmap to be updated on device cache 817839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bool fIsVolatile; 827839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkBitmap::Config fConfig; 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString fName; 8458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger enum { BICUBIC_DUR_SCALE = 20 }; 8558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger enum { N = SkBENCHLOOP(15 * BICUBIC_DUR_SCALE) }; 867839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger enum { W = 128 }; 877839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger enum { H = 128 }; 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru BitmapBench(void* param, bool isOpaque, SkBitmap::Config c, 9058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger bool forceUpdate = false, bool bitmapVolatile = false) 917839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger : INHERITED(param) 927839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger , fIsOpaque(isOpaque) 937839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger , fForceUpdate(forceUpdate) 947839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger , fIsVolatile(bitmapVolatile) 957839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger , fConfig(c) { 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected: 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual const char* onGetName() { 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fName.set("bitmap"); 1017839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fName.appendf("_%s%s", gConfigName[fConfig], 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fIsOpaque ? "" : "_A"); 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (fForceUpdate) 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fName.append("_update"); 1057839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (fIsVolatile) 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fName.append("_volatile"); 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fName.c_str(); 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1117839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger virtual void onPreDraw() { 1127839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkBitmap bm; 1137839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 1147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (SkBitmap::kIndex8_Config == fConfig) { 1157839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bm.setConfig(SkBitmap::kARGB_8888_Config, W, H); 1167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else { 1177839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bm.setConfig(fConfig, W, H); 1187839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 1197839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 1207839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bm.allocPixels(); 1217839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bm.eraseColor(fIsOpaque ? SK_ColorBLACK : 0); 1227839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 1237839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger onDrawIntoBitmap(bm); 1247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 1257839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (SkBitmap::kIndex8_Config == fConfig) { 1267839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger convertToIndex666(bm, &fBitmap); 1277839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else { 1287839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fBitmap = bm; 1297839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 1307839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 1317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (fBitmap.getColorTable()) { 1327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fBitmap.getColorTable()->setIsOpaque(fIsOpaque); 1337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 1347839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fBitmap.setIsOpaque(fIsOpaque); 1357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fBitmap.setIsVolatile(fIsVolatile); 1367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 1377839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onDraw(SkCanvas* canvas) { 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkIPoint dim = this->getSize(); 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkRandom rand; 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkPaint paint(fPaint); 14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->setupPaint(&paint); 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkBitmap& bitmap = fBitmap; 14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkScalar x0 = SkIntToScalar(-bitmap.width() / 2); 14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkScalar y0 = SkIntToScalar(-bitmap.height() / 2); 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger int count = N; 15058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#ifdef SK_RELEASE 15158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger // in DEBUG, N is always 1 15258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (SkPaint::kHigh_FilterLevel == paint.getFilterLevel()) { 15358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger count /= BICUBIC_DUR_SCALE; 15458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 15558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif 15658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger for (int i = 0; i < count; i++) { 15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar x = x0 + rand.nextUScalar1() * dim.fX; 15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar y = y0 + rand.nextUScalar1() * dim.fY; 15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (fForceUpdate) 16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bitmap.notifyPixelsChanged(); 16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->drawBitmap(bitmap, x, y, &paint); 16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger virtual float onGetDurationScale() SK_OVERRIDE { 16858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPaint paint; 16958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger this->setupPaint(&paint); 17058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#ifdef SK_DEBUG 17158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return 1; 17258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#else 17358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return SkPaint::kHigh_FilterLevel == paint.getFilterLevel() ? 17458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger (float)BICUBIC_DUR_SCALE : 1; 17558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif 17658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 17758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 1787839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger virtual void onDrawIntoBitmap(const SkBitmap& bm) { 1797839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const int w = bm.width(); 1807839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const int h = bm.height(); 1817839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 1827839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkCanvas canvas(bm); 1837839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkPaint p; 1847839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setAntiAlias(true); 1857839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setColor(SK_ColorRED); 1867839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger canvas.drawCircle(SkIntToScalar(w)/2, SkIntToScalar(h)/2, 1877839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkIntToScalar(SkMin32(w, h))*3/8, p); 1887839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 1897839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkRect r; 1907839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger r.set(0, 0, SkIntToScalar(w), SkIntToScalar(h)); 1917839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setStyle(SkPaint::kStroke_Style); 1927839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setStrokeWidth(SkIntToScalar(4)); 1937839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setColor(SK_ColorBLUE); 1947839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger canvas.drawRect(r, p); 1957839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 1967839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru typedef SkBenchmark INHERITED; 19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** Explicitly invoke some filter types to improve coverage of acceleration 20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru procs. */ 20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 20458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerenum Flags { 20558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kScale_Flag = 1 << 0, 20658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kRotate_Flag = 1 << 1, 20758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kBilerp_Flag = 1 << 2, 20858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kBicubic_Flag = 1 << 3, 20958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger}; 21058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 21158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerstatic bool isBilerp(uint32_t flags) { 21258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return (flags & (kBilerp_Flag | kBicubic_Flag)) == (kBilerp_Flag); 21358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 21458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 21558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerstatic bool isBicubic(uint32_t flags) { 21658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return (flags & (kBilerp_Flag | kBicubic_Flag)) == (kBilerp_Flag | kBicubic_Flag); 21758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 21858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass FilterBitmapBench : public BitmapBench { 22058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger uint32_t fFlags; 22180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString fFullName; 22280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru enum { N = SkBENCHLOOP(300) }; 22380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 22480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru FilterBitmapBench(void* param, bool isOpaque, SkBitmap::Config c, 22558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger bool forceUpdate, bool isVolitile, uint32_t flags) 22658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger : INHERITED(param, isOpaque, c, forceUpdate, isVolitile) 22758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger , fFlags(flags) { 22880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 22980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 23080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected: 23180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual const char* onGetName() { 23280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fFullName.set(INHERITED::onGetName()); 23358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (fFlags & kScale_Flag) { 23480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fFullName.append("_scale"); 23558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 23658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (fFlags & kRotate_Flag) { 23780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fFullName.append("_rotate"); 23858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 23958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (isBilerp(fFlags)) { 24058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger fFullName.append("_bilerp"); 24158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } else if (isBicubic(fFlags)) { 24258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger fFullName.append("_bicubic"); 24358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 24480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 24580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fFullName.c_str(); 24680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 24780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 24880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void onDraw(SkCanvas* canvas) { 24980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkISize dim = canvas->getDeviceSize(); 25058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (fFlags & kScale_Flag) { 25180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkScalar x = SkIntToScalar(dim.fWidth) / 2; 25280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkScalar y = SkIntToScalar(dim.fHeight) / 2; 25380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 25480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(x, y); 25580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // just enough so we can't take the sprite case 25680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->scale(SK_Scalar1 * 99/100, SK_Scalar1 * 99/100); 25780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(-x, -y); 25880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 25958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (fFlags & kRotate_Flag) { 26080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkScalar x = SkIntToScalar(dim.fWidth) / 2; 26180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkScalar y = SkIntToScalar(dim.fHeight) / 2; 26280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 26380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(x, y); 26480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->rotate(SkIntToScalar(35)); 26580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru canvas->translate(-x, -y); 26680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 26780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru INHERITED::onDraw(canvas); 26880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 26980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 27058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger virtual void setupPaint(SkPaint* paint) SK_OVERRIDE { 27158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger this->INHERITED::setupPaint(paint); 27258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 27358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger int index = 0; 27458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (fFlags & kBilerp_Flag) { 27558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger index |= 1; 27658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 27758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger if (fFlags & kBicubic_Flag) { 27858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger index |= 2; 27958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 28058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger static const SkPaint::FilterLevel gLevels[] = { 28158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPaint::kNone_FilterLevel, 28258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPaint::kLow_FilterLevel, 28358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPaint::kMedium_FilterLevel, 28458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPaint::kHigh_FilterLevel 28558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger }; 28658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger paint->setFilterLevel(gLevels[index]); 28758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 28858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 28980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate: 29080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru typedef BitmapBench INHERITED; 29180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 29280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2937839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger/** Verify optimizations that test source alpha values. */ 2947839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 2957839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerclass SourceAlphaBitmapBench : public BitmapBench { 2967839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerpublic: 2977839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger enum SourceAlpha { kOpaque_SourceAlpha, kTransparent_SourceAlpha, 2987839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger kTwoStripes_SourceAlpha, kThreeStripes_SourceAlpha}; 2997839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerprivate: 3007839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkString fFullName; 3017839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SourceAlpha fSourceAlpha; 3027839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerpublic: 3037839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SourceAlphaBitmapBench(void* param, SourceAlpha alpha, SkBitmap::Config c, 30458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger bool forceUpdate = false, bool bitmapVolatile = false) 30558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger : INHERITED(param, false, c, forceUpdate, bitmapVolatile) 3067839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger , fSourceAlpha(alpha) { 3077839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 3087839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3097839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerprotected: 3107839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger virtual const char* onGetName() { 3117839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fFullName.set(INHERITED::onGetName()); 3127839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3137839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (fSourceAlpha == kOpaque_SourceAlpha) { 3147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fFullName.append("_source_opaque"); 3157839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else if (fSourceAlpha == kTransparent_SourceAlpha) { 3167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fFullName.append("_source_transparent"); 3177839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else if (fSourceAlpha == kTwoStripes_SourceAlpha) { 3187839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fFullName.append("_source_stripes_two"); 3197839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else if (fSourceAlpha == kThreeStripes_SourceAlpha) { 3207839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fFullName.append("_source_stripes_three"); 3217839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 3227839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3237839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger return fFullName.c_str(); 3247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 3257839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3267839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger virtual void onDrawIntoBitmap(const SkBitmap& bm) SK_OVERRIDE { 3277839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const int w = bm.width(); 3287839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const int h = bm.height(); 3297839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3307839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (kOpaque_SourceAlpha == fSourceAlpha) { 3317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bm.eraseColor(SK_ColorBLACK); 3327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else if (kTransparent_SourceAlpha == fSourceAlpha) { 3337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bm.eraseColor(0); 3347839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else if (kTwoStripes_SourceAlpha == fSourceAlpha) { 3357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bm.eraseColor(0); 3367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3377839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkCanvas canvas(bm); 3387839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkPaint p; 3397839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setAntiAlias(false); 3407839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setStyle(SkPaint::kFill_Style); 3417839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setColor(SK_ColorRED); 3427839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3437839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger // Draw red vertical stripes on transparent background 3447839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkRect r; 3457839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger for (int x = 0; x < w; x+=2) 3467839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger { 3477839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger r.set(SkIntToScalar(x), 0, SkIntToScalar(x+1), SkIntToScalar(h)); 3487839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger canvas.drawRect(r, p); 3497839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 3507839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else if (kThreeStripes_SourceAlpha == fSourceAlpha) { 3527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger bm.eraseColor(0); 3537839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3547839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkCanvas canvas(bm); 3557839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkPaint p; 3567839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setAntiAlias(false); 3577839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setStyle(SkPaint::kFill_Style); 3587839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3597839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger // Draw vertical stripes on transparent background with a pattern 3607839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger // where the first pixel is fully transparent, the next is semi-transparent 3617839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger // and the third is fully opaque. 3627839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkRect r; 3637839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger for (int x = 0; x < w; x++) 3647839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger { 3657839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if (x % 3 == 0) { 3667839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger continue; // Keep transparent 3677839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else if (x % 3 == 1) { 3687839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setColor(SkColorSetARGB(127, 127, 127, 127)); // Semi-transparent 3697839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } else if (x % 3 == 2) { 3707839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger p.setColor(SK_ColorRED); // Opaque 3717839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 3727839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger r.set(SkIntToScalar(x), 0, SkIntToScalar(x+1), SkIntToScalar(h)); 3737839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger canvas.drawRect(r, p); 3747839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 3757839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 3767839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 3777839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 3787839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerprivate: 3797839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger typedef BitmapBench INHERITED; 3807839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger}; 38158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 38258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new BitmapBench(p, false, SkBitmap::kARGB_8888_Config); ) 38358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new BitmapBench(p, true, SkBitmap::kARGB_8888_Config); ) 38458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new BitmapBench(p, true, SkBitmap::kRGB_565_Config); ) 38558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new BitmapBench(p, false, SkBitmap::kIndex8_Config); ) 38658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new BitmapBench(p, true, SkBitmap::kIndex8_Config); ) 38758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new BitmapBench(p, true, SkBitmap::kARGB_8888_Config, true, true); ) 38858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new BitmapBench(p, true, SkBitmap::kARGB_8888_Config, true, false); ) 38980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 39080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// scale filter -> S32_opaque_D32_filter_DX_{SSE2,SSSE3} and Fact9 is also for S32_D16_filter_DX_SSE2 39158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, false, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kBilerp_Flag); ) 39258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, true, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kBilerp_Flag); ) 39358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, true, SkBitmap::kARGB_8888_Config, true, true, kScale_Flag | kBilerp_Flag); ) 39458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, true, SkBitmap::kARGB_8888_Config, true, false, kScale_Flag | kBilerp_Flag); ) 39580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 39680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// scale rotate filter -> S32_opaque_D32_filter_DXDY_{SSE2,SSSE3} 39758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, false, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) 39858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, true, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) 39958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, true, SkBitmap::kARGB_8888_Config, true, true, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) 40058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, true, SkBitmap::kARGB_8888_Config, true, false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) 40158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 40258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, false, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kBilerp_Flag | kBicubic_Flag); ) 40358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new FilterBitmapBench(p, false, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kRotate_Flag | kBilerp_Flag | kBicubic_Flag); ) 40480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4057839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger// source alpha tests -> S32A_Opaque_BlitRow32_{arm,neon} 40658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new SourceAlphaBitmapBench(p, SourceAlphaBitmapBench::kOpaque_SourceAlpha, SkBitmap::kARGB_8888_Config); ) 40758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new SourceAlphaBitmapBench(p, SourceAlphaBitmapBench::kTransparent_SourceAlpha, SkBitmap::kARGB_8888_Config); ) 40858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new SourceAlphaBitmapBench(p, SourceAlphaBitmapBench::kTwoStripes_SourceAlpha, SkBitmap::kARGB_8888_Config); ) 40958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_BENCH( return new SourceAlphaBitmapBench(p, SourceAlphaBitmapBench::kThreeStripes_SourceAlpha, SkBitmap::kARGB_8888_Config); ) 410