aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/ChecksumBench.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'bench/ChecksumBench.cpp')
-rw-r--r--bench/ChecksumBench.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/bench/ChecksumBench.cpp b/bench/ChecksumBench.cpp
new file mode 100644
index 0000000000..9057d1272b
--- /dev/null
+++ b/bench/ChecksumBench.cpp
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2012 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 "SkChecksum.h"
+#include "SkString.h"
+
+class ComputeChecksumBench : public SkBenchmark {
+public:
+ ComputeChecksumBench(void* param, const char name[]) : INHERITED(param) {
+ fName.printf("compute_checksum_%s", name);
+ }
+
+ enum {
+ DATA_SIZE = 1024,
+ N = SkBENCHLOOP(100000),
+ };
+protected:
+ virtual const char* onGetName() {
+ return fName.c_str();
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ uint64_t data[DATA_SIZE / sizeof(uint64_t)];
+ computeChecksum(data, DATA_SIZE);
+ }
+
+ virtual void computeChecksum(const uint64_t*, size_t) = 0;
+
+ SkString fName;
+private:
+ typedef SkBenchmark INHERITED;
+};
+
+/*
+ * Use SkComputeChecksum32 to compute a checksum on a datablock
+ */
+class ComputeChecksum32Bench : public ComputeChecksumBench {
+public:
+ ComputeChecksum32Bench(void* param)
+ : INHERITED(param, "32") { }
+
+protected:
+ virtual void computeChecksum(const uint64_t* data, size_t len) {
+ for (int i = 0; i < N; i++) {
+ volatile uint32_t result = SkComputeChecksum32(reinterpret_cast<const uint32_t*>(data), len);
+ }
+ }
+
+private:
+ typedef ComputeChecksumBench INHERITED;
+};
+
+/*
+ * Use SkComputeChecksum64 to compute a checksum on a datablock
+ */
+class ComputeChecksum64Bench : public ComputeChecksumBench {
+public:
+ ComputeChecksum64Bench(void* param)
+ : INHERITED(param, "64") { }
+
+protected:
+ virtual void computeChecksum(const uint64_t* data, size_t len) {
+ for (int i = 0; i < N; i++) {
+ volatile uint64_t result = SkComputeChecksum64(data, len);
+ }
+ }
+
+private:
+ typedef ComputeChecksumBench INHERITED;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+static SkBenchmark* Fact0(void* p) { return new ComputeChecksum32Bench(p); }
+static SkBenchmark* Fact1(void* p) { return new ComputeChecksum64Bench(p); }
+
+static BenchRegistry gReg0(Fact0);
+static BenchRegistry gReg1(Fact1);