1
0
mirror of https://github.com/SerenityOS/serenity synced 2024-07-03 11:53:38 +00:00
Commit Graph

62008 Commits

Author SHA1 Message Date
Aliaksandr Kalenik
0130372531 LibWeb: Reschedule HTML event loop processing if navigable needs repaint
This is an attempt to fix the hanging CI on macOS caused by some
screenshot requests being stuck unprocessed. With this change, we at
least make sure that the HTML event loop processing, which triggers
repainting, will happen as long as there are navigables that need to be
repainted.

(cherry picked from commit 72b4d44d07e12cc04bde90872e2f31aaab64aa00)
2024-07-03 10:06:51 +02:00
Nicolas Danelon
cfa3a91fb5 UI/AppKit: Make the header buttons more accessible
By Setting setBordered propperty on header buttons to `Yes` this
path makes the whole button clickable. Previously the only the
icon was clickable, now it's easy to click.

(cherry picked from commit af909784547c4f0ea8218ce464f45b3a1b0f4cb7)
2024-07-03 10:06:28 +02:00
Kevin Meyer
cf139d9bd0 Ladybird/AppKit: Enable reload action
Is necessary, since history navigation was refactored

(cherry picked from commit 8a7afffdd357b3fb16c7e6c6ff32198165294b60)
2024-07-03 10:06:11 +02:00
Ryan Castellucci
a2a6bc5348 Documentation: Fix some minor ESL grammar issues
There are a few instances where comments and documentation have minor
grammar issues likely resulting from English being the author's second
language.

This PR fixes several such cases, changing to idiomatic English and
resolving where it is unclear whether the user or program/code is
being referred to.
2024-07-03 00:17:46 +02:00
Andrew Kaster
4103a9cfd2 LibWeb: Use double as the argument for AnimationFrameCallbacks
This avoids an unnecessary lossy conversion for the current time from
double to i32. And avoids an UBSAN failure on macOS that's dependent
on the current uptime.

(cherry picked from commit 55c1b5d1f4d7c82f0a68323260cb2e0f7de2faae,
amended to fix a typo in the commit message)
2024-07-02 14:21:39 +02:00
Nico Weber
ee129a3c7d Meta: Make disk_usage() not depend on GNU du
BSD `du` can also print apparent size, it just needs a different flag.

Makes `serenity.sh run` get a bit farther trying to build the disk
image on macOS without brew installed. No intended behavior change
elsewhere.
2024-07-01 23:26:18 +02:00
Bastiaan van der Plaat
52023e38dc LibWeb/Geometry: Make DOMRect doubles unrestricted
(cherry picked from commit bff6c0680aff5862e05c68af03a653f2250328b4)
2024-07-01 23:03:47 +02:00
Tim Ledbetter
077c0319b3 sed: Support reading arbitrarily long lines 2024-07-01 13:46:00 +02:00
Tim Ledbetter
c921930593 grep: Support reading arbitrarily long lines 2024-07-01 13:46:00 +02:00
Tim Ledbetter
5070830acc cut: Don't skip final character when using byte or character ranges 2024-07-01 13:46:00 +02:00
Tim Ledbetter
f3fbcb28e7 cut: Support reading arbitrarily long lines 2024-07-01 13:46:00 +02:00
Tim Ledbetter
4663b2fee6 comm: Support reading arbitrarily long lines 2024-07-01 13:46:00 +02:00
kleines Filmröllchen
9f0ab281ce AudioServer: Handle missing audio device gracefully
On several platforms, we don't yet have audio
support, so audio devices are missing. Instead of
having AudioServer crash repeatedly, and not
having the ability to open any app that relies on
it, we should instead handle missing devices
gracefully. This implementation is minimal, audio
device hotplugging support and such should be
implemented together with multi-device support.
AudioServer will start up and seem to function
normally without an audio device, but it will
pretend the device has a sample rate of 44.1 kHz
and all audio input is discarded.
2024-07-01 12:47:52 +02:00
brody-qq
e254810d0a Kernel/Memory: Remove duplicate code in try_create_purgeable_with_size()
The methods try_create_with_size() and try_create_purgeable_with_size()
on AnonymousVMObject are almost identical, other than one member
that gets set (m_purgeable). This patch makes
try_create_purgeable_with_size() call try_create_with_size() so that
both methods re-use the same code.
2024-07-01 12:47:32 +02:00
Tim Ledbetter
d4f135b2c6 UI/Qt: Ignore tab bar middle clicks if the user didn't click on a tab
This avoids a segfault that would previously occur when middle clicking
to close a tab if only 1 tab was open.

(cherry picked from commit b95c05b6115c8eb84fe6fec55f5152db852fe743)
2024-07-01 12:45:47 +02:00
Tim Ledbetter
d9245bc5ac LibWeb: Implement the HTMLTrackElement.kind attribute
This reflects the HTML `kind` attribute.

(cherry picked from commit bdaa7f0e8ed738ad0bd6e19878f296436fe40377)
2024-07-01 12:45:34 +02:00
Nico Weber
5ff69579a4 LibGfx/WebPWriter: Implement run-length encoding
This implements the start of lossless webp's compression scheme,
which is almost, but not quite, entirely unlike deflate.

The green channel is now green-or-length, and has up to 280
entries, instead of up to 256 before. We now use the 40-entry
distance code (even though it only ever stores 1s now).

Due to this, a few places change to taking spans instead of
Array<256>s.

The spec only has the transform from prefix or distance code
to value. The inverse prefix_decompose() in this patch is
my own invention. I checked with a python script that it's
a true inverse (see PR for the script).

We now look for back-references with a distance of 1, which is
equivalent to run-length encoding. It's fairly fast to compute,
but leaves compression on the table. Full window-based
back references will be in a future PR.

We also still don't do color cache entries yet, but that should
be fairly straightforward to add. (It will make the green channel
larger than 280 entries.)

We still use a single global huffman table for the entire image.
Doing one per tile should be doable with the organization we now
have, and might also be in a future PR.

File sizes, and perf numbers on HEAD before this patch series (see
previous commit for perf comparison to previous commit):

    sunset-retro.png (876K):
        1.7M -> 1.6M,
        25.3 ms ± 0.5 ms -> 27.5 ms ± 0.8 ms

(helps little; from 1.94x as input to 1.83x as large.
About 5% smaller, for about a 10% slowdown.)

    wow.gif (nee giphy.gif) (184k):
        3.9M -> 1.4M
        105.7 ms ± 1.7 ms -> 74.0 ms ± 1.1 ms

(from 21.2x as big as the gif input to 7.6x as big.
About 64% smaller, for a 28% speed _up_.)

    7z7c.gif (11K):
        40K -> 8.4K
        13.9 ms ± 0.6 ms -> 12.9 ms ± 0.5 ms

(from 3.6x as big as the gif input to 0.76x as big :^)
About 79% smaller, for a 7% speed _up_.)
2024-07-01 00:29:39 +02:00
Nico Weber
3f1c562aa3 LibGfx/WebPWriter: Extract can_write_as_simple_code_lengths()
Pure code move, no behavior change.
2024-07-01 00:29:39 +02:00
Nico Weber
f5bbc69e6a LibGfx/WebPWriter: Extract compute_and_write_prefix_code_group()
Pure code move, no behavior change.
2024-07-01 00:29:39 +02:00
Nico Weber
2627721e0b LibGfx/WebPWriter: Extract bitmap_to_symbols() function
Pure code move, no behavior change.
2024-07-01 00:29:39 +02:00
Nico Weber
580134241e LibGfx/WebPWriter: Separate symbol generation from statistics collection
We now do this in two passes instead of in one. This is virtually free
performance-wise, and allows nicer factoring.

Perf numbers after this change (see previous commit for perf numbers
before):

    Benchmark 1: image -o sunset-retro.webp sunset-retro.bmp
      Time (mean ± σ): 26.7 ms ± 0.8 ms

    Benchmark 1: animation -o 7z7c.webp 7z7c.gif
      Time (mean ± σ): 14.5 ms ± 0.6 ms

    Benchmark 1: animation -o wow.webp wow.gif
      Time (mean ± σ): 108.2 ms ± 2.2 ms
2024-07-01 00:29:39 +02:00
Nico Weber
85739def89 LibGfx/WebPWriter: Use symbols for writing image data
No behavior change yet, but this will allow us to emit distance/length
and color cache symbols in addition to literal symbols.

Not super expensive perf-wise. Before:

    Benchmark 1: image -o sunset-retro.webp sunset-retro.bmp
      Time (mean ± σ): 25.3 ms ± 0.5 ms

    Benchmark 1: animation -o 7z7c.webp 7z7c.gif
      Time (mean ± σ): 13.9 ms ± 0.6 ms

    Benchmark 1: animation -o wow.webp wow.gif
      Time (mean ± σ): 105.7 ms ± 1.7 ms

After:

    Benchmark 1: image -o sunset-retro.webp sunset-retro.bmp
      Time (mean ± σ): 26.1 ms ± 0.6 ms

    Benchmark 1: animation -o 7z7c.webp 7z7c.gif
      Time (mean ± σ): 14.4 ms ± 0.6 ms

    Benchmark 1: animation -o wow.webp wow.gif
      Time (mean ± σ): 106.5 ms ± 1.9 ms
2024-07-01 00:29:39 +02:00
Nico Weber
7c6176f983 LibCompress: Detemplatize generate_huffman_lengths()
Take Spans instead of Arrays. There's no need to have one copy of this
function for every possible array size passed to it.

Hardcode the inline size of the BinaryHeap to 288 for now. If this
becomes a performance issue in the future, we can make that size
an (optional) template parameter then.

No behavior change.
2024-07-01 00:29:39 +02:00
Nico Weber
9cc688041a AK: Give IntrusiveBinaryHeap template args named types
Works around https://gcc.gnu.org/PR70413. Without this, the next
commit would cause -Wsubobject-linkage warnings for AK/BinaryHeap.h
when used in LibCompress/Huffman.h.

We can undo this once we're on GCC 14 everywhere.

No behavior change.
2024-07-01 00:29:39 +02:00
Nico Weber
59ef7d0d4e LibGfx/WebPLoaderLossless: Add a spec comment 2024-07-01 00:29:39 +02:00
Nico Weber
e54fc640f0 LibGfx/WebPWriter: Tweak dbgln_if() output
The writer logging now looks more like the reader logging, making
it easier to spot disagreements.
2024-07-01 00:29:39 +02:00
Ali Mohammad Pur
f6c3b33333 LibWasm/WASI: Don't convert enums and u8s into i64
Doing so results in incorrect values being created, ultimately leading
to traps or errors.
2024-06-30 21:55:55 +02:00
kleines Filmröllchen
540e8e5523 Meta: Enable VirtIO on Windows QEMU
VirtIO was probably broken on Windows versions of
QEMU, but this seems to no longer be the case.
Enabling VirtIO is currently required for RISC-V
mouse and keyboard support.
2024-06-30 14:33:30 +02:00
Dan Klishch
2360df3ab8 Everywhere: Define even more destructors out of line
You guessed it, this fixes compilation with LLVM trunk.
2024-06-30 08:52:07 +02:00
Dan Klishch
c03cca7b2f AK+LibTest: Choose definition of CO_TRY and CO_TRY_OR_FAIL more robustly
There are three compiler bugs that influence this decision:

 - Clang writing to (validly) destroyed coroutine frame with -O0 and
   -fsanitize=null,address under some conditions
   (https://godbolt.org/z/17Efq5Ma5) (AK_COROUTINE_DESTRUCTION_BROKEN);

 - GCC being unable to handle statement expressions in coroutines
   (AK_COROUTINE_STATEMENT_EXPRS_BROKEN);

 - GCC being unable to deduce template type parameter for TryAwaiter
   with nested CO_TRYs (AK_COROUTINE_TYPE_DEDUCTION_BROKEN).

Instead of growing an ifdef soup in AK/Coroutine.h and
LibTest/AsyncTestCase.h, define three macros in AK/Platform.h that
correspond to these bugs and use them accordingly in the said files.
2024-06-29 20:15:05 -06:00
Liav A.
6fc3908818 Utilities/init: Add "drop to emergency shell" functionality
In case the user requests this, init can drop directly to a shell
without trying to spawn SystemServer.

To test this on x86-64, run:
```
Meta/serenity.sh run x86_64 GNU "init_args=emergency"
```

Also, init will drop to emergency shell if mounting filesystems with
`mount -a` failed for some reason.

This functionality can be useful in many cases.
For example, if the user needs to perform a command that must not alter
a corrupted filesystem state, then this mode is useful as the filesystem
should be mounted in read-only mode.
Another example is the ability to get a functioning system in case
SystemServer behaves badly or inconsistently, or the user specified a
wrong fstab entry, so proceeding to boot is probably a bad option.
2024-06-30 00:20:45 +02:00
Liav A.
1e73a584a7 Userland: Move basic system init functionality out of SystemServer
Let's make SystemServer simpler by not involving it with the basic
system initialization sequence.
That initialization sequence can be done in another program that
theoretically can be put in another filesystem.

Co-authored-by: Tim Schumacher <timschumi@gmx.de>
2024-06-30 00:20:45 +02:00
Thomas Voss
96efa81dc6 Utilities/wc: Seek the input file(s) if only -c is passed
If the user only wants to get the byte count of a set of files, then for
each file we can simply seek it to get the byte count instead of
iterating over all the bytes.
2024-06-30 00:17:46 +02:00
Liav A.
bd474dab14 Prekernel: Move the generate_secure_seed function out of init.cpp
As part of a commit series trying to make the prekernel nicer, we should
move and refactor functions out of the init.cpp file if possible.
2024-06-29 19:56:45 +02:00
Liav A.
f6e01aae9a Prekernel: Add support for assertion printing
This is done by using a FixedStringBuffer as the foundation to perform
string formatting, which ensures that we avoid memory allocations in
the prekernel stage.
2024-06-29 19:56:45 +02:00
Liav A.
00c9a57345 Prekernel: Add stub methods to handle memory allocations
These methods do basically nothing right now, because we don't allocate
memory in the prekernel stage.
It's only here for a later commit when we bring up assertion formatting
and printing.
2024-06-29 19:56:45 +02:00
Liav A.
f003c37596 Kernel/Library: Move mini-stdlib functions into their own header file
This will be useful when integrating them later on in the prekernel
stage.
2024-06-29 19:56:45 +02:00
implicitfield
1bf7f99a7b Kernel/Ext2FS: Support writing holes
With this change, we no longer preallocate blocks when an inode's size
is updated, and instead only allocate the minimum amount of blocks when
the inode is actually written to.
2024-06-29 19:16:08 +02:00
implicitfield
180f3f29ab Kernel/Ext2FS: Refactor computing and flushing blocks
This is a large commit, since this is essentially a complete rewrite of
the key low-level functions that handle reading/writing blocks. This is,
however, a necessary prerequisite of being able to write holes.

The previous version of `flush_block_list()` (along with its numerous
helper functions) was entirely reliant on all blocks being sequential.
In contrast to the previous implementation, the new version
of `flush_block_list()` simply writes out the difference between the old
block list and the new block list by calculating the correct indirect
block(s) to update based on the relevant block's logical index.

`compute_block_list()` has also been rewritten, since the estimated
amount of meta blocks was incorrectly calculated for files with holes as
a result of the estimated amount of blocks being a function of the file
size. Since it isn't possible to accurately compute the shape of the
block list without traversing it, we no longer try to perform such a
computation, and instead simply search through all of the allocated
indirect blocks.

`compute_block_list_with_meta_blocks()` has also been removed in favor
of the new `compute_meta_blocks()`, since meta blocks are fundamentally
distinct from data blocks due to there being no mapping between any
logical block index and the physical block index.
2024-06-29 19:16:08 +02:00
implicitfield
176999e20c AK/Span: Add a method to check if a Span is filled with a value 2024-06-29 19:16:08 +02:00
implicitfield
06d4672564 Kernel/Ext2FS: Store the block list as a HashMap rather than a Vector
Since we now only store blocks that are actually allocated, it is
entirely valid for the block list to be empty, so this commit lifts the
restrictions on accessing inodes with an empty block list.
2024-06-29 19:16:08 +02:00
implicitfield
ba96a0e4f8 Kernel/Ext2FS: Simplify read/write loops
This removes removes the need to know the last block in advance, and
makes the loops slightly easier to reason about by depending on fewer
conditions.
2024-06-29 19:16:08 +02:00
kleines Filmröllchen
7337ad43b5 crash: Add RISC-V implementations for all architecture-specific tests
Co-authored-by: Sönke Holz <sholz8530@gmail.com>
2024-06-29 17:36:49 +02:00
kleines Filmröllchen
e11f84f86d crash: Make everything more architecture-independent
- Document exactly which crash features are available on which
  architectures. There's several interesting crash tests we will want to
  add for specific architectures, such as misaligned memory accesses.
- Don't compile the divide by zero crash test on RISC-V, as they simply
  don't crash here.
- Rename the test for "x86 User Mode Instruction Prevention" to a more
  generic "try to execute a priviledged instruction"; whatever that
  specifically entails on any given architecture.
- Rename a bunch of internal variables to more generic names.
- Wrap the x86-specific implementation of "execute non executable
  memory" in architecture preprocessor checks.
2024-06-29 17:36:49 +02:00
Nico Weber
311af9ad05 Toolchain: Use check_sha256() in BuildQemu.sh 2024-06-29 13:56:36 +02:00
Nico Weber
c1c00f9104 Meta+Toolchain: Move check_sha256 to shell_include.sh
Pure code move, no behavior change.
2024-06-29 13:56:36 +02:00
Nico Weber
046dbe27c4 Toolchain: Rename check_sha() to check_sha256()
No behavior change, just a more descriptive name.
2024-06-29 13:56:36 +02:00
Andreas Kling
225108c830 LibWeb: Set the correct prototype for SVGAElement instances
(cherry picked from commit 4db05ecf69bee07a060f2e4513e9d53b6110dcc4)
2024-06-28 23:43:59 +02:00
Andreas Kling
bdf3071bd9 Tests/LibWeb: Add test that dumps all global JS constructors
(cherry picked from commit a84261ee7a5e0b76a03225d71ec64424d4865a78)
2024-06-28 23:43:59 +02:00
Luke Warlow
cf5b1b7c10 LibWeb: Implement unsafe HTML parsing methods
Both Element's and ShadowRoot's setHTMLUnsafe, and Document's static
parseHTMLUnsafe methods are implemented.

(cherry picked from commit ce8d3d17c4f2fcca8fac0ff4a832c8f50a011fc7)
2024-06-28 10:56:27 +02:00