diff options
Diffstat (limited to 'bench/ColorCanvasDrawBitmapBench.cpp')
-rw-r--r-- | bench/ColorCanvasDrawBitmapBench.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/bench/ColorCanvasDrawBitmapBench.cpp b/bench/ColorCanvasDrawBitmapBench.cpp new file mode 100644 index 0000000000..de13ba2afc --- /dev/null +++ b/bench/ColorCanvasDrawBitmapBench.cpp @@ -0,0 +1,57 @@ +/* +* Copyright 2017 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 "SkCanvas.h" +#include "SkColorSpaceXformCanvas.h" +#include "SkString.h" + +class ColorCanvasDrawBitmap : public Benchmark { +public: + ColorCanvasDrawBitmap(sk_sp<SkColorSpace> src, sk_sp<SkColorSpace> dst, const char* name) + : fDst(dst) + , fName(SkStringPrintf("ColorCanvasDrawBitmap_%s", name)) + { + fBitmap.allocPixels(SkImageInfo::MakeN32(100, 100, kOpaque_SkAlphaType, src)); + fBitmap.eraseColor(SK_ColorBLUE); + } + + const char* onGetName() override { + return fName.c_str(); + } + + SkIPoint onGetSize() override { + return SkIPoint::Make(100, 100); + } + + bool isSuitableFor(Backend backend) override { + return kRaster_Backend == backend || kGPU_Backend == backend; + } + + void onDraw(int n, SkCanvas* canvas) override { + // This simulates an Android app that draws bitmaps to a software canvas. + // Chrome and the Android framework both use SkImages exclusively. + std::unique_ptr<SkCanvas> colorCanvas = SkCreateColorSpaceXformCanvas(canvas, fDst); + for (int i = 0; i < n; i++) { + colorCanvas->drawBitmap(fBitmap, 0, 0, nullptr); + } + } + +private: + sk_sp<SkColorSpace> fDst; + SkString fName; + SkBitmap fBitmap; + + typedef Benchmark INHERITED; +}; + +DEF_BENCH(return new ColorCanvasDrawBitmap(nullptr, SkColorSpace::MakeSRGB(), "null_to_sRGB");) +DEF_BENCH(return new ColorCanvasDrawBitmap(SkColorSpace::MakeSRGB(), SkColorSpace::MakeSRGB(), + "sRGB_to_sRGB");) +DEF_BENCH(return new ColorCanvasDrawBitmap( + SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, SkColorSpace::kAdobeRGB_Gamut), + SkColorSpace::MakeSRGB(), "AdobeRGB_to_sRGB");) |