summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/skia/bench/ChecksumBench.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/skia/bench/ChecksumBench.cpp')
-rw-r--r--chromium/third_party/skia/bench/ChecksumBench.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/chromium/third_party/skia/bench/ChecksumBench.cpp b/chromium/third_party/skia/bench/ChecksumBench.cpp
new file mode 100644
index 00000000000..7d3ec9ff9f4
--- /dev/null
+++ b/chromium/third_party/skia/bench/ChecksumBench.cpp
@@ -0,0 +1,97 @@
+/*
+ * 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 "Benchmark.h"
+#include "SkCanvas.h"
+#include "SkChecksum.h"
+#include "SkMD5.h"
+#include "SkRandom.h"
+#include "SkSHA1.h"
+#include "SkTemplates.h"
+
+enum ChecksumType {
+ kChecksum_ChecksumType,
+ kMD5_ChecksumType,
+ kSHA1_ChecksumType,
+ kMurmur3_ChecksumType,
+};
+
+class ComputeChecksumBench : public Benchmark {
+ enum {
+ U32COUNT = 256,
+ SIZE = U32COUNT * 4,
+ };
+ uint32_t fData[U32COUNT];
+ ChecksumType fType;
+
+public:
+ ComputeChecksumBench(ChecksumType type) : fType(type) {
+ SkRandom rand;
+ for (int i = 0; i < U32COUNT; ++i) {
+ fData[i] = rand.nextU();
+ }
+ }
+
+ virtual bool isSuitableFor(Backend backend) SK_OVERRIDE {
+ return backend == kNonRendering_Backend;
+ }
+
+protected:
+ virtual const char* onGetName() {
+ switch (fType) {
+ case kChecksum_ChecksumType: return "compute_checksum";
+ case kMD5_ChecksumType: return "compute_md5";
+ case kSHA1_ChecksumType: return "compute_sha1";
+ case kMurmur3_ChecksumType: return "compute_murmur3";
+
+ default: SK_CRASH(); return "";
+ }
+ }
+
+ virtual void onDraw(const int loops, SkCanvas*) {
+ switch (fType) {
+ case kChecksum_ChecksumType: {
+ for (int i = 0; i < loops; i++) {
+ volatile uint32_t result = SkChecksum::Compute(fData, sizeof(fData));
+ sk_ignore_unused_variable(result);
+ }
+ } break;
+ case kMD5_ChecksumType: {
+ for (int i = 0; i < loops; i++) {
+ SkMD5 md5;
+ md5.update(reinterpret_cast<uint8_t*>(fData), sizeof(fData));
+ SkMD5::Digest digest;
+ md5.finish(digest);
+ }
+ } break;
+ case kSHA1_ChecksumType: {
+ for (int i = 0; i < loops; i++) {
+ SkSHA1 sha1;
+ sha1.update(reinterpret_cast<uint8_t*>(fData), sizeof(fData));
+ SkSHA1::Digest digest;
+ sha1.finish(digest);
+ }
+ } break;
+ case kMurmur3_ChecksumType: {
+ for (int i = 0; i < loops; i++) {
+ volatile uint32_t result = SkChecksum::Murmur3(fData, sizeof(fData));
+ sk_ignore_unused_variable(result);
+ }
+ }break;
+ }
+
+ }
+
+private:
+ typedef Benchmark INHERITED;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+DEF_BENCH( return new ComputeChecksumBench(kChecksum_ChecksumType); )
+DEF_BENCH( return new ComputeChecksumBench(kMD5_ChecksumType); )
+DEF_BENCH( return new ComputeChecksumBench(kSHA1_ChecksumType); )
+DEF_BENCH( return new ComputeChecksumBench(kMurmur3_ChecksumType); )