blob: 6873d04a0317dfc7aea3f50ceb82a319f61cbf1a [file] [log] [blame]
Greg Daniel6d2febd2020-05-04 16:47:15 -04001/*
2 * Copyright 2020 Google LLC
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 "bench/Benchmark.h"
9#include "include/core/SkCanvas.h"
10#include "include/gpu/GrContext.h"
11
12class CreateBackendTextureBench : public Benchmark {
13private:
14 SkString fName;
15 SkTArray<GrBackendTexture> fBackendTextures;
16 GrMipMapped fMipMapped;
17
18public:
19 CreateBackendTextureBench(GrMipMapped mipMapped) : fMipMapped(mipMapped) {
20 fName.printf("create_backend_texture%s", mipMapped == GrMipMapped::kYes ? "_mipped" : "");
21 }
22
23private:
24 bool isSuitableFor(Backend backend) override { return kGPU_Backend == backend; }
25
26 const char* onGetName() override { return fName.c_str(); }
27
28 void onDraw(int loops, SkCanvas* canvas) override {
29 GrContext* context = canvas->getGrContext();
30
31 fBackendTextures.reserve(loops);
32
33 static const int kSize = 16;
34 for (int i = 0; i < loops; ++i) {
35 fBackendTextures.push_back(context->createBackendTexture(
36 kSize, kSize, kRGBA_8888_SkColorType, SkColors::kRed, fMipMapped,
37 GrRenderable::kNo, GrProtected::kNo));
38 }
39 }
40
41 void onPerCanvasPostDraw(SkCanvas* canvas) override {
42 GrContext* context = canvas->getGrContext();
43
Greg Danielce9f0162020-06-30 13:42:46 -040044 context->flush();
Greg Daniel0a2464f2020-05-14 15:45:44 -040045 context->submit(true);
Greg Daniel6d2febd2020-05-04 16:47:15 -040046
47 for (int i = 0; i < fBackendTextures.count(); ++i) {
48 if (fBackendTextures[i].isValid()) {
49 context->deleteBackendTexture(fBackendTextures[i]);
50 }
51 }
52 fBackendTextures.reset();
53 }
54};
55
56DEF_BENCH(return new CreateBackendTextureBench(GrMipMapped::kNo);)
57DEF_BENCH(return new CreateBackendTextureBench(GrMipMapped::kYes);)