xref: /aosp_15_r20/external/skia/bench/MemsetBench.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2013 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "bench/Benchmark.h"
9 #include "include/private/base/SkTemplates.h"
10 #include "src/core/SkMemset.h"
11 
12 using namespace skia_private;
13 
14 template <typename T>
15 class MemsetBench : public Benchmark {
16 public:
MemsetBench(size_t bytes)17     explicit MemsetBench(size_t bytes)
18         : fN(bytes / sizeof(T))
19         , fBuffer(fN)
20         , fName(SkStringPrintf("memset%zu_%zu", sizeof(T)*8, bytes)) {}
21 
isSuitableFor(Backend backend)22     bool isSuitableFor(Backend backend) override { return backend == Backend::kNonRendering; }
onGetName()23     const char* onGetName() override { return fName.c_str(); }
24 
25     void onDraw(int loops, SkCanvas*) override;
26 
27 private:
28     int fN;
29     AutoTMalloc<T> fBuffer;
30     SkString fName;
31 };
32 
onDraw(int loops,SkCanvas *)33 template <> void MemsetBench<uint64_t>::onDraw(int loops, SkCanvas*) {
34     for (int i = 0; i < 1000*loops; i++) {
35         SkOpts::memset64(fBuffer.get(), 0xFACEFACEFACEFACE, fN);
36     }
37 }
38 
onDraw(int loops,SkCanvas *)39 template <> void MemsetBench<uint32_t>::onDraw(int loops, SkCanvas*) {
40     for (int i = 0; i < 1000*loops; i++) {
41         SkOpts::memset32(fBuffer.get(), 0xFACEB004, fN);
42     }
43 }
44 
onDraw(int loops,SkCanvas *)45 template <> void MemsetBench<uint16_t>::onDraw(int loops, SkCanvas*) {
46     for (int i = 0; i < 1000*loops; i++) {
47         SkOpts::memset16(fBuffer.get(), 0x4973, fN);
48     }
49 }
50 
51 DEF_BENCH(return (new MemsetBench<uint64_t>(16)));
52 DEF_BENCH(return (new MemsetBench<uint64_t>(64)));
53 DEF_BENCH(return (new MemsetBench<uint64_t>(256)));
54 DEF_BENCH(return (new MemsetBench<uint64_t>(512)));
55 DEF_BENCH(return (new MemsetBench<uint64_t>(768)));
56 DEF_BENCH(return (new MemsetBench<uint64_t>(1024)));
57 DEF_BENCH(return (new MemsetBench<uint64_t>(2048)));
58 DEF_BENCH(return (new MemsetBench<uint64_t>(4096)));
59 DEF_BENCH(return (new MemsetBench<uint64_t>(65536)));
60 
61 DEF_BENCH(return (new MemsetBench<uint32_t>(16)));
62 DEF_BENCH(return (new MemsetBench<uint32_t>(64)));
63 DEF_BENCH(return (new MemsetBench<uint32_t>(256)));
64 DEF_BENCH(return (new MemsetBench<uint32_t>(512)));
65 DEF_BENCH(return (new MemsetBench<uint32_t>(768)));
66 DEF_BENCH(return (new MemsetBench<uint32_t>(1024)));
67 DEF_BENCH(return (new MemsetBench<uint32_t>(2048)));
68 DEF_BENCH(return (new MemsetBench<uint32_t>(4096)));
69 DEF_BENCH(return (new MemsetBench<uint32_t>(65536)));
70 
71 DEF_BENCH(return (new MemsetBench<uint16_t>(16)));
72 DEF_BENCH(return (new MemsetBench<uint16_t>(64)));
73 DEF_BENCH(return (new MemsetBench<uint16_t>(256)));
74 DEF_BENCH(return (new MemsetBench<uint16_t>(512)));
75 DEF_BENCH(return (new MemsetBench<uint16_t>(768)));
76 DEF_BENCH(return (new MemsetBench<uint16_t>(1024)));
77 DEF_BENCH(return (new MemsetBench<uint16_t>(2048)));
78 DEF_BENCH(return (new MemsetBench<uint16_t>(4096)));
79 DEF_BENCH(return (new MemsetBench<uint16_t>(65536)));
80