blob: 0f26d4bc1132b77bac45047eb2a9bf0533b2fa3d [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"
Robert Phillipsf0288102020-07-06 13:45:34 -040010#include "include/gpu/GrDirectContext.h"
Greg Daniel6d2febd2020-05-04 16:47:15 -040011
12class CreateBackendTextureBench : public Benchmark {
13private:
14 SkString fName;
15 SkTArray<GrBackendTexture> fBackendTextures;
Brian Salomon40a40622020-07-21 10:32:07 -040016 GrMipmapped fMipmapped;
Greg Daniel6d2febd2020-05-04 16:47:15 -040017
18public:
Brian Salomon40a40622020-07-21 10:32:07 -040019 CreateBackendTextureBench(GrMipmapped mipMapped) : fMipmapped(mipMapped) {
Brian Salomon7e67dca2020-07-21 09:27:25 -040020 fName.printf("create_backend_texture%s", mipMapped == GrMipmapped::kYes ? "_mipped" : "");
Greg Daniel6d2febd2020-05-04 16:47:15 -040021 }
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 {
Robert Phillipsf0288102020-07-06 13:45:34 -040029 auto context = canvas->recordingContext()->asDirectContext();
Greg Daniel6d2febd2020-05-04 16:47:15 -040030
John Stilesf4bda742020-10-14 16:57:41 -040031 fBackendTextures.reserve_back(loops);
Greg Daniel6d2febd2020-05-04 16:47:15 -040032
33 static const int kSize = 16;
34 for (int i = 0; i < loops; ++i) {
35 fBackendTextures.push_back(context->createBackendTexture(
Brian Salomon40a40622020-07-21 10:32:07 -040036 kSize, kSize, kRGBA_8888_SkColorType, SkColors::kRed, fMipmapped,
Greg Daniel6d2febd2020-05-04 16:47:15 -040037 GrRenderable::kNo, GrProtected::kNo));
38 }
39 }
40
41 void onPerCanvasPostDraw(SkCanvas* canvas) override {
Robert Phillipsf0288102020-07-06 13:45:34 -040042 auto context = canvas->recordingContext()->asDirectContext();
Greg Daniel6d2febd2020-05-04 16:47:15 -040043
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
Brian Salomon7e67dca2020-07-21 09:27:25 -040056DEF_BENCH(return new CreateBackendTextureBench(GrMipmapped::kNo);)
57DEF_BENCH(return new CreateBackendTextureBench(GrMipmapped::kYes);)