aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-05-07 10:52:30 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-08 17:09:31 +0000
commit39748b2771748a31d03b85df79dc2a2836b705a4 (patch)
tree480a31e615d403504475cc2b8e2ea464e191af4e /tools
parentee06ffe455df9cd4776abd415327c0fb0366e915 (diff)
port ok to SkPngEncoder
I can't tell you how excited I am to turn down the libpng settings... anything that saves me a few seconds is a nice quality of life win. This CL makes ok run in about half the time when producing .pngs. Profile running `ok gm srgb png` before: 10.59 s 16.5% 10.59 s longest_match 8.98 s 14.0% 8.98 s png_setup_paeth_row 8.93 s 13.9% 8.93 s skia_png_write_find_filter 7.75 s 12.1% 7.75 s deflate_slow 4.63 s 7.2% 4.63 s std::wait_until(...) const 959.00 ms 1.5% 959.00 ms SkPathRef::validate() const 935.00 ms 1.4% 935.00 ms sk_to_srgb_hsw ... After: 2.35 s 8.7% 2.35 s std::wait_until(...) const 1.70 s 6.2% 1.70 s longest_match 1.19 s 4.4% 1.19 s deflate_fast 931.00 ms 3.4% 931.00 ms SkPathRef::validate() const 898.00 ms 3.3% 898.00 ms sk_to_srgb_hsw ... Change-Id: I425c30b2ecd97a0e4a4392779de6301db473ee47 Reviewed-on: https://skia-review.googlesource.com/15547 Commit-Queue: Mike Klein <mtklein@chromium.org> Reviewed-by: Matt Sarett <msarett@google.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/ok_vias.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/tools/ok_vias.cpp b/tools/ok_vias.cpp
index 20779cfd78..254e6b1a4f 100644
--- a/tools/ok_vias.cpp
+++ b/tools/ok_vias.cpp
@@ -8,6 +8,7 @@
#include "SkImage.h"
#include "SkOSFile.h"
#include "SkPictureRecorder.h"
+#include "SkPngEncoder.h"
#include "ok.h"
#include <regex>
@@ -75,13 +76,23 @@ struct Png : Dst {
return status;
}
- auto image = target->image();
- sk_sp<SkData> png{image->encode()};
+ SkBitmap bm;
+ SkPixmap pm;
+ if (!target->image()->asLegacyBitmap(&bm, SkImage::kRO_LegacyBitmapMode) ||
+ !bm.peekPixels(&pm)) {
+ return Status::Failed;
+ }
sk_mkdir(dir.c_str());
- SkFILEWStream{(dir + "/" + src->name() + ".png").c_str()}
- .write(png->data(), png->size());
- return Status::OK;
+ SkFILEWStream dst{(dir + "/" + src->name() + ".png").c_str()};
+
+ SkPngEncoder::Options options;
+ options.fFilterFlags = SkPngEncoder::FilterFlag::kNone;
+ options.fZLibLevel = 1;
+ options.fUnpremulBehavior = pm.colorSpace() ? SkTransferFunctionBehavior::kRespect
+ : SkTransferFunctionBehavior::kIgnore;
+ return SkPngEncoder::Encode(&dst, pm, options) ? Status::OK
+ : Status::Failed;
}
sk_sp<SkImage> image() override {