| Index: bench/MemsetBench.cpp
|
| diff --git a/bench/MemsetBench.cpp b/bench/MemsetBench.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..29370818a3acae452bad5b8a0ab7280d7d2d28a8
|
| --- /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);)
|
|
|