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