• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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/GrDirectContext.h"
11 
12 class CreateBackendTextureBench : public Benchmark {
13 private:
14     SkString fName;
15     SkTArray<GrBackendTexture> fBackendTextures;
16     GrMipmapped fMipmapped;
17 
18 public:
CreateBackendTextureBench(GrMipmapped mipmapped)19     CreateBackendTextureBench(GrMipmapped mipmapped) : fMipmapped(mipmapped) {
20         fName.printf("create_backend_texture%s", mipmapped == GrMipmapped::kYes ? "_mipped" : "");
21     }
22 
23 private:
isSuitableFor(Backend backend)24     bool isSuitableFor(Backend backend) override { return kGPU_Backend == backend; }
25 
onGetName()26     const char* onGetName() override { return fName.c_str(); }
27 
onDraw(int loops,SkCanvas * canvas)28     void onDraw(int loops, SkCanvas* canvas) override {
29         auto context = canvas->recordingContext()->asDirectContext();
30 
31         fBackendTextures.reserve_back(loops);
32 
33         static const int kSize = 16;
34         for (int i = 0; i < loops; ++i) {
35             fBackendTextures.push_back(
36                     context->createBackendTexture(kSize,
37                                                   kSize,
38                                                   kRGBA_8888_SkColorType,
39                                                   SkColors::kRed,
40                                                   fMipmapped,
41                                                   GrRenderable::kNo,
42                                                   GrProtected::kNo,
43                                                   nullptr,
44                                                   nullptr,
45                                                   /*label=*/"DrawBackendTextureBench"));
46         }
47     }
48 
onPerCanvasPostDraw(SkCanvas * canvas)49     void onPerCanvasPostDraw(SkCanvas* canvas) override {
50         auto context = canvas->recordingContext()->asDirectContext();
51 
52         context->flush();
53         context->submit(true);
54 
55         for (int i = 0; i < fBackendTextures.size(); ++i) {
56             if (fBackendTextures[i].isValid()) {
57                 context->deleteBackendTexture(fBackendTextures[i]);
58             }
59         }
60         fBackendTextures.clear();
61     }
62 };
63 
64 DEF_BENCH(return new CreateBackendTextureBench(GrMipmapped::kNo);)
65 DEF_BENCH(return new CreateBackendTextureBench(GrMipmapped::kYes);)
66