12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "bench/Benchmark.h"
- #include "include/core/SkCanvas.h"
- #include "include/core/SkPaint.h"
- #include "include/core/SkPictureRecorder.h"
- #include "include/core/SkSurface.h"
- #include "include/effects/SkShaderMaskFilter.h"
- #include "src/shaders/SkPictureShader.h"
- static sk_sp<SkShader> make_bitmap_shader() {
- SkPaint p;
- p.setColor(SK_ColorBLACK);
- p.setAntiAlias(true);
- auto surface = SkSurface::MakeRasterN32Premul(100, 100);
- surface->getCanvas()->drawCircle(50, 50, 50, p);
- return surface->makeImageSnapshot()->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat);
- }
- static sk_sp<SkShader> make_picture_shader() {
- SkPaint p;
- p.setColor(SK_ColorBLACK);
- p.setAntiAlias(true);
- SkPictureRecorder recorder;
- recorder.beginRecording(100, 100)->drawCircle(50, 50, 50, p);
- return recorder.finishRecordingAsPicture()->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat);
- }
- class ShaderMFBench final : public Benchmark {
- public:
- using ShaderMaker = sk_sp<SkShader>(*)();
- ShaderMFBench(const char* nm, bool opaque, const ShaderMaker& maker) {
- fMaskFilter = SkShaderMaskFilter::Make(maker());
- fColor = opaque ? 0xff00ff00 : 0x8000ff00;
- fName = SkStringPrintf("shadermaskfilter_%s_%x", nm, SkColorGetA(fColor));
- }
- protected:
- const char* onGetName() override {
- return fName.c_str();
- }
- void onDraw(int loops, SkCanvas* canvas) override {
- SkPaint maskPaint;
- maskPaint.setMaskFilter(fMaskFilter);
- for (int i = 0; i < loops; ++i) {
- SkAutoCanvasRestore arc(canvas, false);
- canvas->saveLayer(nullptr, &maskPaint);
- canvas->drawColor(fColor);
- }
- }
- private:
- SkString fName;
- sk_sp<SkMaskFilter> fMaskFilter;
- SkColor fColor;
- using INHERITED = Benchmark;
- };
- DEF_BENCH( return new ShaderMFBench("bitmap" , true , make_bitmap_shader ); )
- DEF_BENCH( return new ShaderMFBench("bitmap" , false, make_bitmap_shader ); )
- DEF_BENCH( return new ShaderMFBench("picture", true , make_picture_shader); )
- DEF_BENCH( return new ShaderMFBench("picture", false, make_picture_shader); )
|