Commit graph

53586 commits

Author SHA1 Message Date
Daniel Bertalan 075ce53d14 AK: Fix Clang 18 -Wdeprecated-literal-operator warning
The proper syntax for defining user-defined literals does not require a
space between the `operator""` token and the operator name:

> error: identifier 'sv' preceded by whitespace in a literal operator
>        declaration is deprecated
2023-08-19 11:07:12 +02:00
Timothy Flynn 6d331389ad WebDriver: Coerce window handles to strings when activating a tab
This allows the session to reject the request with "no such window",
instead of crashing by assuming the JSON value was already a string.
2023-08-19 05:15:51 +02:00
Timothy Flynn 9608bfb576 LibWebView+Ladybird: Remove duplicate WebContent callback
We have on_navigate_back + on_back_button and on_navigate_forward +
on_forward_button. Remove the *_button variants.
2023-08-19 05:15:35 +02:00
Daniel Bertalan 1adf06c9f0 LibELF: Cache consecutive lookups for the same symbol
This reduces the startup time of LibWeb by 10%, and eliminates 156'000
of the total 481'000 global symbol lookups during a self-test run.
2023-08-19 05:15:08 +02:00
Aliaksandr Kalenik 9a07ac0b6a LibWeb/Fetch: Use JS::HeapFunction for callback in FetchAlgorithms
In FetchAlgorithms, it is common for callbacks to capture realms. This
can indirectly keep objects alive that hold FetchController with these
callbacks. This creates a cyclic dependency. However, when
JS::HeapFunction is used, this is not a problem, as captured by
callbacks values do not create new roots.
2023-08-19 05:03:17 +02:00
Aliaksandr Kalenik 469aea5a5b AK+LibJS: Introduce JS::HeapFunction
This change introduces HeapFunction, which is intended to be used as a
replacement for SafeFunction. The new type behaves like a regular
GC-allocated object, which means it needs to be visited from
visit_edges, and unlike SafeFunction, it does not create new roots for
captured parameters.

Co-Authored-By: Andreas Kling <kling@serenityos.org>
2023-08-19 05:03:17 +02:00
Danik2343 a1ccc4b0cf Ports/zlib: Update to version 1.3 2023-08-18 23:56:41 +02:00
Tim Ledbetter ca9785cf81 Ports/binutils: Build with support for zstd compression 2023-08-18 23:05:49 +02:00
Tim Ledbetter 5b23ec46b8 Ports/backward-cpp: Link against zstd if present
Previously, the build would fail when the `zstd` port was already
installed.
2023-08-18 23:05:49 +02:00
Tim Ledbetter 917de46589 Ports/mgba: Update to version 0.10.2 2023-08-18 22:43:07 +02:00
Tim Ledbetter 1a9c507093 Ports/mgba: Remove unnecessary futimens patch 2023-08-18 22:43:07 +02:00
Tim Ledbetter 0023bc0327 Ports/quake2: Add a launcher icon 2023-08-18 22:14:43 +02:00
Timothy Flynn 60a468d50b sql: Change the short-name flag for the SQLServer path
The short-name 's' is duplicated by another option.
2023-08-18 16:10:17 -04:00
Hendiadyoin1 b342b4dfb8 LibWeb: Fix a rounding issue on CSSPixels multiplication
Co-Authored-By: ronak69 <ronak69@danwin1210.de>
2023-08-18 17:58:44 +02:00
kleines Filmröllchen 096cecb95e Everywhere: Add RISC-V 64 target to the build system
This is a minimal set of changes to allow `serenity.sh build riscv64` to
successfully generate the build environment and start building. This
includes some, but not all, assembly stubs that will be needed later on;
they are currently empty.
2023-08-18 08:37:43 -06:00
Daniel Bertalan c63fe0e1f1 Tests/LibELF: Test loading libraries with dynamic TLS
The setup is a bit peculiar: both the definition and the use site of
these TLS variables have to be in a shared library, otherwise the linker
might relax the global-dynamic access mode to something that doesn't
require a `__tls_get_addr` call.
2023-08-18 16:20:13 +02:00
Daniel Bertalan ad9e674fa0 LibC+LibELF: Support loading shared libraries compiled with dynamic TLS
This is a prerequisite for upstreaming our LLVM patches, as our current
hack forcing `-ftls-model=initial-exec` in the Clang driver is not
acceptable upstream.

Currently, our kernel-managed TLS implementation limits us to only
having a single block of storage for all thread-local variables that's
initialized at load time. This PR merely implements the dynamic TLS
interface (`__tls_get_addr` and TLSDESC) on top of our static TLS
infrastructure. The current model's limitations still stand:
- a single static TLS block is reserved at load time, `dlopen()`-ing
  shared libraries that define thread-local variables might cause us to
  run out of space.
- the initial TLS image is not changeable post-load, so `dlopen()`-ing
  libraries with non-zero-initialized TLS variables is not supported.

The way we repurpose `ti_module` to mean "offset within static TLS
block" instead of "module index" is not ABI-compliant.
2023-08-18 16:20:13 +02:00
Daniel Bertalan 192ee4594c AK: Fix volatile qualifier in Atomic<T*>::ptr()
It's the pointer that should be volatile, not the pointed-to object.
2023-08-18 16:20:13 +02:00
Daniel Bertalan 182bb97479 CMake: Always build LibC with -ftls-model=initial-exec
LibC is always guaranteed to be loaded at program start, so its
thread-local variables live in the static TLS block. This permits us to
use the more optimal initial-exec TLS access model.
2023-08-18 16:20:13 +02:00
Daniel Bertalan 70fcbcf54b LibELF+readelf: Add missing constants for dynamic relocations
These should cover all relocation types we can possibly see in an x86_64
or AArch64 final linked ELF image.
2023-08-18 16:20:13 +02:00
Federico Zotti d250f8fc3e Documentation: Add dependencies for alpine linux
- Add qemu-audio-pa for the audio driver
- Change qemu i386 with x86_64
- Mention fuse2fs for building.
2023-08-18 15:54:39 +02:00
Pankaj Raghav 7138395982 NVMe: Add shadow doorbell support
Shadow doorbell feature was added in the NVMe spec to improve
the performance of virtual devices.

Typically, ringing a doorbell involves writing to an MMIO register in
QEMU, which can be expensive as there will be a trap for the VM.

Shadow doorbell mechanism was added for the VM to communicate with the
OS when it needs to do an MMIO write, thereby avoiding it when it is
not necessary.

There is no performance improvement with this support in Serenity
at the moment because of the block layer constraint of not batching
multiple IOs. Once the command batching support is added to the block
layer, shadow doorbell support can improve performance by avoiding many
MMIO writes.

Default to old MMIO mechanism if shadow doorbell is not supported.
2023-08-18 15:47:51 +02:00
Pankaj Raghav 5b774f3617 NVMe: Add a new struct Doorbell to encapsulate doorbell registers
Introduce a new Struct Doorbell that encapsulates the mmio doorbell
register.

This commit does not introduce any functional changes and it is added
in preparation to adding shadow doorbell support.
2023-08-18 15:47:51 +02:00
Aliaksandr Kalenik 934afcb9d5 LibWeb: Make HTML::SharedImageRequest GC allocated
This allows to partially solve the problem of cyclic dependency between
HTMLImageElement and SharedImageRequest that prevents all image
elements from being deallocated.
2023-08-18 15:42:44 +02:00
Aliaksandr Kalenik bbfedf2e5a LibWeb: Make HTML::ImageRequest GC allocated 2023-08-18 15:42:44 +02:00
Poseydon42 333949894e Userland: Add glsl-compiler utility that prints parsed AST 2023-08-18 15:29:48 +02:00
Poseydon42 d160ff2f8d LibGLSL: Add tests for GLSL parser 2023-08-18 15:29:48 +02:00
Poseydon42 29972876e4 LibGLSL: Add initial GLSL parser implementation 2023-08-18 15:29:48 +02:00
Liav A 0b6424d883 Kernel/Storage: Properly free unused NVMeIO AsyncBlockDeviceRequest
This was the root cause of zombie processes showing up randomly and
disappearing after some disk activity, such as running shell commands -
The NVMeIO AsyncBlockDeviceRequest member simply held a pointer to a
Process object, therefore it could keep it alive a for a long time after
it ceased to actually function at all.
2023-08-18 14:08:54 +02:00
Andi Gallo 65854c3411 LibWeb: Set table wrapper width from the table box
Fixes #20385 and some Wikipedia pages, for example:
https://en.wikipedia.org/wiki/2022%E2%80%9323_UEFA_Champions_League_knockout_phase
2023-08-18 12:52:29 +02:00
Tim Ledbetter f6dd512b65 top: Re-enable non-blocking I/O on stdin
Using blocking I/O would cause updates to stop until a key was pressed.
2023-08-18 11:09:27 +01:00
camc 174d6f1f51 LibGUI: Replace DeprecatedString usage in Widget 2023-08-18 10:43:37 +01:00
camc d978dd4af8 LibGUI: Add deprecated suffix to {set_,}tooltip in Widget 2023-08-18 10:43:37 +01:00
Seal Sealy 9b1e33af69 Ports: Add lxt port 2023-08-18 11:43:19 +02:00
Seal Sealy 1262a7d142 Kernel: Alias MAXNAMLEN to NAME_MAX
MAXNAMLEN is the BSD name for NAME_MAX, as used by some programs.
2023-08-18 11:43:19 +02:00
Karol Kosek f9a006d092 Mail: Mark mail as seen after open 2023-08-18 10:32:49 +01:00
Karol Kosek 619b53eaca Mail: Draw unread messages as bold 2023-08-18 10:32:49 +01:00
Torstennator 411ffb7954 PixelPaint: Add simple dodge and burn function to BrushTool
This patch adds three new modes to the brush-tool where it is now
possible to use a dodge or burn function with the brush and a soft mode
where the overdraw is reduced so that the stroke looks much softer.
The dodge and burn functions are used to brighten or darken the colors
in the affected area of the brush. The user can decide if the
highlights, midtones or shadows should be prioritized by the brush.
2023-08-18 10:27:56 +01:00
Torstennator b9b4ca064f PixelPaint: BrushTool performance optimization
This patch optimizes how the Brush-Tool modifies the pixels. The new
logic generates a "reference brush" with the required size, falloff
and color only once and uses that for the rawing operations. If no
editing mask is used the reference brush is writen via a blit operation
to the content or mask image. This increases the drawing speed and
therefore also allows bigger brush sizes.
2023-08-18 10:27:56 +01:00
Torstennator 31ee20e179 PixelPaint: Allow bigger Brush-Tool sizes
This patch allows a bigger brush tool size of 250 pixels and limits the
cursor bitmap to a reasonable size so that its not much bigger than the
image editor size. If the cursor is bigger as the editor it is rended
with a red edge to indicate that the actual cursor is bigger than
displayed. This change mitigates the OOM conditions when the cursor
gets unusual big.
2023-08-18 10:27:56 +01:00
Maxim Solovyov 55edfe5c3c Documentation: Remove qemu-system-x86 from explicit dependencies on Arch
The qemu-system-x86 package is a dependency of the qemu-desktop package
both on Arch and Manjaro Linux so there is no need to install it
explicitly.
2023-08-18 10:20:25 +02:00
kleines Filmröllchen 834a3227f8 Base: Update Audio subsystem documentation 2023-08-18 08:09:19 +01:00
Dan Klishch 39dee6ad67 AK: Add missing include in RecursionDecision.h 2023-08-18 08:58:51 +03:30
Dan Klishch 1079f178cf LibXML: Set parents for text and comment nodes 2023-08-18 08:58:51 +03:30
Dan Klishch 6368e6ca12 LibXML: Record source location for nodes 2023-08-18 08:58:51 +03:30
Dan Klishch 3556c27d2d AK: Add StringView::count(char) 2023-08-18 08:58:51 +03:30
Dan Klishch b40ab55830 LibXML: Add helpers for extracting node contents if its type is known 2023-08-18 08:58:51 +03:30
MacDue 3a42ef4118 Tests/LibWeb: Add ref test for CSS gradients
This has to cheat and use a screenshot but thanks to the "Take Full
Screenshot" feature of Ladybird, it is very easy to update this test.

The steps are documented in the test.
2023-08-18 05:26:04 +02:00
MacDue 6c9f1c396a LibWeb: Don't use CSSPixels when resolving radial gradient color stops
CSSPixels are not precise enough to resolve gradient positions, which
leads to visual artifacts.
2023-08-18 05:26:04 +02:00
MacDue fa7a2269cd LibWeb: Remove ±1 translations from RadialGradientStyleValue
These were added when Gfx::Rect was made endpoint exclusive, however,
for this code an offset of ±1 makes no visible difference (but makes the
code look a little confusing).
2023-08-18 05:26:04 +02:00