Date: April 26, 2024
Version: F19
The following changes have been implemented:
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.
Added a new bluetooth tool and Pandora gRPC server framework: Added the ffx bluetooth subtool and implemented the Pandora gRPC server framework.
Enhanced Bluetooth low Energy capabilities: Added a credit-based flow control TxEngine to improve LE flow control, implemented ExtendedLowEnergyConnector and ExtendedLowEnergyScanner which supports extended advertising and connection features, and added advertising packet filtering constants to the vendor protocol. Also, fixed a LowEnergyScanner crash related to scan response timeouts and an issue in LowEnergyMultipleAdvertisingTest.
Improved the support of isochronous data stream support: Added IsochronousStream::Read and IsochronousStream::ReadSupportedDelayRange APIs, implemented support for ISO data streams in Banjo and FIDL controllers, and added ISO Channel FIDL Protocol support in drivers. Also, fixed an emulator crash and a controller shutdown issue related to missing or failing ISO channel support.
Enhanced HFP and SCO: Implemented the HFP core shard and added procedures for audio connection and call initiation, and implemented the SCO FIDL API for FidlController. Also, translated +CIEVs in HFP to typed values.
Expanded support and connection handling for bluetooth LE: Improved Bluetooth LE isochronous stream support by adding Read, SetupDataPath, and ReadSupportedDelayRange methods. Also, added Connection::AcceptCis() for accepting Connectionless Isochronous Streams.
Improved OBEX and RFCOMM: Added support for advertising and searching for MAP services. Fixed protocol list construction, PSM parsing, incorrect PSM values, and issues with duplicate headers and missing ConnectionIds for OBEX services. Also, added support for assigning ConnectionId in OBEX. Improved RFCOMM logging.
Migrate bt-host from driver to component: includes migrating serialimpl protocol to FIDL and LoopbackDevice driver to FIDL. Also, fixed driver name issues during DFv2 migration and a storage offer issue in bt-init.
The following updates have been made for Build:
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.
The following updates have been made for Component Framework:
Enhanced component lifecycle management:
fuchsia.component.Escrow API to manage component state during shutdown and integrated it into component start/stop actions.Improved capability handling:
delivery: "on_readable" for protocol capabilities.Enhanced CML and routing:
Improved tooling:
ffx component show.Removed the Config Value File (CVF) requirement:
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.
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.
The following key updates have been made for Display:
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.
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.
The following updates have been made for GPU:
The following updates have been made for I18n:
The following updates have been made for Kernel:
Power and task scheduling
Virtual memory
Performance profiling
IPC and Clocks
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
Other notable improvements
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.
The following updates have been made for Power Management:
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.
The following updates have been made for Starnix:
Security and Stability:
Implemented eBPF verifier and expanded the support of the eBPF program: Enhances the security and stability of eBPF programs, which includes handling array pointers, field mapping, and improves program loading. Also, fixed an integer overflow issue in eBPF maps.
Improved the context handling for SELinux security: Fixed several issues related to security contexts, including trimming trailing null characters and restoring Copy support for Security IDs. Improved the hooks test policy and reference policy initial SID declarations.
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.
The following updates have been made for Testing:
Improved fx test: Added support for environment variables (-e, --env), slow test filtering (--slow), log printing (--print-logs), boot test detection, updated build format, and numerous bug fixes related to test filtering, argument parsing, and temporary file handling.
Improved gtest: Handles extra newlines in stdout and adds support for ASSERT_DEATH.
The following updates have been made for Thread:
Add DHCPv6 PD feature flag support
Add Upstream DNS feature flag API:
The following updates have been made for Timekeeping:
fake-clock library: The fake-clock library now prevents concurrent use of the monotonic and UTC clocks.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.The following updates have been made for Toolchain:
llvm-profdata compatibility with v10 profile format.The following updates have been made for Tools:
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.
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.
Improved testing and tooling: mock-paver now simulates normal behavior. Added run_lacewing_test wrapper, host scripts for test components, aarch64 mac support to roll-compiler, and rust_extract tool. Deleted the unused bt-hci-tool.
Enhanced debugging with faster zxdb startup using recursive filters and improved cursor visibility in fx test.
Improved for fxfs profile management: Added fxfs delete_profile subcommand and a debug endpoint for deleting profiles.
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.
The following updates have been made for Video:
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.