mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-08 06:09:58 +00:00
LibGfx: Don't create AnonymousBuffer for each bitmap in BitmapSequence
When decoding a BitmapSequence received over IPC, we were creating an AnonymousBuffer for each bitmap and then making a Gfx::Bitmap wrapper around it. This was unnecessarily using up one file descriptor per bitmap, and also wasting a lot of memory for small bitmaps since we always allocated at least one VM page. This patch changes the BitmapSequence decoder to use malloc memory instead, saving file descriptors and using less memory overall.
This commit is contained in:
parent
3593c3b687
commit
4f684bb4c9
Notes:
github-actions[bot]
2025-10-24 06:54:18 +00:00
Author: https://github.com/awesomekling
Commit: 4f684bb4c9
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6561
3 changed files with 25 additions and 11 deletions
|
|
@ -128,14 +128,9 @@ ErrorOr<Gfx::BitmapSequence> decode(Decoder& decoder)
|
|||
if (size_check.has_overflow() || size_check.value() > bytes.size())
|
||||
return Error::from_string_literal("IPC: Invalid Gfx::BitmapSequence buffer data");
|
||||
|
||||
auto buffer = TRY(Core::AnonymousBuffer::create_with_size(size_in_bytes));
|
||||
auto buffer_bytes = Bytes { buffer.data<u8>(), buffer.size() };
|
||||
|
||||
bytes.slice(bytes_read, size_in_bytes).copy_to(buffer_bytes);
|
||||
|
||||
auto slice = bytes.slice(bytes_read, size_in_bytes);
|
||||
bytes_read += size_in_bytes;
|
||||
|
||||
bitmap = TRY(Gfx::Bitmap::create_with_anonymous_buffer(metadata.format, metadata.alpha_type, move(buffer), metadata.size));
|
||||
bitmap = TRY(Gfx::Bitmap::create_with_raw_data(metadata.format, metadata.alpha_type, slice, metadata.size));
|
||||
}
|
||||
|
||||
bitmaps.append(bitmap);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue