/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "bench/Benchmark.h" #include "include/private/base/SkTemplates.h" #include "src/core/SkMemset.h" using namespace skia_private; template class MemsetBench : public Benchmark { public: explicit MemsetBench(size_t bytes) : fN(bytes / sizeof(T)) , fBuffer(fN) , fName(SkStringPrintf("memset%zu_%zu", sizeof(T)*8, bytes)) {} bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } const char* onGetName() override { return fName.c_str(); } void onDraw(int loops, SkCanvas*) override; private: int fN; AutoTMalloc fBuffer; SkString fName; }; template <> void MemsetBench::onDraw(int loops, SkCanvas*) { for (int i = 0; i < 1000*loops; i++) { SkOpts::memset64(fBuffer.get(), 0xFACEFACEFACEFACE, fN); } } template <> void MemsetBench::onDraw(int loops, SkCanvas*) { for (int i = 0; i < 1000*loops; i++) { SkOpts::memset32(fBuffer.get(), 0xFACEB004, fN); } } template <> void MemsetBench::onDraw(int loops, SkCanvas*) { for (int i = 0; i < 1000*loops; i++) { SkOpts::memset16(fBuffer.get(), 0x4973, fN); } } DEF_BENCH(return (new MemsetBench(16))); DEF_BENCH(return (new MemsetBench(64))); DEF_BENCH(return (new MemsetBench(256))); DEF_BENCH(return (new MemsetBench(512))); DEF_BENCH(return (new MemsetBench(768))); DEF_BENCH(return (new MemsetBench(1024))); DEF_BENCH(return (new MemsetBench(2048))); DEF_BENCH(return (new MemsetBench(4096))); DEF_BENCH(return (new MemsetBench(65536))); DEF_BENCH(return (new MemsetBench(16))); DEF_BENCH(return (new MemsetBench(64))); DEF_BENCH(return (new MemsetBench(256))); DEF_BENCH(return (new MemsetBench(512))); DEF_BENCH(return (new MemsetBench(768))); DEF_BENCH(return (new MemsetBench(1024))); DEF_BENCH(return (new MemsetBench(2048))); DEF_BENCH(return (new MemsetBench(4096))); DEF_BENCH(return (new MemsetBench(65536))); DEF_BENCH(return (new MemsetBench(16))); DEF_BENCH(return (new MemsetBench(64))); DEF_BENCH(return (new MemsetBench(256))); DEF_BENCH(return (new MemsetBench(512))); DEF_BENCH(return (new MemsetBench(768))); DEF_BENCH(return (new MemsetBench(1024))); DEF_BENCH(return (new MemsetBench(2048))); DEF_BENCH(return (new MemsetBench(4096))); DEF_BENCH(return (new MemsetBench(65536)));