23template <
typename T>
void* skia_alloc_func(
void*,
T items,
T size) {
27void skia_free_func(
void*,
void* address) {
sk_free(address); }
31#define SKDEFLATEWSTREAM_INPUT_BUFFER_SIZE 4096
32#define SKDEFLATEWSTREAM_OUTPUT_BUFFER_SIZE 4224
40 unsigned char* inBuffer,
41 size_t inBufferSize) {
42 zStream->next_in = inBuffer;
43 zStream->avail_in =
SkToInt(inBufferSize);
47 zStream->next_out = outBuffer;
48 zStream->avail_out =
sizeof(outBuffer);
52 out->write(outBuffer,
sizeof(outBuffer) - zStream->avail_out);
53 }
while (zStream->avail_in || !zStream->avail_out);
55 ? returnValue == Z_STREAM_END
56 : returnValue == Z_OK);
79 fImpl->fInBufferIndex = 0;
83 fImpl->fZStream.next_in =
nullptr;
84 fImpl->fZStream.zalloc = &skia_alloc_func;
85 fImpl->fZStream.zfree = &skia_free_func;
86 fImpl->fZStream.opaque =
nullptr;
87 SkASSERT(compressionLevel <= 9 && compressionLevel >= -1);
88 SkDEBUGCODE(
int r =) deflateInit2(&fImpl->fZStream, compressionLevel,
89 Z_DEFLATED, gzip ? 0x1F : 0x0F,
90 8, Z_DEFAULT_STRATEGY);
101 do_deflate(Z_FINISH, &fImpl->fZStream, fImpl->fOut, fImpl->fInBuffer,
102 fImpl->fInBufferIndex);
103 (void)deflateEnd(&fImpl->fZStream);
104 fImpl->fOut =
nullptr;
112 const char*
buffer = (
const char*)void_buffer;
115 std::min(len,
sizeof(fImpl->fInBuffer) - fImpl->fInBufferIndex);
116 memcpy(fImpl->fInBuffer + fImpl->fInBufferIndex,
buffer, tocopy);
119 fImpl->fInBufferIndex += tocopy;
120 SkASSERT(fImpl->fInBufferIndex <=
sizeof(fImpl->fInBuffer));
123 if (
sizeof(fImpl->fInBuffer) == fImpl->fInBufferIndex) {
124 do_deflate(Z_NO_FLUSH, &fImpl->fZStream, fImpl->fOut,
125 fImpl->fInBuffer, fImpl->fInBufferIndex);
126 fImpl->fInBufferIndex = 0;
133 return fImpl->fZStream.total_in + fImpl->fInBufferIndex;
#define SKDEFLATEWSTREAM_INPUT_BUFFER_SIZE
static void do_deflate(int flush, z_stream *zStream, SkWStream *out, unsigned char *inBuffer, size_t inBufferSize)
#define SKDEFLATEWSTREAM_OUTPUT_BUFFER_SIZE
static void * sk_calloc_throw(size_t size)
SK_API void sk_free(void *)
constexpr size_t SkToSizeT(S x)
constexpr int SkToInt(S x)
bool write(const void *, size_t) override
SkDeflateWStream(SkWStream *, int compressionLevel, bool gzip=false)
~SkDeflateWStream() override
size_t bytesWritten() const override
static const uint8_t buffer[]
unsigned char fInBuffer[SKDEFLATEWSTREAM_INPUT_BUFFER_SIZE]
#define TRACE_EVENT0(category_group, name)