Chromium Code Reviews| Index: third_party/WebKit/Source/platform/testing/ImageDecodeBench.cpp |
| diff --git a/third_party/WebKit/Source/platform/testing/ImageDecodeBench.cpp b/third_party/WebKit/Source/platform/testing/ImageDecodeBench.cpp |
| index 0a1c00bcb26e40deb9bb76c1f54e174578b391e3..516fc074d677f086f158482127fee7317fe462da 100644 |
| --- a/third_party/WebKit/Source/platform/testing/ImageDecodeBench.cpp |
| +++ b/third_party/WebKit/Source/platform/testing/ImageDecodeBench.cpp |
| @@ -2,19 +2,21 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -// Provides a minimal wrapping of the Blink image decoders. Used to perform |
| -// a non-threaded, memory-to-memory image decode using micro second accuracy |
| -// clocks to measure image decode time. Optionally applies color correction |
| -// during image decoding on supported platforms (default off). Usage: |
| +// Provides a minimal wrapping of the Blink image decoders & Skia raster. |
| +// Used to perform a non-threaded, memory-to-memory image decode/raster using |
| +// micro second accuracy clocks to measure image decode time. Optionally |
| +// applies color correction during image decoding on supported platforms |
| +// (default off). Usage: |
| // |
| // % ninja -C out/Release image_decode_bench && |
| -// ./out/Release/image_decode_bench file [iterations] |
| +// ./out/Release/image_decode_bench file [--raster] [iterations] |
| // |
| // The output is formatted for use in a csv file (comma-separated variable). |
| // Each row represents successive frames in an animated image. |
| // Each column represents a successive iteration of decoding the whole animated |
| // image. |
| // This means non-animated images will show up as one column. |
| +// Raster timing also shows up as one column. |
| // |
| // TODO(noel): Consider adding md5 checksum support to WTF. Use it to compute |
| // the decoded image frame md5 and output that value. |
| @@ -31,6 +33,8 @@ |
| #include "platform/wtf/PassRefPtr.h" |
| #include "platform/wtf/PtrUtil.h" |
| #include "public/platform/Platform.h" |
| +#include "third_party/skia/include/core/SkCanvas.h" |
| +#include "third_party/skia/include/core/SkSurface.h" |
| #include "ui/gfx/test/icc_profiles.h" |
| #if defined(_WIN32) |
| @@ -310,6 +314,41 @@ void TimePacketedDecode(ImageDecoder* decoder, |
| Print2DResults(timings); |
| } |
| +void TimeRaster(ImageDecoder* decoder, |
| + PassRefPtr<SharedBuffer> data, |
| + size_t iterations) { |
| + const bool all_data_received = true; |
| + decoder->SetData(data.Get(), all_data_received); |
| + |
| + if (!decoder->IsSizeAvailable()) { |
| + fprintf(stderr, "failed to decode size\n"); |
| + exit(3); |
|
scroggo_chromium
2017/05/23 15:57:09
Right now it looks like we pass the following valu
cblume
2017/05/23 18:07:31
ImageDecodeBench currently (prior to this patch) r
|
| + } |
| + const auto size = decoder->Size(); |
| + |
| + ImageFrame* frame = decoder->FrameBufferAtIndex(0); |
| + if (frame->GetStatus() != ImageFrame::kFrameComplete) { |
| + fprintf(stderr, "failed to decode first frame\n"); |
| + exit(3); |
| + } |
| + |
| + auto surface = SkSurface::MakeRasterN32Premul(size.Width(), size.Height()); |
| + auto canvas = surface->getCanvas(); |
| + |
| + std::vector<double> timings(iterations); |
| + for (size_t i = 0; i < iterations; ++i) { |
| + double start_time = GetCurrentTime(); |
| + canvas->drawBitmap(frame->Bitmap(), 0, 0, nullptr); |
| + double elapsed_time = GetCurrentTime() - start_time; |
| + timings[i] = elapsed_time; |
| + } |
| + |
| + for (double iteration_time : timings) { |
| + printf("%f,\n", iteration_time); |
| + } |
| + printf("\n"); |
| +} |
| + |
| } // namespace |
| int Main(int argc, char* argv[]) { |
| @@ -326,9 +365,17 @@ int Main(int argc, char* argv[]) { |
| ColorBehavior::SetGlobalTargetColorProfile(profile); |
| } |
| + bool time_raster = false; |
| + if (argc >= 2 && strcmp(argv[1], "--raster") == 0) { |
| + --argc; |
| + ++argv; |
| + time_raster = true; |
| + } |
| + |
| if (argc < 2) { |
| fprintf(stderr, |
| - "Usage: %s [--color-correct] file [iterations] [packetSize]\n", |
| + "Usage: %s [--color-correct] [--raster] file [iterations] " |
| + "[packetSize]\n", |
| argv[0]); |
| exit(1); |
| } |
| @@ -386,10 +433,15 @@ int Main(int argc, char* argv[]) { |
| data, true, ImageDecoder::kAlphaPremultiplied, |
| apply_color_correction ? ColorBehavior::TransformToTargetForTesting() |
| : ColorBehavior::Ignore()); |
| - if (packet_size) { |
| - TimePacketedDecode(decoder.get(), data.Get(), packet_size, iterations); |
| + if (time_raster) { |
| + TimeRaster(decoder.get(), data.Get(), iterations); |
| } else { |
| - TimeDecode(decoder.get(), data.Get(), iterations); |
| + if (packet_size) { |
| + TimePacketedDecode(decoder.get(), data.Get(), packet_size, |
| + iterations); |
| + } else { |
| + TimeDecode(decoder.get(), data.Get(), iterations); |
| + } |
| } |
| return 0; |