Skip to content

Commit

Permalink
fix: memory leak in Canvas encode
Browse files Browse the repository at this point in the history
  • Loading branch information
Brooooooklyn committed Feb 20, 2024
1 parent d9355c3 commit d1116a9
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions skia-c/skia_c.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,20 +230,21 @@ extern "C"

void skiac_surface_encode_data(skiac_surface *c_surface, skiac_sk_data *data, int format, int quality)
{
auto image = SURFACE_CAST->makeImageSnapshot();
auto image = SURFACE_CAST->makeImageSnapshot().release();
sk_sp<SkData> encoded_data;
if (format == int(SkEncodedImageFormat::kJPEG)) {
SkJpegEncoder::Options options;
options.fQuality = quality;
encoded_data = SkJpegEncoder::Encode(nullptr, image.release(), options);
encoded_data = SkJpegEncoder::Encode(nullptr, image, options);
} else if (format == int(SkEncodedImageFormat::kPNG)) {
encoded_data = SkPngEncoder::Encode(nullptr, image.release(), SkPngEncoder::Options());
encoded_data = SkPngEncoder::Encode(nullptr, image, SkPngEncoder::Options());
} else if (format == int(SkEncodedImageFormat::kWEBP)){
SkWebpEncoder::Options options;
options.fCompression = quality == 100 ? SkWebpEncoder::Compression::kLossless : SkWebpEncoder::Compression::kLossy;
options.fQuality = quality == 100 ? 75 : quality;
encoded_data = SkWebpEncoder::Encode(nullptr, image.release(), options);
encoded_data = SkWebpEncoder::Encode(nullptr, image, options);
}
image->unref();
if (encoded_data)
{
data->ptr = const_cast<uint8_t *>(encoded_data->bytes());
Expand Down

1 comment on commit d1116a9

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: d1116a9 Previous: d9355c3 Ratio
Draw house#skia-canvas 29 ops/sec (±0.23%) 29.6 ops/sec (±0.25%) 1.02
Draw house#node-canvas 38 ops/sec (±0.52%) 38.5 ops/sec (±0.54%) 1.01
Draw house#@napi-rs/skia 30 ops/sec (±0.41%) 29.9 ops/sec (±0.31%) 1.00
Draw gradient#skia-canvas 28 ops/sec (±0.86%) 28.5 ops/sec (±0.22%) 1.02
Draw gradient#node-canvas 36 ops/sec (±0.5%) 37 ops/sec (±0.43%) 1.03
Draw gradient#@napi-rs/skia 29 ops/sec (±0.42%) 28.8 ops/sec (±0.47%) 0.99

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.