CodecBench.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. * Copyright 2015 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/CodecBench.h"
  8. #include "bench/CodecBenchPriv.h"
  9. #include "include/codec/SkCodec.h"
  10. #include "include/core/SkBitmap.h"
  11. #include "src/core/SkOSFile.h"
  12. #include "tools/flags/CommandLineFlags.h"
  13. // Actually zeroing the memory would throw off timing, so we just lie.
  14. static DEFINE_bool(zero_init, false,
  15. "Pretend our destination is zero-intialized, simulating Android?");
  16. CodecBench::CodecBench(SkString baseName, SkData* encoded, SkColorType colorType,
  17. SkAlphaType alphaType)
  18. : fColorType(colorType)
  19. , fAlphaType(alphaType)
  20. , fData(SkRef(encoded))
  21. {
  22. // Parse filename and the color type to give the benchmark a useful name
  23. fName.printf("Codec_%s_%s%s", baseName.c_str(), color_type_to_str(colorType),
  24. alpha_type_to_str(alphaType));
  25. // Ensure that we can create an SkCodec from this data.
  26. SkASSERT(SkCodec::MakeFromData(fData));
  27. }
  28. const char* CodecBench::onGetName() {
  29. return fName.c_str();
  30. }
  31. bool CodecBench::isSuitableFor(Backend backend) {
  32. return kNonRendering_Backend == backend;
  33. }
  34. void CodecBench::onDelayedSetup() {
  35. std::unique_ptr<SkCodec> codec = SkCodec::MakeFromData(fData);
  36. fInfo = codec->getInfo().makeColorType(fColorType)
  37. .makeAlphaType(fAlphaType)
  38. .makeColorSpace(nullptr);
  39. fPixelStorage.reset(fInfo.computeMinByteSize());
  40. }
  41. void CodecBench::onDraw(int n, SkCanvas* canvas) {
  42. std::unique_ptr<SkCodec> codec;
  43. SkCodec::Options options;
  44. if (FLAGS_zero_init) {
  45. options.fZeroInitialized = SkCodec::kYes_ZeroInitialized;
  46. }
  47. for (int i = 0; i < n; i++) {
  48. codec = SkCodec::MakeFromData(fData);
  49. #ifdef SK_DEBUG
  50. const SkCodec::Result result =
  51. #endif
  52. codec->getPixels(fInfo, fPixelStorage.get(), fInfo.minRowBytes(),
  53. &options);
  54. SkASSERT(result == SkCodec::kSuccess
  55. || result == SkCodec::kIncompleteInput);
  56. }
  57. }