1c117cbae6196cfcade083805d999779fe8244091reed@google.com/* 2c117cbae6196cfcade083805d999779fe8244091reed@google.com * Copyright 2013 Google Inc. 3c117cbae6196cfcade083805d999779fe8244091reed@google.com * 4c117cbae6196cfcade083805d999779fe8244091reed@google.com * Use of this source code is governed by a BSD-style license that can be 5c117cbae6196cfcade083805d999779fe8244091reed@google.com * found in the LICENSE file. 6c117cbae6196cfcade083805d999779fe8244091reed@google.com */ 7c117cbae6196cfcade083805d999779fe8244091reed@google.com 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 99ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein#include "SkTemplates.h" 10f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkUtils.h" 11c117cbae6196cfcade083805d999779fe8244091reed@google.com 129ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleintemplate <typename T, bool kInline> 13f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass MemsetBench : public Benchmark { 14c117cbae6196cfcade083805d999779fe8244091reed@google.compublic: 159ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein explicit MemsetBench(int n) 169ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein : fN(n) 179ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein , fBuffer(n) 189ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein , fName(SkStringPrintf("memset%d_%d%s", sizeof(T)*8, n, kInline ? "_inline" : "")) {} 19644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org 209ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } 219ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein const char* onGetName() override { return fName.c_str(); } 22c117cbae6196cfcade083805d999779fe8244091reed@google.com 239ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein void onDraw(const int loops, SkCanvas*) override; 24c117cbae6196cfcade083805d999779fe8244091reed@google.com 25c117cbae6196cfcade083805d999779fe8244091reed@google.comprivate: 269ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein int fN; 279ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein SkAutoTMalloc<T> fBuffer; 289ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein SkString fName; 29c117cbae6196cfcade083805d999779fe8244091reed@google.com}; 30c117cbae6196cfcade083805d999779fe8244091reed@google.com 319ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleintemplate <> void MemsetBench<uint32_t, false>::onDraw(const int loops, SkCanvas*) { 329ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein for (int i = 0; i < 1000*loops; i++) { 339ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein sk_memset32(fBuffer.get(), 0xFACEB004, fN); 349ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein } 359ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein} 36c117cbae6196cfcade083805d999779fe8244091reed@google.com 379ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleintemplate <> void MemsetBench<uint16_t, false>::onDraw(const int loops, SkCanvas*) { 389ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein for (int i = 0; i < 1000*loops; i++) { 399ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein sk_memset16(fBuffer.get(), 0x4973, fN); 40c117cbae6196cfcade083805d999779fe8244091reed@google.com } 419ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein} 42c117cbae6196cfcade083805d999779fe8244091reed@google.com 439ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleintemplate <typename T> 449ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinstatic void memsetT(T* dst, T val, int n) { 459ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein for (int i = 0; i < n; i++) { dst[i] = val; } 469ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein} 47c117cbae6196cfcade083805d999779fe8244091reed@google.com 489ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleintemplate <> void MemsetBench<uint32_t, true>::onDraw(const int loops, SkCanvas*) { 499ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein for (int i = 0; i < 1000*loops; i++) { 509ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein memsetT<uint32_t>(fBuffer.get(), 0xFACEB004, fN); 51c117cbae6196cfcade083805d999779fe8244091reed@google.com } 529ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein} 53c117cbae6196cfcade083805d999779fe8244091reed@google.com 549ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleintemplate <> void MemsetBench<uint16_t, true>::onDraw(const int loops, SkCanvas*) { 559ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein for (int i = 0; i < 1000*loops; i++) { 569ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein memsetT<uint16_t>(fBuffer.get(), 0x4973, fN); 579ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein } 589ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein} 599ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein 609ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, true>(1))); 619ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, false>(1))); 629ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, true>(10))); 639ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, false>(10))); 649ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, true>(100))); 659ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, false>(100))); 669ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, true>(1000))); 679ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, false>(1000))); 689ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, true>(10000))); 699ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, false>(10000))); 709ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, true>(100000))); 719ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint32_t, false>(100000))); 729ff378b01be0b0a3fc35677a2155ba4ade286cc2mtklein 739ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, true>(1))); 749ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, false>(1))); 759ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, true>(10))); 769ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, false>(10))); 779ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, true>(100))); 789ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, false>(100))); 799ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, true>(1000))); 809ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, false>(1000))); 819ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, true>(10000))); 829ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, false>(10000))); 839ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, true>(100000))); 849ff378b01be0b0a3fc35677a2155ba4ade286cc2mtkleinDEF_BENCH(return (new MemsetBench<uint16_t, false>(100000))); 85