1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2015 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "bench/Benchmark.h" 9cb93a386Sopenharmony_ci#include "bench/BigPath.h" 10cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 11cb93a386Sopenharmony_ci#include "include/core/SkPath.h" 12cb93a386Sopenharmony_ci#include "tools/ToolUtils.h" 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_cienum Align { 15cb93a386Sopenharmony_ci kLeft_Align, 16cb93a386Sopenharmony_ci kMiddle_Align, 17cb93a386Sopenharmony_ci kRight_Align 18cb93a386Sopenharmony_ci}; 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ciconst char* gAlignName[] = { "left", "middle", "right" }; 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci// Inspired by crbug.com/455429 23cb93a386Sopenharmony_ciclass BigPathBench : public Benchmark { 24cb93a386Sopenharmony_ci SkPath fPath; 25cb93a386Sopenharmony_ci SkString fName; 26cb93a386Sopenharmony_ci Align fAlign; 27cb93a386Sopenharmony_ci bool fRound; 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_cipublic: 30cb93a386Sopenharmony_ci BigPathBench(Align align, bool round) : fAlign(align), fRound(round) { 31cb93a386Sopenharmony_ci fName.printf("bigpath_%s", gAlignName[fAlign]); 32cb93a386Sopenharmony_ci if (round) { 33cb93a386Sopenharmony_ci fName.append("_round"); 34cb93a386Sopenharmony_ci } 35cb93a386Sopenharmony_ci } 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_ciprotected: 38cb93a386Sopenharmony_ci const char* onGetName() override { 39cb93a386Sopenharmony_ci return fName.c_str(); 40cb93a386Sopenharmony_ci } 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_ci SkIPoint onGetSize() override { 43cb93a386Sopenharmony_ci return SkIPoint::Make(640, 100); 44cb93a386Sopenharmony_ci } 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci void onDelayedSetup() override { fPath = BenchUtils::make_big_path(); } 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci void onDraw(int loops, SkCanvas* canvas) override { 49cb93a386Sopenharmony_ci SkPaint paint; 50cb93a386Sopenharmony_ci paint.setAntiAlias(true); 51cb93a386Sopenharmony_ci paint.setStyle(SkPaint::kStroke_Style); 52cb93a386Sopenharmony_ci paint.setStrokeWidth(2); 53cb93a386Sopenharmony_ci if (fRound) { 54cb93a386Sopenharmony_ci paint.setStrokeJoin(SkPaint::kRound_Join); 55cb93a386Sopenharmony_ci } 56cb93a386Sopenharmony_ci this->setupPaint(&paint); 57cb93a386Sopenharmony_ci 58cb93a386Sopenharmony_ci const SkRect r = fPath.getBounds(); 59cb93a386Sopenharmony_ci switch (fAlign) { 60cb93a386Sopenharmony_ci case kLeft_Align: 61cb93a386Sopenharmony_ci canvas->translate(-r.left(), 0); 62cb93a386Sopenharmony_ci break; 63cb93a386Sopenharmony_ci case kMiddle_Align: 64cb93a386Sopenharmony_ci break; 65cb93a386Sopenharmony_ci case kRight_Align: 66cb93a386Sopenharmony_ci canvas->translate(640 - r.right(), 0); 67cb93a386Sopenharmony_ci break; 68cb93a386Sopenharmony_ci } 69cb93a386Sopenharmony_ci 70cb93a386Sopenharmony_ci for (int i = 0; i < loops; i++) { 71cb93a386Sopenharmony_ci canvas->drawPath(fPath, paint); 72cb93a386Sopenharmony_ci } 73cb93a386Sopenharmony_ci } 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ciprivate: 76cb93a386Sopenharmony_ci using INHERITED = Benchmark; 77cb93a386Sopenharmony_ci}; 78cb93a386Sopenharmony_ci 79cb93a386Sopenharmony_ciDEF_BENCH( return new BigPathBench(kLeft_Align, false); ) 80cb93a386Sopenharmony_ciDEF_BENCH( return new BigPathBench(kMiddle_Align, false); ) 81cb93a386Sopenharmony_ciDEF_BENCH( return new BigPathBench(kRight_Align, false); ) 82cb93a386Sopenharmony_ci 83cb93a386Sopenharmony_ciDEF_BENCH( return new BigPathBench(kLeft_Align, true); ) 84cb93a386Sopenharmony_ciDEF_BENCH( return new BigPathBench(kMiddle_Align, true); ) 85cb93a386Sopenharmony_ciDEF_BENCH( return new BigPathBench(kRight_Align, true); ) 86