1c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 2c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com/* 3c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com * Copyright 2011 Google Inc. 4c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com * 5c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com * Use of this source code is governed by a BSD-style license that can be 6c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com * found in the LICENSE file. 7c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com */ 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 9c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com#include "SkBitmap.h" 10c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com#include "SkCanvas.h" 11c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com#include "SkColorPriv.h" 12c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com#include "SkPaint.h" 13c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com#include "SkRandom.h" 14c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com#include "SkShader.h" 15c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com#include "SkString.h" 16c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 17e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic int rand_pts(SkRandom& rand, SkPoint pts[4]) { 18c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com int n = rand.nextU() & 3; 19c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com n += 1; 20c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 21c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com for (int i = 0; i < n; ++i) { 22c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com pts[i].fX = rand.nextSScalar1(); 23c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com pts[i].fY = rand.nextSScalar1(); 24c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } 25c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com return n; 26c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com} 27c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 28f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass PathIterBench : public Benchmark { 29c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com SkString fName; 30c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com SkPath fPath; 31c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com bool fRaw; 32c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 33c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.compublic: 34410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com PathIterBench(bool raw) { 35c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com fName.printf("pathiter_%s", raw ? "raw" : "consume"); 36c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com fRaw = raw; 37c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 38e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 39c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com for (int i = 0; i < 1000; ++i) { 40c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com SkPoint pts[4]; 41c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com int n = rand_pts(rand, pts); 42c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com switch (n) { 43c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com case 1: 44c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com fPath.moveTo(pts[0]); 45c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com break; 46c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com case 2: 47c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com fPath.lineTo(pts[1]); 48c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com break; 49c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com case 3: 50c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com fPath.quadTo(pts[1], pts[2]); 51c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com break; 52c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com case 4: 53c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com fPath.cubicTo(pts[1], pts[2], pts[3]); 54c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com break; 55c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } 56c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } 57644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org } 58433ce5e6869d5937e31ff5f305be54092b37f2e4robertphillips@google.com 59644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { 60644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org return backend == kNonRendering_Backend; 61c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } 62c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 63c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.comprotected: 64c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com virtual const char* onGetName() SK_OVERRIDE { 65c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com return fName.c_str(); 66c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } 67c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 683361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas*) SK_OVERRIDE { 69c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com if (fRaw) { 703361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; ++i) { 71c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com SkPath::RawIter iter(fPath); 72c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com SkPath::Verb verb; 73c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com SkPoint pts[4]; 74fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 75faa5ae456d184202993a5dbe782a3a95acc25326commit-bot@chromium.org while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { } 76c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } 77c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } else { 783361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; ++i) { 79c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com SkPath::Iter iter(fPath, false); 80c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com SkPath::Verb verb; 81c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com SkPoint pts[4]; 82fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 83faa5ae456d184202993a5dbe782a3a95acc25326commit-bot@chromium.org while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { } 84c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } 85c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } 86c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com } 87c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 88c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.comprivate: 89f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 90c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com}; 91c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 92c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com/////////////////////////////////////////////////////////////////////////////// 93c56a83ca9c1011fadd25475188fc2ea08930ec41reed@google.com 94410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new PathIterBench(false); ) 95410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new PathIterBench(true); ) 96