1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 08:28:11 +00:00
Commit graph

52193 commits

Author SHA1 Message Date
Andreas Kling
5e24b97275 LibWeb: Implement HTMLImageElement.complete according to spec
Now that we use the HTML image loading algorithm from spec, we can
implement complete correctly.

This (finally) fixes an issue where images were not loading on
https://twinings.co.uk/ :^)
2023-07-11 10:03:49 +02:00
Andreas Kling
92bc3d200d LibWeb: Fix incorrectly offset root intersection rectangle for Document
When the intersection root is a Document, we use the viewport itself as
the root intersection rectangle. However, we should only use the size of
the viewport and strip away the current scroll offset.

This is important, as intersections are computed using viewport-relative
element rects, so we're already in a coordinate system where (0, 0) is
the top left of the scrolled viewport.

This fixes an issue where IntersectionObservers would fire at entirely
wrong scroll offsets. :^)
2023-07-11 10:03:49 +02:00
Kirill Nikolaev
6cdb1f0415 Kernel: Add an initial implementation of virtio-net driver
It can be exercised by setting
    SERENITY_ETHERNET_DEVICE_TYPE=virtio-net-pci.
2023-07-11 00:49:11 -06:00
Ali Mohammad Pur
b00a23b0b6 LibWeb: Fix a spec link in CSS/Parser
This pointed to the wrong part of the spec, make it point to the right
part instead :P
2023-07-11 09:38:37 +03:30
Ali Mohammad Pur
d60d149e62 LibWeb: Move some static functions from CSS/Parser.cpp into a new file 2023-07-11 09:38:37 +03:30
Ali Mohammad Pur
06c6c40df9 LibWeb+LibJS: Move some code around to make CSS/Parser parse faster
This makes it possible to include fewer full definitions of things,
which makes the file about 30% faster to compile.
2023-07-11 09:38:37 +03:30
Ali Mohammad Pur
392b5c3b19 LibJS: Resolve a circular include problem between HeapBlock and Cell
Cell::heap() and Cell::vm() needed to access member functions from
HeapBlock, and wanted to be inline, so they were moved to VM.h.
That approach will no longer work with VM.h not being included in every
file (starting from the next commit), so this commit fixes that circular
import issue by introducing secondary base classes to host the
references to Heap and VM, respectively.
2023-07-11 09:38:37 +03:30
Aliaksandr Kalenik
41f9dcd89b LibWeb: Implement "create a new child navigable" and supporting code
Implements https://html.spec.whatwg.org/multipage/document-sequences.html#create-a-new-child-navigable

Co-authored-by: Andreas Kling <kling@serenityos.org>
2023-07-11 06:48:25 +02:00
Taj Morton
1d2f1abf97 FileSystem/FATFS: Convert internal FAT inode attributes to dirent types 2023-07-10 21:54:23 -06:00
Beckett Normington
a961447dbd Ports: Add jdupes port
This commit ports the file deduplication utility `jdupes`.
2023-07-10 21:49:53 -06:00
Beckett Normington
73b5e3db6a Ports: Add libjodycode port
This commit ports `libjodycode` to Serenity, which is a helper library
containing shared code for utilities written by Jody Bruchon. This
library was required for porting `jdupes`.
2023-07-10 21:49:53 -06:00
Tim Schumacher
9d6372ff07 Kernel: Consolidate finding the ELF stack size with validation
Previously, we started parsing the ELF file again in a completely
different place, and without the partial mapping that we do while
validating.

Instead of doing manual parsing in two places, just capture the
requested stack size right after we validated it.
2023-07-10 21:08:31 -06:00
Lucas CHOLLET
398f7ae988 AK: Move chunks a single time in cleanup_unused_chunks()
All elements of the vector were moved to the left, for each element to
remove. This patch makes the function move each element exactly once.

On the same test case as the previous commit, it makes the function
disappear from the profile. These two commits combined reduce the
decompression time by 12%.
2023-07-10 21:35:10 -04:00
Lucas CHOLLET
44bedf7844 AK: Don't reuse chunks in AllocatingMemoryStream
As confusing as it may sound, reusing them is terrible performance wise.
When profiling the PNG decoder, the result (which is dominated by the
Zlib decompression) shows that the `cleanup_unused_chunks()` function
represented 14.26% of the profile before this patch and only 7.7%
afterward.

On a 6.5 MB PNG image, it reduces the decompression time by more than
5%.
2023-07-10 21:35:10 -04:00
Xexxa
d2637d54e5 Base: Add more emoji
🐏 - U+1F40F RAM
🐦‍⬛ - U+1F426 U+200D U+2B1B BLACK BIRD
📟 - U+1F4DF PAGER
🚻 - U+1F6BB RESTROOM
🚼 - U+1F6BC BABY SYMBOL
2023-07-10 19:47:19 -04:00
Andreas Kling
06d9451551 LibWeb: Don't cache property accesses on WindowProxy
Since the underlying HTML::Window can change, caching property accesses
on WindowProxy is not as simple as remembering the shape. Let's disable
caching here for now. We can come back to it in the future when we have
no low-hanging fruit left. :^)

Fixes an assertion failure on https://twinings.co.uk/
2023-07-11 00:14:50 +02:00
Andreas Kling
cf6792ec40 LibJS/Bytecode: Invalidate inline caches on unique shape mutation
Since we can't rely on shape identity (i.e its pointer address) for
unique shapes, give them a serial number that increments whenever a
mutation occurs.

Inline caches can then compare this serial number against what they
have seen before.
2023-07-11 00:14:50 +02:00
Sebastian Zaha
17d23e76e5 LibWeb: Fix flex & abspos alignment issues
Fixes a couple of weirder interactions between justify-content and
flex-direction related to reverse direction packing and how margins
are set.
2023-07-10 20:57:49 +02:00
MacDue
e1cf868e6e LibGfx: Use AntiAliasingPainter::fill_path() for drawing font glyphs
Using the general AA painter fill_path() is indistinguishable from the
previous rasterizer, so this switch simply allows us to share more code.
2023-07-10 20:56:25 +02:00
Nico Weber
c8e0db5061 pdf: Print info dict metadata if present 2023-07-10 17:49:07 +01:00
Nico Weber
c5c940b1c9 LibPDF: Add accessor for the document's info dict
This dict contains some metadata in some files.

Newer files also contain XMP metadata, but it's recommended to
still include this dict as well, for compatibility with older readers.
And it's much less complex than XMP, so let's support it.
2023-07-10 17:49:07 +01:00
Nico Weber
826c0426f3 LibPDF: Fix two use-after-frees
Two lambdas were capturing locals that were out of scope by the
time the lambdas ran.

With this, `pdf` can successfully load and print the page count of
pdf_reference_1.7.pdf.
2023-07-10 17:48:15 +01:00
Nico Weber
6111a9f9d0 LibPDF: Make Reference store two u32s instead of one
Reference used to be clever and stored the index of a ref in 18 bits
and the generation in 14 bits, so that both fit into a single u32.

However:
- It set MAX_REF_INDEX incorrectly (the max value of an 18-bit number
  is `(1 << 18) - 1`, not `(1 << 19) - 1`
- pdf_reference_1-7.pdf has 349223 objects, and that's larger
  than `(1 << 18) - 1` (which is 262143)

Since a Reference is stored in Value which is a Variant that also
stores a pointer, the size of Value is already 64-bit. So just don't
be clever here.

Makes pdf_reference_1-7.pdf get a bit further during decryption.
2023-07-10 17:48:15 +01:00
Taj Morton
5941117739 Ports/alpine: Patch build system files that added Serenity support
Changes the strategy for building Alpine to patch the distribution build
system files (configure, pith/Makefile.in), instead of regenerating them
from scratch.
This reduces fragility of the port as it no longer depends on the build
system having a compatible version of the auto* tools installed.
Resolves SerenityOS/serenity#19891.
2023-07-10 13:16:20 +02:00
Tim Schumacher
89b0a61067 Ports: Remove support for auth_types other than sha256 2023-07-10 13:08:27 +02:00
Tim Schumacher
f7ccdc268d Ports: Migrate remaining signature-based ports to sha256 2023-07-10 13:08:27 +02:00
Andreas Kling
e0b2757f95 LibJS/Bytecode: Always make own properties in object expressions
When building an object from an object expression, we don't want to
go through the full property setting machinery. This patch adds a new
PropertyKind::DirectKeyValue for PutById which guarantees that the
property becomes an own property.

This fixes an issue where setting the "__proto__" property in object
expressions wasn't working right.

12 new passes on test262. :^)
2023-07-10 09:29:54 +01:00
Andrew Kaster
91528e94ac Meta: Add example linux gn args, fix CSS build on case-insensitive FS 2023-07-09 16:29:31 -06:00
Andrew Kaster
16b83cd8fb Meta: Add gn build rules for Ladybird 2023-07-09 16:22:58 -06:00
Andrew Kaster
85c8cd5205 Meta: Add gn build rules for LibWeb 2023-07-09 16:22:58 -06:00
Andrew Kaster
7b3d0fb002 Meta: Add gn rules for dependencies of LibWeb
There's a lot of them, and LibWeb is a massive set of files to build as
well, so let's add these first :^).
2023-07-09 16:22:58 -06:00
Andrew Kaster
13a5606cdc Meta: Add gn build rules for LibGL and its dependencies 2023-07-09 16:22:58 -06:00
Andrew Kaster
bf02069a89 Meta: Add dependencies for the JS repl to the gn build 2023-07-09 16:22:58 -06:00
Andrew Kaster
165a67b115 Meta: Add LibJS and its dependencies to gn build 2023-07-09 16:22:58 -06:00
Andrew Kaster
1d3898f308 Meta: Add LibUnicode and LibLocale to gn build
A lot of code gen happening here. These generators are kind of
awkward to work with, and the fact that the CLDR data download
extracts over 8,000 files makes it hard to fit into the explicit
patterns GN expects of us.
2023-07-09 16:22:58 -06:00
Andrew Kaster
b1e94a02fe Meta: Add compiled_action from LLVM, use it to generate TZDB sources 2023-07-09 16:22:58 -06:00
Andrew Kaster
0e24bfb464 Meta: Add file download and archive extraction tools to gn build
Use them to download and extract the TZDB files
2023-07-09 16:22:58 -06:00
Andrew Kaster
05f56e09b5 Meta: Add CodeGenerators and library dependencies for them to gn build 2023-07-09 16:22:58 -06:00
Andrew Kaster
cbda1a6c73 Meta: Add LibTest and Tests/AK to gn build 2023-07-09 16:22:58 -06:00
Andrew Kaster
4bfb146181 Meta: Add the start of a gn build based on the LLVM gn build
"based on" in this context means "largely copied from"
2023-07-09 16:22:58 -06:00
Aliaksandr Kalenik
4a9a1d1656 LibJS: Skip bindings creation for locals during block declaration init
No need to create bindings for local variables as their values are not
stored in an environment.
2023-07-09 21:09:35 +02:00
djwisdom
47eaef9b41 Ports: Update serenity-theming use latest commit 103b0ad 2023-07-09 15:40:54 +01:00
Tim Schumacher
8a9761de20 AK: Let Array::from_span take a readonly Span
We are copying here, so there is no need to require a non-const Span.
2023-07-09 15:40:41 +01:00
Hendiadyoin1
467bc5b093 AK: Add a generic version of log2
This uses one of Sun OS's algorithms, for a comparison to other
algorithms please refer to
https://gist.github.com/Hendiadyoin1/f58346d66637deb9156ef360aa158bf9

This is used on aarch64 builds and for x86 floats and doubles
for performance gains check
https://quick-bench.com/q/_2jTykshP6cUqtgdepFaoQ53YC8
which shows approximately 2x gains

Co-Authored-By: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>
Co-Authored-By: kleines Filmröllchen <filmroellchen@serenityos.org>
Co-Authored-By: Dan Klishch <danilklishch@gmail.com>
2023-07-09 15:39:52 +01:00
Andreas Kling
de8e4b1853 LibJS/Bytecode: Cache object own property accesses
The instructions GetById and GetByIdWithThis now remember the last-seen
Shape, and if we see the same object again, we reuse the property offset
from last time without doing a new lookup.

This allows us to use Object::get_direct(), bypassing the entire lookup
machinery and saving lots of time.

~23% speed-up on Kraken/ai-astar.js :^)
2023-07-09 12:54:06 +02:00
Andreas Kling
52cd671163 LibJS: Make Object::internal_get() reveal the used property offset
This function now takes an optional out parameter for callers who would
like to what kind of property we ended up getting.

This will be used to implement inline caching for property lookups.

Also, to prepare for adding more forms of caching, the out parameter
is a struct CacheablePropertyMetadata rather than just an offset. :^)
2023-07-09 12:54:06 +02:00
Lucas CHOLLET
babe924da1 LibGfx: Provide a default implementation for ImageDecoder::initialize
In order to ease the removal of this function, let's provide a no-op
default implementation so decoders can stop implementing it one by one.

First step of #19893
2023-07-09 09:16:28 +01:00
David Gow
e84def4890 Documentation: Add qt6-multimedia-devel on openSUSE for Ladybird
The documentation for building Ladybird gives a list of packages to
install under openSUSE, but is missing the Qt6 Multimedia development
package, qt6-multimedia-devel.

Include it.
2023-07-09 08:06:13 +01:00
Dominique Liberda
d7644d1d86 Meta: Improve build compatibility with non-GNU userspaces
We depend on GNU-specific du switch `--apparent-size`. Busybox has this
implemented, but as `-b` instead.
Another part of the build system uses `cp --preserve=timestamps`. This
can be replaced by `rsync -t`, and rsync is already used through the
file.

Thanks to those changes, Serenity can be built on a Busybox system,
without GNU coreutils.
2023-07-09 06:16:31 +01:00
Dominique Liberda
fddbd11baa Meta: Implement proper checks for sudo alternatives
This introduces support for building with doas.
2023-07-09 06:16:31 +01:00