1ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org/* 2ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org * Copyright 2012 Google Inc. 3ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org * 4ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org * Use of this source code is governed by a BSD-style license that can be 5ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org * found in the LICENSE file. 6ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org */ 7f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 8ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org#include "SkCanvas.h" 9ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org#include "SkChecksum.h" 10cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com#include "SkMD5.h" 11142e1fe7cf5dc82e5d4c107b06756302f0cbf96dreed@google.com#include "SkRandom.h" 12cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com#include "SkSHA1.h" 137de18e5c7b4e4a8ad8910b1016688ded902f185bbungeman@google.com#include "SkTemplates.h" 1429dea74ca6ad6044dc9a90f8ca55092b34945ce4bungeman@google.com 15cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.comenum ChecksumType { 16cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com kChecksum_ChecksumType, 17cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com kMD5_ChecksumType, 1870d75ca764e16e15f016e423b85a0fa2a29fb8c7commit-bot@chromium.org kSHA1_ChecksumType, 1970d75ca764e16e15f016e423b85a0fa2a29fb8c7commit-bot@chromium.org kMurmur3_ChecksumType, 20cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com}; 21ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org 22f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass ComputeChecksumBench : public Benchmark { 23ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org enum { 24142e1fe7cf5dc82e5d4c107b06756302f0cbf96dreed@google.com U32COUNT = 256, 25142e1fe7cf5dc82e5d4c107b06756302f0cbf96dreed@google.com SIZE = U32COUNT * 4, 26ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org }; 27142e1fe7cf5dc82e5d4c107b06756302f0cbf96dreed@google.com uint32_t fData[U32COUNT]; 28cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com ChecksumType fType; 29ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org 30ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.orgpublic: 31410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ComputeChecksumBench(ChecksumType type) : fType(type) { 32e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 33142e1fe7cf5dc82e5d4c107b06756302f0cbf96dreed@google.com for (int i = 0; i < U32COUNT; ++i) { 34142e1fe7cf5dc82e5d4c107b06756302f0cbf96dreed@google.com fData[i] = rand.nextU(); 35ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org } 36644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org } 37644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org 38644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { 39644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org return backend == kNonRendering_Backend; 40ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org } 41ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org 42ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.orgprotected: 43142e1fe7cf5dc82e5d4c107b06756302f0cbf96dreed@google.com virtual const char* onGetName() { 44cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com switch (fType) { 45cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com case kChecksum_ChecksumType: return "compute_checksum"; 46cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com case kMD5_ChecksumType: return "compute_md5"; 47cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com case kSHA1_ChecksumType: return "compute_sha1"; 4870d75ca764e16e15f016e423b85a0fa2a29fb8c7commit-bot@chromium.org case kMurmur3_ChecksumType: return "compute_murmur3"; 4970d75ca764e16e15f016e423b85a0fa2a29fb8c7commit-bot@chromium.org 50cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com default: SK_CRASH(); return ""; 51cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com } 52ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org } 53ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org 543361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas*) { 55cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com switch (fType) { 56cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com case kChecksum_ChecksumType: { 573361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 58cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com volatile uint32_t result = SkChecksum::Compute(fData, sizeof(fData)); 597de18e5c7b4e4a8ad8910b1016688ded902f185bbungeman@google.com sk_ignore_unused_variable(result); 60cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com } 61cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com } break; 62cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com case kMD5_ChecksumType: { 633361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 64cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com SkMD5 md5; 65cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com md5.update(reinterpret_cast<uint8_t*>(fData), sizeof(fData)); 66cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com SkMD5::Digest digest; 67cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com md5.finish(digest); 68cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com } 69cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com } break; 70cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com case kSHA1_ChecksumType: { 713361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 72cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com SkSHA1 sha1; 73cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com sha1.update(reinterpret_cast<uint8_t*>(fData), sizeof(fData)); 74cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com SkSHA1::Digest digest; 75cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com sha1.finish(digest); 76cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com } 77cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com } break; 7870d75ca764e16e15f016e423b85a0fa2a29fb8c7commit-bot@chromium.org case kMurmur3_ChecksumType: { 793361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 8070d75ca764e16e15f016e423b85a0fa2a29fb8c7commit-bot@chromium.org volatile uint32_t result = SkChecksum::Murmur3(fData, sizeof(fData)); 8170d75ca764e16e15f016e423b85a0fa2a29fb8c7commit-bot@chromium.org sk_ignore_unused_variable(result); 8270d75ca764e16e15f016e423b85a0fa2a29fb8c7commit-bot@chromium.org } 8370d75ca764e16e15f016e423b85a0fa2a29fb8c7commit-bot@chromium.org }break; 8488db9ef0cd8646171f35a3325706291070b5dc55reed@google.com } 85cfcb1bef94a8cfb565d9450b38f57d4f5c83790abungeman@google.com 8688db9ef0cd8646171f35a3325706291070b5dc55reed@google.com } 87142e1fe7cf5dc82e5d4c107b06756302f0cbf96dreed@google.com 88ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.orgprivate: 89f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 90ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org}; 91ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org 92ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org/////////////////////////////////////////////////////////////////////////////// 93ef76060cbf36032a5bef9cd8d18138704349c3aejunov@chromium.org 94410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ComputeChecksumBench(kChecksum_ChecksumType); ) 95410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ComputeChecksumBench(kMD5_ChecksumType); ) 96410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ComputeChecksumBench(kSHA1_ChecksumType); ) 97410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ComputeChecksumBench(kMurmur3_ChecksumType); ) 98