From c117cbae6196cfcade083805d999779fe8244091 Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Mon, 3 Jun 2013 16:54:10 +0000 Subject: add bench for sk_memset16/32 BUG= Review URL: https://codereview.chromium.org/16336009 git-svn-id: http://skia.googlecode.com/svn/trunk@9405 2bbb7eff-a529-9590-31e7-b0007b416f81 --- bench/MemsetBench.cpp | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 bench/MemsetBench.cpp (limited to 'bench/MemsetBench.cpp') diff --git a/bench/MemsetBench.cpp b/bench/MemsetBench.cpp new file mode 100644 index 0000000000..29370818a3 --- /dev/null +++ b/bench/MemsetBench.cpp @@ -0,0 +1,114 @@ +/* + * 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 "SkBenchmark.h" +#include "SkCanvas.h" +#include "SkUtils.h" +#include "SkString.h" + +class MemsetBench : public SkBenchmark { + SkString fName; + +protected: + size_t fMinSize; + size_t fMaxSize; + enum { + kLoop = 100, + kBufferSize = 10000, + VALUE32 = 0x12345678, + VALUE16 = 0x1234 + }; + + enum MemsetType { + MEMSET16 = 16, + MEMSET32 = 32 + }; + +public: + MemsetBench(void* param, MemsetType type, size_t minSize, size_t maxSize) : INHERITED(param) { + SkASSERT((minSize < maxSize) && (maxSize <= kBufferSize)); + fMinSize = minSize; + fMaxSize = maxSize; + fName.printf("memset%d_" SK_SIZE_T_SPECIFIER "_" SK_SIZE_T_SPECIFIER, + type, minSize, maxSize); + fIsRendering = false; + } + + virtual void performTest() = 0; + +protected: + virtual const char* onGetName() SK_OVERRIDE { + return fName.c_str(); + } + + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { + for (int i = 0; i < kLoop; ++i) { + this->performTest(); + } + } + +private: + typedef SkBenchmark INHERITED; +}; + +class Memset32Bench : public MemsetBench { + uint32_t kBuffer[kBufferSize + 3]; +public: + Memset32Bench(void* param, size_t minSize, size_t maxSize) + : INHERITED(param, MEMSET32, minSize, maxSize) {} + +protected: + virtual inline void performTest() SK_OVERRIDE { + for(size_t j = fMinSize; j < fMaxSize; ++j){ + sk_memset32(kBuffer, VALUE32, j); + sk_memset32(kBuffer + 1, VALUE32, j); + sk_memset32(kBuffer + 2, VALUE32, j); + sk_memset32(kBuffer + 3, VALUE32, j); + } + } +private: + typedef MemsetBench INHERITED; +}; + +class Memset16Bench : public MemsetBench { + uint16_t kBuffer[kBufferSize + 7]; +public: + Memset16Bench(void* param, size_t minSize, size_t maxSize) + : INHERITED(param, MEMSET16, minSize, maxSize) {} + +protected: + virtual inline void performTest() SK_OVERRIDE { + for(size_t j = fMinSize; j < fMaxSize; ++j){ + sk_memset16(kBuffer, VALUE16, j); + sk_memset16(kBuffer + 1, VALUE16, j); + sk_memset16(kBuffer + 2, VALUE16, j); + sk_memset16(kBuffer + 3, VALUE16, j); + sk_memset16(kBuffer + 4, VALUE16, j); + sk_memset16(kBuffer + 5, VALUE16, j); + sk_memset16(kBuffer + 6, VALUE16, j); + sk_memset16(kBuffer + 7, VALUE16, j); + } + } +private: + typedef MemsetBench INHERITED; +}; + +DEF_BENCH(return new Memset32Bench(p, 1, 600);) +DEF_BENCH(return new Memset32Bench(p, 600, 800);) +DEF_BENCH(return new Memset32Bench(p, 800, 1000);) +DEF_BENCH(return new Memset32Bench(p, 1000, 2000);) +DEF_BENCH(return new Memset32Bench(p, 2000, 3000);) +DEF_BENCH(return new Memset32Bench(p, 3000, 4000);) +DEF_BENCH(return new Memset32Bench(p, 4000, 5000);) + +DEF_BENCH(return new Memset16Bench(p, 1, 600);) +DEF_BENCH(return new Memset16Bench(p, 600, 800);) +DEF_BENCH(return new Memset16Bench(p, 800, 1000);) +DEF_BENCH(return new Memset16Bench(p, 1000, 2000);) +DEF_BENCH(return new Memset16Bench(p, 2000, 3000);) +DEF_BENCH(return new Memset16Bench(p, 3000, 4000);) +DEF_BENCH(return new Memset16Bench(p, 4000, 5000);) -- cgit v1.2.3