ChecksumBench.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright 2012 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. #include "bench/Benchmark.h"
  8. #include "include/core/SkCanvas.h"
  9. #include "include/private/SkChecksum.h"
  10. #include "include/private/SkTemplates.h"
  11. #include "include/utils/SkRandom.h"
  12. #include "src/core/SkMD5.h"
  13. #include "src/core/SkOpts.h"
  14. enum ChecksumType {
  15. kMD5_ChecksumType,
  16. kHash_ChecksumType,
  17. };
  18. class ComputeChecksumBench : public Benchmark {
  19. enum {
  20. U32COUNT = 256,
  21. SIZE = U32COUNT * 4,
  22. };
  23. uint32_t fData[U32COUNT];
  24. ChecksumType fType;
  25. public:
  26. ComputeChecksumBench(ChecksumType type) : fType(type) {
  27. SkRandom rand;
  28. for (int i = 0; i < U32COUNT; ++i) {
  29. fData[i] = rand.nextU();
  30. }
  31. }
  32. bool isSuitableFor(Backend backend) override {
  33. return backend == kNonRendering_Backend;
  34. }
  35. protected:
  36. const char* onGetName() override {
  37. switch (fType) {
  38. case kMD5_ChecksumType: return "compute_md5";
  39. case kHash_ChecksumType: return "compute_hash";
  40. default: SK_ABORT("Invalid Type"); return "";
  41. }
  42. }
  43. void onDraw(int loops, SkCanvas*) override {
  44. switch (fType) {
  45. case kMD5_ChecksumType: {
  46. for (int i = 0; i < loops; i++) {
  47. SkMD5 md5;
  48. md5.write(fData, sizeof(fData));
  49. (void)md5.finish();
  50. }
  51. } break;
  52. case kHash_ChecksumType: {
  53. for (int i = 0; i < loops; i++) {
  54. volatile uint32_t result = SkOpts::hash(fData, sizeof(fData));
  55. sk_ignore_unused_variable(result);
  56. }
  57. }break;
  58. }
  59. }
  60. private:
  61. typedef Benchmark INHERITED;
  62. };
  63. ///////////////////////////////////////////////////////////////////////////////
  64. DEF_BENCH( return new ComputeChecksumBench(kMD5_ChecksumType); )
  65. DEF_BENCH( return new ComputeChecksumBench(kHash_ChecksumType); )