Chromium Code Reviews| Index: bench/EncoderBench.cpp |
| diff --git a/bench/EncoderBench.cpp b/bench/EncoderBench.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..baa678e9234319ab9ccc8fa6f87d4ff7a21938f0 |
| --- /dev/null |
| +++ b/bench/EncoderBench.cpp |
| @@ -0,0 +1,75 @@ |
| +/* |
| + * Copyright 2016 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 "Resources.h" |
| +#include "SkBitmap.h" |
| +#include "SkData.h" |
| +#include "SkImageEncoder.h" |
| + |
| +class EncodeBench : public Benchmark { |
| +public: |
| + EncodeBench(const char* filename, SkImageEncoder::Type type, int quality) |
| + : fFilename(filename) |
| + , fType(type) |
| + , fQuality(quality) |
| + { |
| + // Set the name of the bench |
| + SkString name("Encode_"); |
| + name.append(filename); |
| + name.append("_"); |
| + switch (type) { |
| + case SkImageEncoder::kJPEG_Type: |
| + name.append("JPEG"); |
| + break; |
| + case SkImageEncoder::kPNG_Type: |
| + name.append("PNG"); |
| + break; |
| + case SkImageEncoder::kWEBP_Type: |
| + name.append("WEBP"); |
| + break; |
| + default: |
| + name.append("Unknown"); |
| + break; |
| + } |
| + |
| + fName = name; |
| + } |
| + |
| + bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } |
| + |
| + const char* onGetName() override { return fName.c_str(); } |
| + |
| + void onPreDraw(SkCanvas*) override { |
| +#ifdef SK_DEBUG |
| + bool result = |
| +#endif |
| + GetResourceAsBitmap(fFilename, &fBitmap); |
| + SkASSERT(result); |
| + } |
| + |
| + void onDraw(int loops, SkCanvas*) override { |
| + for (int i = 0; i < loops; i++) { |
| + SkAutoTUnref<SkData> data(SkImageEncoder::EncodeData(fBitmap, fType, fQuality)); |
| + SkASSERT(data); |
| + } |
| + } |
| + |
| +private: |
| + const char* fFilename; |
| + SkImageEncoder::Type fType; |
|
scroggo
2016/04/14 13:43:59
nit: Many of these variables could be const.
msarett
2016/04/18 17:25:06
Done.
|
| + int fQuality; |
| + SkString fName; |
| + SkBitmap fBitmap; |
| +}; |
| + |
| + |
| +// The Android Photos app uses a quality of 90 on JPEG encodes |
| +DEF_BENCH(return new EncodeBench("mandrill_512.png", SkImageEncoder::kJPEG_Type, 90)); |
|
scroggo
2016/04/14 13:43:59
Would it be interesting to use more than one image
msarett
2016/04/18 17:25:06
I think so. I don't quite understand it well enou
scroggo
2016/04/18 17:53:49
I'm not sure. I definitely think this is a good st
|
| +// PNG encodes are lossless so quality should be ignored |
| +DEF_BENCH(return new EncodeBench("mandrill_512.png", SkImageEncoder::kPNG_Type, 90)); |
| +DEF_BENCH(return new EncodeBench("mandrill_512.png", SkImageEncoder::kWEBP_Type, 90)); |
|
scroggo
2016/04/14 13:43:59
Do they also use 90 for quality on WEBP encodes? D
msarett
2016/04/18 17:25:06
The jpeg info is from judds' comment on the bug:
|