1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2020 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "bench/Benchmark.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrBackendSurface.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrDirectContext.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker using namespace skia_private; 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker class CreateBackendTextureBench : public Benchmark { 16*c8dee2aaSAndroid Build Coastguard Worker private: 17*c8dee2aaSAndroid Build Coastguard Worker SkString fName; 18*c8dee2aaSAndroid Build Coastguard Worker TArray<GrBackendTexture> fBackendTextures; 19*c8dee2aaSAndroid Build Coastguard Worker skgpu::Mipmapped fMipmapped; 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker public: CreateBackendTextureBench(skgpu::Mipmapped mipmapped)22*c8dee2aaSAndroid Build Coastguard Worker CreateBackendTextureBench(skgpu::Mipmapped mipmapped) : fMipmapped(mipmapped) { 23*c8dee2aaSAndroid Build Coastguard Worker fName.printf("create_backend_texture%s", 24*c8dee2aaSAndroid Build Coastguard Worker mipmapped == skgpu::Mipmapped::kYes ? "_mipped" : ""); 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker private: isSuitableFor(Backend backend)28*c8dee2aaSAndroid Build Coastguard Worker bool isSuitableFor(Backend backend) override { return Backend::kGanesh == backend; } 29*c8dee2aaSAndroid Build Coastguard Worker onGetName()30*c8dee2aaSAndroid Build Coastguard Worker const char* onGetName() override { return fName.c_str(); } 31*c8dee2aaSAndroid Build Coastguard Worker onDraw(int loops,SkCanvas * canvas)32*c8dee2aaSAndroid Build Coastguard Worker void onDraw(int loops, SkCanvas* canvas) override { 33*c8dee2aaSAndroid Build Coastguard Worker auto context = canvas->recordingContext()->asDirectContext(); 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker fBackendTextures.reserve_exact(fBackendTextures.size() + loops); 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker static const int kSize = 16; 38*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < loops; ++i) { 39*c8dee2aaSAndroid Build Coastguard Worker fBackendTextures.push_back( 40*c8dee2aaSAndroid Build Coastguard Worker context->createBackendTexture(kSize, 41*c8dee2aaSAndroid Build Coastguard Worker kSize, 42*c8dee2aaSAndroid Build Coastguard Worker kRGBA_8888_SkColorType, 43*c8dee2aaSAndroid Build Coastguard Worker SkColors::kRed, 44*c8dee2aaSAndroid Build Coastguard Worker fMipmapped, 45*c8dee2aaSAndroid Build Coastguard Worker GrRenderable::kNo, 46*c8dee2aaSAndroid Build Coastguard Worker GrProtected::kNo, 47*c8dee2aaSAndroid Build Coastguard Worker nullptr, 48*c8dee2aaSAndroid Build Coastguard Worker nullptr, 49*c8dee2aaSAndroid Build Coastguard Worker /*label=*/"DrawBackendTextureBench")); 50*c8dee2aaSAndroid Build Coastguard Worker } 51*c8dee2aaSAndroid Build Coastguard Worker } 52*c8dee2aaSAndroid Build Coastguard Worker onPerCanvasPostDraw(SkCanvas * canvas)53*c8dee2aaSAndroid Build Coastguard Worker void onPerCanvasPostDraw(SkCanvas* canvas) override { 54*c8dee2aaSAndroid Build Coastguard Worker auto context = canvas->recordingContext()->asDirectContext(); 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker context->flush(); 57*c8dee2aaSAndroid Build Coastguard Worker context->submit(GrSyncCpu::kYes); 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < fBackendTextures.size(); ++i) { 60*c8dee2aaSAndroid Build Coastguard Worker if (fBackendTextures[i].isValid()) { 61*c8dee2aaSAndroid Build Coastguard Worker context->deleteBackendTexture(fBackendTextures[i]); 62*c8dee2aaSAndroid Build Coastguard Worker } 63*c8dee2aaSAndroid Build Coastguard Worker } 64*c8dee2aaSAndroid Build Coastguard Worker fBackendTextures.clear(); 65*c8dee2aaSAndroid Build Coastguard Worker } 66*c8dee2aaSAndroid Build Coastguard Worker }; 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new CreateBackendTextureBench(skgpu::Mipmapped::kNo);) 69*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new CreateBackendTextureBench(skgpu::Mipmapped::kYes);) 70