blob: 9d3c451415055b9d37fb6fbce347f697f7bf3f69 [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
44 GrFlushInfo info;
45 info.fFlags = kSyncCpu_GrFlushFlag;
46 context->flush(info);
Greg Daniel0a2464f2020-05-14 15:45:44 -040047 context->submit(true);
Greg Daniel6d2febd2020-05-04 16:47:15 -040048
49 for (int i = 0; i < fBackendTextures.count(); ++i) {
50 if (fBackendTextures[i].isValid()) {
51 context->deleteBackendTexture(fBackendTextures[i]);
52 }
53 }
54 fBackendTextures.reset();
55 }
56};
57
58DEF_BENCH(return new CreateBackendTextureBench(GrMipMapped::kNo);)
59DEF_BENCH(return new CreateBackendTextureBench(GrMipMapped::kYes);)