Fuchsia F19 release notes

Date: April 26, 2024

Version: F19

The following changes have been implemented:

Audio

The following updates have been made for Audio:

  • Improved audio modularity: The soundplayer component now resides in its own AIB, removed unused storage capabilities from audio_core, and fixed missing audio_core vectors causing ValueErrors.

  • Refactored and improved ffxdaemon for audio: This includes modularizing renderer and capturer logic, refactoring the RingBuffer for multiple protocol support, renaming and clarifying internal components related to WAV sockets, improving dependency management, and refactoring the AudioDaemon struct.

Bluetooth

Build

The following updates have been made for Build:

  • Improved the hermeticity of Bazel build: Updated BoringSSL build to generate Bazel rules during roll and improved Bazel SDK and Clang workspace initialization.

Cobalt

The following updates have been made for Cobalt:

  • Removed Profile provider routes. This change is due to Cobalt's migration to the role manager.

  • Update to include metrics as an SDK area in Cobalt's FIDL interface.

Component Framework

The following updates have been made for Component Framework:

  • Enhanced component lifecycle management:

    • Introduced the fuchsia.component.Escrow API to manage component state during shutdown and integrated it into component start/stop actions.
  • Improved capability handling:

  • Enhanced CML and routing:

    • Improved the handling of dictionaries for cycle detection, shutdown order, and routing robustness.
  • Improved tooling:

    • Enabled schema support for ffx component show.
  • Removed the Config Value File (CVF) requirement:

Developer

The following updates have been made for Developer:

  • Expanded support for roll-compiler: Added aarch64 mac support.

  • Improved ProfileResource routing: This resource is now routed to the serial console.

Diagnostics

The following key updates have been made for Diagnostics:

  • Enhanced Archivist: Archivist’s own minimum log severity can now be dynamically adjusted, allowing for more flexible control over its log output. The JSON log encoding's "verbosity" field has been renamed to "raw_severity" for consistency. Archivist per component batch timeout is now configurable. Minor performance improvements in Archivist.

  • Improved debugging through zxdb: Enhanced debugger functionality with recursive component filters which allows attaching to all children of a filtered component, and a new notification signals filter application. Debugger command analytics are now collected.

  • Improved tracing: The trace importer is more robust against corrupted traces.

  • Improved the Rust Inspect API: Inspect Rust API was enhanced to support atomic updates in properties.

  • Improved ffx inspect: ffx inspect and iquery no longer support reading files directly.

  • Improved ffx log: Added a new asynchronous transactional log reader and parser to enhance the performance of ffx log. Added buffering to symbolizer writes to prevent deadlocks. Log backtraces prettification is now supported in ffx log and can be disabled for improved performance. ffx log output is also improved by deduplicating monikers in tags and gracefully handling symbolization errors.

Display

The following key updates have been made for Display:

  • The display driver stack is being migrated to modern Fuchsia Platform infrastructure, such as DFv2 and FIDL.

Driver Framework

The following updates have been made for Driver Framework:

  • Enhanced driver context and startup: Updated DriverStartArgs to include node_properties.

  • Improved the interaction of devfs and controller: DevfsAddArgs now allows overriding the controller interface for compat shims, and devnodes now use separate callbacks for fuchsia.device/Controller and device channels which improves clarity and prevents accidental multiplexing.

  • Improved stability and resource management: Node deallocation now cancels rebind requests. Fixed colocation flags for aml-sdmmc and vim3-usb-phy.

FIDL

The following updates have been made for FIDL:

  • Enhanced FIDL tooling: Added a new tool that assesses runtime compatibility across API levels and then generates detailed reports to aid in maintaining stability across Fuchsia releases.

  • Improved FIDL API versioning: Added deprecated, platform, and legacy fields to the FIDL JSON IR and a fidlc --platform flag to enhance API versioning and deprecation management. Removed the @transitional annotation in favor of explicit versioning.

  • Improved error handling: All FIDL errors are now broadcast and they are all terminal.

GPU

The following updates have been made for GPU:

  • Enhanced power management: Added support for powering down shader cores on suspend and then powering them up on resume. Also, allowed atoms to be preempted to reduce the suspended latency. Added a FIDL protocol for GPU power management.

i18n

The following updates have been made for I18n:

  • Fixed change detector tests for stability of date localization: Addressed an issue where date formatting changes in the ICU library caused test failures. The affected test has been updated to be less brittle.

Kernel

The following updates have been made for Kernel:

  • Power and task scheduling

    • Added provisional syscall for registering CPU energy models in service of Runtime Processor Power Management (RPPM).
    • Added provisional support for wake vectors, allowing the system to be woken from suspend by a device interrupt.
    • Began building out libsched, a library that encapsulates the scheduler run queue.
    • Fixed a bookkeeping error in PI propagation.
  • Virtual memory

  • Performance profiling

    • Added experimental support for the new sampling profiler using zx*sampler* syscalls.
  • IPC and Clocks

    • Fixed a bug related to socket datagram read with a bad buffer.
    • Added a new clock object signal, ZX_CLOCK_UPDATED to notify observers when the underlying clock parameters have changed. This signal can be used to implement more efficient and accurate "get time" calls for Linux programs running under Starnix.
  • Security

    • Added support for per-cpu arm64 exception vectors to facilitate more precise speculative execution mitigations.
  • Other notable improvements

    • Restructured user-copy and fault handling routines to enable limited faulting while holding spinlocks. This enabled us to replace the FutexState mutex with a spinlock, simplify FutexContext, and prepare for removal of the global thread lock.
    • Refactored arm64 low level cache maintenance routines.

Platform Drivers

The following updates have been made for Platform Drivers:

  • Enhanced power management: Added a new support library that simplifies driver integration with the power framework. A "Power Mode" power element, dependent on the SAG, manages power-on leases during Starnix kernel initialization. Additionally, the Power Broker FIDL APIs have been improved for concurrency and reliability.

  • Improved driver stability: Fixed an issue with the SDMMC driver's PrepareStop crash. UMS now supports the SCSI UNMAP command. Updated the Goldfish pipe driver to gracefully handle ZX_ERR_PEER_CLOSED. Resolved issues that the SPI core driver had with scheduler roles and asynchronous calls.

Power Management

The following updates have been made for Power Management:

  • Enhanced power management: Added a new support library that simplifies driver integration with the power framework. A "Power Mode" power element, dependent on the SAG, manages power-on leases during Starnix kernel initialization. Additionally, the Power Broker FIDL APIs have been improved for concurrency and reliability.

Software Delivery

The following updates have been made for Software Delivery:

  • Refactored the system updater for writing of system images: Improved readability and maintainability when writing system images with correct fuchsia.mem.Buffer size handling.

  • Improved package management: Added support for the ffx repository publish to publish from product bundles and mutable API levels (like api-level=HEAD). Updated package types to match match paver naming conventions. Also, removed the redundant --abi-revision flag from package-tool.

  • Enhanced pkg-cache: Resolved an issue with dynamic index garbage collection, updated the Get server end required to improve security, and introduced WritingIndex to protect packages during caching.

  • Improved the paver: Fixed the PartitionRead API for ZBI content truncation.

Starnix

The following updates have been made for Starnix:

Security and Stability:

Functionality and syscalls:

  • Enhanced file system and I/O operations: Implemented the openat2() syscall and io_submit in the VFS, which includes support for IOCB_FLAG_RESFD, and improves file system access and asynchronous I/O.

  • Improved signal handling: Implemented the rt_sigpending() function and the SA_RESETHAND and SA_NODEFER signal flags, which enhances signal management flexibility. Also, fixed a flake in the rt_sigtimedwait01 test.

  • Implemented getcpu() function: This function provides a way to retrieve CPU information.

Devices and drivers:

  • Improved support for touchscreens: Implemented write() for Uinput Touch devices and ioctl() for UI_DEV_CREATE, which enables processing of EV_ABS events.

  • Added skeleton GPU device: Laid the groundwork for future virtio-gpu and gfxstream implementation. Added a gfxstream feature flag.

ADB and debugging:

  • Improved functionality of ADB: Improved error handling and support for large file transfers. Enhanced the connection of ADB FunctionFS to fuchsia.hardware.usb.

  • Added a vmo subcommand to starnix tool: This tool allows querying processes with open files backed by a specific VMO koid.

Other improvements:

  • Improved the handling of time and reboot: Improved reboot syscall handling and the handling of UTC time signals.

  • Defined SyncFenceRegistry: Replaced the VMO-backed implementation for Linux synchronization fences.

Testing

The following updates have been made for Testing:

Thread

The following updates have been made for Thread:

  • Add DHCPv6 PD feature flag support

  • Add Upstream DNS feature flag API:

Timekeeping

The following updates have been made for Timekeeping:

  • Integrated with power management: Timekeeper now participates in the power management subsystem, responding to power management signals and registering with the power broker. Also, improved error logging when power management is unavailable.
  • Improved fake-clock library: The fake-clock library now prevents concurrent use of the monotonic and UTC clocks.
  • Cleaned up dependencies and build: Removed the dependency between realm-proxy and timekeeper_integration, along with unnecessary expose stanzas and a deps line in a group block. This improves build hygiene and reduces unnecessary dependencies.
  • Added regression tests for initial update pause: Added regression tests to address issues with the initial update pause.

Toolchain

The following updates have been made for Toolchain:

Tools

The following updates have been made for Tools:

ffx

  • Improved target management: Refactored local target discovery for better substring matching and improved default handling. Added schema support to target add and target remove commands.

  • Enhanced usability and performance: Improved error handling for user errors and build performance. Allows immediate foreground repository server restarts by ignoring time-wait sockets.

  • Expanded functionality: Added a hidden Bluetooth subtool with Pandora functionality, ffx playground for interactive FIDL interaction, product bundle support for serving a foreground repository (--product-bundle), and improved the ffx driver workflow.

  • Removed plugins: Removed the inspect, setui, assembly, wlan, and fuzz plugins.

  • Improved to SSH key management: Moved sshconfig file generation to tools/devshell and added the ffx config check-ssh-keys subcommand.

fx

  • Improved build and package management: fx build now supports GN labels. fx show-package now displays subpackages. Improved dependency categorization in fx sdk-deps.

  • Enhanced server and testing: fx serve now handles incompatible server configurations. fx size-check now supports Bazel builds. Added product bundle workflows.

  • Unified SSH key management: fx now manages SSH key through ffx.

Other Tools

UI

The following updates have been made for UI:

  • Enhanced UI testing and debugging: Starnix touch tests now use GraphicalPresenter, aligning with runtime changes. Added WatchViewPresentations for better UI test synchronization, improved UI test debugging with added logging to the puppet_factory, enabled input CTF tests, added per-app present tracing, moved UI conformance tests, and added multi-touch event order tests.

  • Improved screenshot testing and display power management: Integration tests for PNG encoded screenshots have been added, and the fuchsia.ui.display.internal.DisplayPower protocol is now routed to session.

  • Implemented SyncFenceRegistry in starnix_kernel: Defined and implemented the SyncFenceRegistry.

Video

The following updates have been made for Video:

  • Migrated CodecImpl to sysmem2 with backwards compatibility: This change allows for a gradual migration while supporting existing sysmem(1) clients.

WLAN

The following updates have been made for WLAN:

  • Improved WLAN logging: Enhanced debug logging of scan results and incompatible BSSs. Unified logging by using shared channel implementation for Inspect. Corrected the log severity for ltrace_fn.

  • Resolved race conditions and panics in hw-sim simulator: Fixed a race condition preventing data reception. Resolved a race condition with ethernet status. Addressed a panic in hw-sim tests.

  • Minor WLAN policy tech debt cleanups: Improved WLAN policy by grouping RSSI and SNR. Changed numerical type for dB, dBm, and dBm/s to f64. Allowed selecting the WLAN Policy layer in assembly. Renamed wlan_base bundle to wlan_policy. Improved the WLAN configuration manager by directly recording scan results for better hidden network detection.

  • Refactored wlansoftmac: Migrated from Banjo to FIDL, removed dead code, and improved testing.