SkDeflateWStream: support gzip output

BUG=skia:4892
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1681603002

Review URL: https://codereview.chromium.org/1681603002
diff --git a/src/pdf/SkDeflate.cpp b/src/pdf/SkDeflate.cpp
index 0a5b6f9..3ae0d46 100644
--- a/src/pdf/SkDeflate.cpp
+++ b/src/pdf/SkDeflate.cpp
@@ -65,16 +65,23 @@
     z_stream fZStream;
 };
 
-SkDeflateWStream::SkDeflateWStream(SkWStream* out) : fImpl(new SkDeflateWStream::Impl) {
+SkDeflateWStream::SkDeflateWStream(SkWStream* out,
+                                   int compressionLevel,
+                                   bool gzip)
+    : fImpl(new SkDeflateWStream::Impl) {
     fImpl->fOut = out;
     fImpl->fInBufferIndex = 0;
     if (!fImpl->fOut) {
         return;
     }
+    fImpl->fZStream.next_in = nullptr;
     fImpl->fZStream.zalloc = &skia_alloc_func;
     fImpl->fZStream.zfree = &skia_free_func;
     fImpl->fZStream.opaque = nullptr;
-    SkDEBUGCODE(int r =) deflateInit(&fImpl->fZStream, Z_DEFAULT_COMPRESSION);
+    SkASSERT(compressionLevel <= 9 && compressionLevel >= -1);
+    SkDEBUGCODE(int r =) deflateInit2(&fImpl->fZStream, compressionLevel,
+                                      Z_DEFLATED, gzip ? 0x1F : 0x0F,
+                                      8, Z_DEFAULT_STRATEGY);
     SkASSERT(Z_OK == r);
 }