| Index: bench/MemoryBench.cpp
|
| diff --git a/bench/MemoryBench.cpp b/bench/MemoryBench.cpp
|
| index 6e8e4a8588af45e8c1191794eb74ae24a6281af5..418e149f80bdd801cdc7a51f2c0b081e6113d6f9 100644
|
| --- a/bench/MemoryBench.cpp
|
| +++ b/bench/MemoryBench.cpp
|
| @@ -52,3 +52,108 @@ private:
|
|
|
| DEF_BENCH( return new ChunkAllocBench(64); )
|
| DEF_BENCH( return new ChunkAllocBench(8*1024); )
|
| +
|
| +static int* calloc(size_t num) {
|
| + return (int*)sk_calloc_throw(num*sizeof(int));
|
| +}
|
| +
|
| +static int* malloc_bzero(size_t num) {
|
| + const size_t bytes = num*sizeof(int);
|
| + int* ints = (int*)sk_malloc_throw(bytes);
|
| + sk_bzero(ints, bytes);
|
| + return ints;
|
| +}
|
| +
|
| +class ZerosBench : public SkBenchmark {
|
| + size_t fNum;
|
| + bool fRead;
|
| + bool fWrite;
|
| + bool fUseCalloc;
|
| + SkString fName;
|
| +public:
|
| + ZerosBench(size_t num, bool read, bool write, bool useCalloc)
|
| + : fNum(num)
|
| + , fRead(read)
|
| + , fWrite(write)
|
| + , fUseCalloc(useCalloc) {
|
| + fName.printf("memory_%s", useCalloc ? "calloc" : "malloc_bzero");
|
| + if (read && write) {
|
| + fName.appendf("_rw");
|
| + } else if (read) {
|
| + fName.appendf("_r");
|
| + } else if (write) {
|
| + fName.appendf("_w");
|
| + }
|
| + fName.appendf("_"SK_SIZE_T_SPECIFIER, num);
|
| + fIsRendering = false;
|
| + }
|
| +
|
| +protected:
|
| + virtual const char* onGetName() SK_OVERRIDE {
|
| + return fName.c_str();
|
| + }
|
| +
|
| + virtual void onDraw(SkCanvas*) SK_OVERRIDE {
|
| + for (int i = 0; i < this->getLoops(); i++) {
|
| + int* zeros = fUseCalloc ? calloc(fNum) : malloc_bzero(fNum);
|
| + if (fRead) {
|
| + volatile int x = 15;
|
| + for (size_t j = 0; j < fNum; j++) {
|
| + x ^= zeros[j];
|
| + }
|
| + }
|
| + if (fWrite) {
|
| + for (size_t j = 0; j < fNum; j++) {
|
| + zeros[j] = 15;
|
| + }
|
| + }
|
| + sk_free(zeros);
|
| + }
|
| + }
|
| +};
|
| +
|
| +// zero count r w useCalloc?
|
| +DEF_BENCH(return new ZerosBench(1024*1024, 0, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(1024*1024, 0, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(1024*1024, 0, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(1024*1024, 0, 1, 1))
|
| +DEF_BENCH(return new ZerosBench(1024*1024, 1, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(1024*1024, 1, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(1024*1024, 1, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(1024*1024, 1, 1, 1))
|
| +
|
| +DEF_BENCH(return new ZerosBench(256*1024, 0, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(256*1024, 0, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(256*1024, 0, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(256*1024, 0, 1, 1))
|
| +DEF_BENCH(return new ZerosBench(256*1024, 1, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(256*1024, 1, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(256*1024, 1, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(256*1024, 1, 1, 1))
|
| +
|
| +DEF_BENCH(return new ZerosBench(4*1024, 0, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(4*1024, 0, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(4*1024, 0, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(4*1024, 0, 1, 1))
|
| +DEF_BENCH(return new ZerosBench(4*1024, 1, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(4*1024, 1, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(4*1024, 1, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(4*1024, 1, 1, 1))
|
| +
|
| +DEF_BENCH(return new ZerosBench(300, 0, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(300, 0, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(300, 0, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(300, 0, 1, 1))
|
| +DEF_BENCH(return new ZerosBench(300, 1, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(300, 1, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(300, 1, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(300, 1, 1, 1))
|
| +
|
| +DEF_BENCH(return new ZerosBench(4, 0, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(4, 0, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(4, 0, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(4, 0, 1, 1))
|
| +DEF_BENCH(return new ZerosBench(4, 1, 0, 0))
|
| +DEF_BENCH(return new ZerosBench(4, 1, 0, 1))
|
| +DEF_BENCH(return new ZerosBench(4, 1, 1, 0))
|
| +DEF_BENCH(return new ZerosBench(4, 1, 1, 1))
|
|
|