OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "Benchmark.h" | 8 #include "Benchmark.h" |
9 #include "SkTemplates.h" | 9 #include "SkTemplates.h" |
10 #include "SkUtils.h" | 10 #include "SkUtils.h" |
11 | 11 |
12 template <typename T, bool kInline> | 12 template <typename T, bool kInline> |
13 class MemsetBench : public Benchmark { | 13 class MemsetBench : public Benchmark { |
14 public: | 14 public: |
15 explicit MemsetBench(int n) | 15 explicit MemsetBench(int n) |
16 : fN(n) | 16 : fN(n) |
17 , fBuffer(n) | 17 , fBuffer(n) |
18 , fName(SkStringPrintf("memset%d_%d%s", sizeof(T)*8, n, kInline ? "_inli
ne" : "")) {} | 18 , fName(SkStringPrintf("memset%d_%d%s", sizeof(T)*8, n, kInline ? "_inli
ne" : "")) {} |
19 | 19 |
20 bool isSuitableFor(Backend backend) override { return backend == kNonRenderi
ng_Backend; } | 20 bool isSuitableFor(Backend backend) override { return backend == kNonRenderi
ng_Backend; } |
21 const char* onGetName() override { return fName.c_str(); } | 21 const char* onGetName() override { return fName.c_str(); } |
22 | 22 |
23 void onDraw(const int loops, SkCanvas*) override; | 23 void onDraw(int loops, SkCanvas*) override; |
24 | 24 |
25 private: | 25 private: |
26 int fN; | 26 int fN; |
27 SkAutoTMalloc<T> fBuffer; | 27 SkAutoTMalloc<T> fBuffer; |
28 SkString fName; | 28 SkString fName; |
29 }; | 29 }; |
30 | 30 |
31 template <> void MemsetBench<uint32_t, false>::onDraw(const int loops, SkCanvas*
) { | 31 template <> void MemsetBench<uint32_t, false>::onDraw(int loops, SkCanvas*) { |
32 for (int i = 0; i < 1000*loops; i++) { | 32 for (int i = 0; i < 1000*loops; i++) { |
33 sk_memset32(fBuffer.get(), 0xFACEB004, fN); | 33 sk_memset32(fBuffer.get(), 0xFACEB004, fN); |
34 } | 34 } |
35 } | 35 } |
36 | 36 |
37 template <> void MemsetBench<uint16_t, false>::onDraw(const int loops, SkCanvas*
) { | 37 template <> void MemsetBench<uint16_t, false>::onDraw(int loops, SkCanvas*) { |
38 for (int i = 0; i < 1000*loops; i++) { | 38 for (int i = 0; i < 1000*loops; i++) { |
39 sk_memset16(fBuffer.get(), 0x4973, fN); | 39 sk_memset16(fBuffer.get(), 0x4973, fN); |
40 } | 40 } |
41 } | 41 } |
42 | 42 |
43 template <typename T> | 43 template <typename T> |
44 static void memsetT(T* dst, T val, int n) { | 44 static void memsetT(T* dst, T val, int n) { |
45 for (int i = 0; i < n; i++) { dst[i] = val; } | 45 for (int i = 0; i < n; i++) { dst[i] = val; } |
46 } | 46 } |
47 | 47 |
48 template <> void MemsetBench<uint32_t, true>::onDraw(const int loops, SkCanvas*)
{ | 48 template <> void MemsetBench<uint32_t, true>::onDraw(int loops, SkCanvas*) { |
49 for (int i = 0; i < 1000*loops; i++) { | 49 for (int i = 0; i < 1000*loops; i++) { |
50 memsetT<uint32_t>(fBuffer.get(), 0xFACEB004, fN); | 50 memsetT<uint32_t>(fBuffer.get(), 0xFACEB004, fN); |
51 } | 51 } |
52 } | 52 } |
53 | 53 |
54 template <> void MemsetBench<uint16_t, true>::onDraw(const int loops, SkCanvas*)
{ | 54 template <> void MemsetBench<uint16_t, true>::onDraw(int loops, SkCanvas*) { |
55 for (int i = 0; i < 1000*loops; i++) { | 55 for (int i = 0; i < 1000*loops; i++) { |
56 memsetT<uint16_t>(fBuffer.get(), 0x4973, fN); | 56 memsetT<uint16_t>(fBuffer.get(), 0x4973, fN); |
57 } | 57 } |
58 } | 58 } |
59 | 59 |
60 DEF_BENCH(return (new MemsetBench<uint32_t, true>(1))); | 60 DEF_BENCH(return (new MemsetBench<uint32_t, true>(1))); |
61 DEF_BENCH(return (new MemsetBench<uint32_t, false>(1))); | 61 DEF_BENCH(return (new MemsetBench<uint32_t, false>(1))); |
62 DEF_BENCH(return (new MemsetBench<uint32_t, true>(10))); | 62 DEF_BENCH(return (new MemsetBench<uint32_t, true>(10))); |
63 DEF_BENCH(return (new MemsetBench<uint32_t, false>(10))); | 63 DEF_BENCH(return (new MemsetBench<uint32_t, false>(10))); |
64 DEF_BENCH(return (new MemsetBench<uint32_t, true>(100))); | 64 DEF_BENCH(return (new MemsetBench<uint32_t, true>(100))); |
(...skipping 10 matching lines...) Expand all Loading... |
75 DEF_BENCH(return (new MemsetBench<uint16_t, true>(10))); | 75 DEF_BENCH(return (new MemsetBench<uint16_t, true>(10))); |
76 DEF_BENCH(return (new MemsetBench<uint16_t, false>(10))); | 76 DEF_BENCH(return (new MemsetBench<uint16_t, false>(10))); |
77 DEF_BENCH(return (new MemsetBench<uint16_t, true>(100))); | 77 DEF_BENCH(return (new MemsetBench<uint16_t, true>(100))); |
78 DEF_BENCH(return (new MemsetBench<uint16_t, false>(100))); | 78 DEF_BENCH(return (new MemsetBench<uint16_t, false>(100))); |
79 DEF_BENCH(return (new MemsetBench<uint16_t, true>(1000))); | 79 DEF_BENCH(return (new MemsetBench<uint16_t, true>(1000))); |
80 DEF_BENCH(return (new MemsetBench<uint16_t, false>(1000))); | 80 DEF_BENCH(return (new MemsetBench<uint16_t, false>(1000))); |
81 DEF_BENCH(return (new MemsetBench<uint16_t, true>(10000))); | 81 DEF_BENCH(return (new MemsetBench<uint16_t, true>(10000))); |
82 DEF_BENCH(return (new MemsetBench<uint16_t, false>(10000))); | 82 DEF_BENCH(return (new MemsetBench<uint16_t, false>(10000))); |
83 DEF_BENCH(return (new MemsetBench<uint16_t, true>(100000))); | 83 DEF_BENCH(return (new MemsetBench<uint16_t, true>(100000))); |
84 DEF_BENCH(return (new MemsetBench<uint16_t, false>(100000))); | 84 DEF_BENCH(return (new MemsetBench<uint16_t, false>(100000))); |
OLD | NEW |