Date: April 8, 2025
Version: F26
The following changes have been implemented:
A11y
The following updates have been made for A11y:
- Added a new configuration that allows products to remove A11y View from the scene graph, this provides more flexibility while keeping the default enabled for platform code.
Audio
The following updates have been made for Audio:
- Enhanced audio stream management with new usage enums and flexible protocols: Introduced
AudioRenderUsage2
and AudioCaptureUsage2
enums, along with the Usage2
union, to improve audio stream categorization and management. This includes a new ACCESSIBILITY
stream usage for screen readers and internal migration of AudioCore to use these new types. Related protocols and methods were also converted to flexible for increased adaptability. - Added real-time audio device notifications: In the Rust shared support library, added
AudioDeviceRegistry
device event subscriptions, enabling Rust clients to be notified of audio device additions and removals. - Fixed various bug and made several improvements: Resolved issues related to VMO size calculation in the
aml-g12 driver
, improved stability of Inspect ordering in audio tests, updated build target visibility for correctness, and addressed stricter LLVM checks on temporary array references. - Removed unused audio driver: Deleted the unused
aml-dsp
driver and library to simplify the codebase and avoid future refactoring conflicts.
Bluetooth
The following updates have been made for Bluetooth:
- Updated the
ffx bluetooth peer
subtool to include list
, list --details
, and show
commands, replacing functionality previously in bt-cli
. - Improved the splitting of large snoop backlogs into smaller chunks to respect FIDL message size limits.
- Updated the
Uuid
type to derive Eq
and Hash
, making set operations and comparisons easier. - Updated the
fuchsia-bluetooth
target to be available on host, enabling ffx
access to required types. - Fixed a build error due to
vec!
misuse. - Updated
bt-transport-uart
to only queue one read task, preventing issues with multiple HciTransport connection requests. - Updated solicitation UUID to be available as part of the scan filter list.
- Updated the UART flag for BCM4381 to be configured correctly, enabling UART traffic.
- Updated the firmware loading in
bt-hci-broadcom
to avoid potential stack overflows.
Build
The following updates have been made for Build:
- Added support for
bazel_test_package_group
and per-API level .ifs
files for shared libraries were introduced. These changes enhance modularity in testing and enable iterative interface development. - Improved the build system's robustness and made progress on the preparation for Bazel integration. Refactoring workspace logic and generating
remote_services.bazelrc
during fx gen
contribute to these improvements. - Added profile support to Rust build configurations. A
profile-rust
variant and including profile paths in rustc inputs are now available, enhancing performance analysis capabilities. - Fixed serialization issues: This fix improves the stability and usability of the build system.
- Streamlined the SDK build processes. Requiring SDK areas for all categories, relocating toolchain definitions, adding metrics-logger configuration to assembly, and removing
emu_dimensions
improve the SDK build experience. - Improved linkmap feature: Fixed issues in generate_linkmap, including flag and naming corrections.
Cobalt
The following updates have been made for Cobalt:
- Switched Cobalt to Rust log: Cobalt's fake uses Rust log instead of tracing for logging.
- Improved config validator testing: Added tests for metrics with reports in the config validator.
- Introduced prototype STRUCT metric registry, validation, and observation, including example usage for defining struct metrics with fields, types, and reports for data aggregation.
- Improved testing for integer histogram reports by switching to parameterized tests.
- Implemented floating point step multiplier and validated
step_multiplier
to be greater than 1. - Updated Tink, Abseil-cpp, Protobuf, and Protobuf-gn submodules, and addressed deprecated Tink API usage.
- Added tests for metrics with reports in config validator to improve test coverage.
Component Framework
The following updates have been made for Component Framework:
- Updated Component Manager to be able to find the trace capability from its exposed-root directory.
- Improved clarity of error messages for duplicate offers.
- Fixed unreachable pattern lints in component debug and clippy lints in the Component Framework.
- Corrected the handling of
on_terminate=reboot
for clean stops, and improved capture by repeating pending shutdown logs. - Updated Component Manager to use
LogSink
from the diagnostics dictionary, and incoming_integration_test
has been improved with common Echo
server code.
Diagnostics
The following updates have been made for Diagnostics:
- Improved
ffx inspect
tooling with tree names in generated selectors, simpler accessor selection, accessor listing, introduced --component
to replace --manifest
.- Changes: fxr/1159172, fxr/1157153, fxr/1164092, fxr/1165032, fxr/1170713, fxr/1169489, fxr/1169488
- Bugs: b/356723282, b/381127117, b/381127117, b/38128546, b/381285460
- Updated Archivist pipeline protocols to be available in the dictionary
diagnostics-accessors
to simplify their routing and configurability from assembly. Scrutiny supports dynamic dicts. - Deprecated
--select
and --force-select
from ffx log
in favor of --set-severity
and --force-set-severity
. ffx log
now supports fuzzy matching components too, and fixed adynamic selector. - Updated Rust logging to use
log
with support for key value pairs - Updated Triage to support
CountChildren
. - Introduced an instrumentation data processing component for publishing profiles through
fuchsia_debugdata::Publisher
. - Added Inspect allocation analysis tool for analyzing allocation sizes from JSON input.
- Added
buffer_size_mb
argument for ffx
profiler to control per-CPU buffer sizes. - Refactored diagnostics routing to prefer specific routes and use th diagnostics dictionary. This includes removing unnecessary routes for
LogSink
and InspectSink
, and routing Inspect from the dictionary. - Improved self-profile reports and Inspect efficiency. Self-profile reports now summarize non-leaf nodes in custom rollups. Inspect now automatically de-duplicates string references in C++.
- Made LogSink an open protocol for easier API evolution.
- Updated feedback component to handle multiple pre-reboot reasons. Support for
kNetstackMigration
has been added, along with a “planned” boolean in LastReboot
info. - Fixed serialization issue with diagnostics assembly overrides.
- Added
inspect-runner
test to verify drivers expose Inspect. - Fixed InspectSink routing issues.
Display
The following 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:
- Added
RestartWithDictionary
FIDL method to driver manager to restart nodes with custom capabilities. - Added support for bus topology in driver manager, allowing clients to query bus segments.
- Expanded the SDK with
fake-bti
and fake-object
components for enhanced driver development. - Enabled
on_terminate: reboot
for driver_index
for clean component exits. - Improved driver component manifest validation during build time.
FIDL
The following updates have been made for FIDL:
- Prototyped new Rust FIDL bindings, fixed request parameter for event methods, and removed
kind
in fidlc, replacing it with kind_v2
. - Added
\@no_resource
annotation to fidlc and defined a serializable name for FIDL types.
Firmware
The following updates have been made for Firmware:
- Added “slot-unbootable-reason” fastboot variable for NUC and VIM3, which indicates the reason why a slot was marked unbootable
GPU
The following updates have been made for GPU:
- Improved logging and error handling in multiple areas. Added more logging to
HangRecovery
for clearer function behavior, set default test status to NOT_FOUND
in MagmaTestDriverBase to catch missing tests, and improved Magma error logs to display status strings instead of numbers. - Streamlined Magma components and revised command buffer submission. Removed the unused
CachePolicy
parameter and the magma::ZirconPlatformDevice
class. Added context APIs and semaphore import/release functions to msd_c.h. Revised command buffer submission to support a variable number of command buffers and fix zero-resource handling. - Improved Vulkan and Swapchain implementations. Migrated flatland_view to new C++ bindings, added shards for Vulkan swapchain layers, and modified vkcube to use common swapchain shards.
- Fixed crashes and flakes. Disabled
ForceQuit
and AcquireZeroTimeout
tests in non-hermetic and emulator environments for image-pipe-swapchain-tests to resolve crashes. Re-added mistakenly removed unit tests for the DFv2 driver. Increased the shutdown timeout for msd-arm-mali to 10 seconds to mitigate flakes. Reduced zx_bit_pin
chunk size to 32Mb to avoid errors when pinning memory. - Added and updated Magma platform tests. Added tests to the Mali test driver, including a large mappings test, and updated profiler and MMIO tests.
IOT, Matter, and Thread
The following updates have been made for IOT, Matter, and Thread:
- Updated logging for IpAddr, Lowpan, and Weave: Lowpan and Weave now utilize Rust log.
- Resolved clippy lint violations: Lint errors from a build refactor are now fixed.
- Fixed event time estimator for Matter.
Kernel
The following updates have been made for Kernel:
- Introduced a new framework for measuring memory stalls, providing insights into system performance bottlenecks. This includes the addition of
ZX_INFO_MEMORY_STALL
to zx_object_get_info
and a dedicated stall resource for managing stall measurement syscalls.
Platform Drivers
The following updates have been made for Platform Drivers:
- Updated several drivers, including sdmmc, sdhci, aml-uart, aml-securemem, vim3-clk, and pdev, to use SDK libraries and FIDL for metadata and communication, replacing legacy methods.
- Changes: fxr/1181052, fxr/1180633, fxr/1178496, fxr/1177934, fxr/1175752, fxr/1172913, fxr/1169194, fxr/1170012, fxr/1161752, fxr/1163915, fxr/1163932, fxr/1178495
- Bugs: fxb/42062127, fxb/374152849, fxb/368050069
- Refactored the thermal driver lookup table and the sensors driver. The sensors driver now uses a new service watcher and logging instead of tracing.
- Migrated the dwc3 and vim3 drivers to Bazel. Vim3 page scanner arguments are now part of the platform config.
- Improved the sensor manager and starnix nanohub driver with code refactoring and use of a descriptor struct, respectively.
- Updated the
aml-uart
driver to use a single dispatcher and the WakeLease
class, and the DFv1 driver for aml-uart
has been removed.
Power Management
The following updates have been made for Power Management:
- Added Inspect integration to drivers, including the element runner and attempt time logging for power drivers, and a new test to verify driver inspect exposure.
- Added support in USB endpoints for optional wake leases and leases tied to completion, improving power management.
- Implemented a fake power sensor for testing, simulating ODPM behavior on devices without integrated ODPMs.
- Implemented the new
Admin.PerformReboot
API for initiating device reboots, while maintaining support for the deprecated Admin.Reboot
. - Improved power management debugging and metrics with inspect integration for element runners and new multi-step suspend/resume latency metrics.
- Enhanced power management by disabling lease taking optimization.
- Simplified the SDMMC driver by using higher-level power methods.
Rust
The following updates have been made for Rust:
- Updated the libc crate to 0.2.169.
- Updated the either and bitflags crates to 1.13.0 and 2.7.0 respectively.
- Updated tokio to LTS version 1.38.1.
- Allowlisted several clients for the tracing crate. Usage of the tracing library was removed from diagnostics/log, resulting in a size reduction. Logging documentation now refers to the log crate, and benchmarks were adjusted.
Starnix
The following updates have been made for Starnix:
- Enhanced security in sestarnix with several new hooks and improved permission checks. These include hooks for
file_ioctl()
, inode_getattr()
, inode_permission()
, inode_listxattr()
, sb_statfs
, sb_kern_mount
, sb_mount
, and sb_umount
, as well as support for configurable todo-deny
entries, validation of security levels against policy, labeling of anon_inodes
via filename transitions, and use of cached security classes in file_permission()
. Additionally, file_permission()
now skips FsNode
permission checks for performance, with profiling added for diagnostics, readlink permission checks are enforced, and handling of not-yet-labeled filesystems has been revised.- Changes: fxr/1188312, fxr/1184938, fxr/1184473, fxr/1185372, fxr/1170312, fxr/1142214, fxr/1160814, fxr/1161233, fxr/1165593, fxr/1168372, fxr/1172752, fxr/1157812, fxr/1185312, fxr/1186419, fxr/1169482, fxr/1164812, fxr/1170313, fxr/1170712, fxr/1133052, fxr/1165232, fxr/1163892, fxr/1165954, fxr/1157812, fxr/1185928
- Added the ability for modules to export directories into
/proc/device-tree
, and exposed a sysfs display panel endpoint to support port display configuration initialization. - Extended cgroup support and addressed test flakiness. Fixes for cgroup test flakiness and support for freezing tasks in cgroups.
Storage
The following updates have been made for Storage:
- Added support for Get/SetFlags2 to the Virtual Filesystem (VFS), and SetFlags was changed to use io2 flags. Trait methods were renamed from
update_flags
to set_flags
, and fuchsia.io/Flags
replaced OpenFlags
. - Enhanced UFS Driver: Added the UFS service to the UFS driver, introduced write protect and background operations support.
- Updated VFS: Implemented Get/SetFlags2 support in VFS (Rust) and updated SetFlags to use io2 flags.
- Improved blob and chunk handling: Fxblob now records corrupted delivery blob data for analysis and fixed
ChunkedArchiveError
root cause mapping. - Enhanced Fxfs and fixed bugs: Enabled fallocate, improved overwrite extent handling on truncate, and addressed reservation alignment issues and calculation errors.
- Updated FVM and Fshost: Resolved FVM volume removal race, improved FVM matching in fshost, and fixed CML configurations for storage-host.
- Improved storage and benchmarking: Storage benchmarks now run in a dedicated realm with storage-host support.
Testing
The following updates have been made for Testing:
- Enhanced Utest Core: Several improvements to core unit tests, including timeout fixes, memory mapping adjustments, and enhanced crash handling.
- Enhanced test infrastructure and tooling: Various enhancements and bug fixes for test infrastructure and tooling.
Timekeeping
The following updates have been made for Timekeeping:
- Implemented the new
fuchsia.time.alarms
FIDL API for managing wake alarms, utilizing the hrtimer device as a backend. This includes requesting hrtimer access, configuring conditional serving of the API for Starnix, and integrating it with the vim3 board. The wake alarm manager also received integration fixes, including GetProperties()
and temporary CancelSync()
FIDL APIs, and the alarms
crate was factored out for better testing. Added tracing to the wake alarms service and resolved an issue with long sleep durations by implementing a resolution fix in the hrtimer driver. Also added details about max_ticks
to hrtimer FIDL and corrected hrtimer configuration for broader platform support.- Changes: fxr/1156140, fxr/1161080, fxr/1171425, fxr/1171424, fxr/1180447, fxr/1185772, fxr/1186372, fxr/1175312
- Bugs: fxb/377774610, fxb/383062441, fxb/388871088, fxb/377774355
- Refactored timekeeper's persistent state to accommodate future data expansion.
Tools
The following updates have been made for Tools:
ffx
The following updates have been made for ffx
:
- Enhanced the emulator with UEFI support for full disk GPT image booting and OTA testing. The
ffx emu start --uefi
flag enables this feature. - Added support in
ffx log
for fuzzy searching component monikers and URLs. Use the --component
flag (replaces the deprecated --moniker
flag). - Improved emulator MAC address derivation for UEFI OTA testing consistency. Emulators with names like
fuchsia-5254-X-Y
derive their MAC address directly from the name. - Increased
ffx target wait
timeout. ffx target wait
now has a 6-second timeout for better handling of slow devices. - Improved error handling and environment variable processing in
ffx
tools. More informative error messages for ffx product
downloads. Stricter environment variable handling in ffx config
. - Fixed
check-goldens
and ffx emu
bugs. check-goldens
no longer emits a GN path warning. ffx emu
now assigns host ports correctly when using QEMU v9+.
fx
The following updates have been made for fx
:
- Fixed
fx flash-kola
product bundle selection. fx flash-kola
correctly selects product bundles in multi-product builds.
UI
The following updates have been made for UI:
- Implemented performance optimizations in Scenic. These include caching koids, replacing the mutex queue, avoiding copies in computations, implementing new DisplayPower protocols, and optimizing data handling.
- Made optimizations and updates for Escher and Vulkan. This includes preallocating structs in Escher, updating Vkcube to use swapchain shards, and adding shards for Vulkan swapchain layers.
- Added linear blending and multi-image support to the CPU Renderer.
- Improved UI developer debug tools. This includes debugging by passing ui_visual_debugging_level to the window manager and enhanced window management with new Cycle, List, and SetOrder functions.
Video
The following updates have been made for Video:
- Relocated MPSC queue: The MPSC queue container has been moved to a common directory to be utilized in multiple Scenic components.
- Updated media logging: Logging within media components now utilizes Rust log instead of tracing for improved logging capabilities.
WLAN
The following updates have been made for WLAN:
- Improved scan result information by adding detailed incompatibility details to Inspect and providing incompatibility information directly in scan results.
- Improved robustness and error handling across WLAN components. Added lints to prevent panics, fixed potential unwrap errors in Fullmac and during client interface recovery, and improved error tracking and reporting in PhyManager. WLAN device monitor and configuration now panic on errors to trigger reboot behavior.
- Improved watcher service and DeviceMonitor through architectural simplification and enhanced functionality. Simplified watcher service architecture, enforced client limits for DeviceWatchers, adopted idiomatic style for DeviceMonitor server, consolidating new interface handling, and refactored CreateIface request/response formats.
- Roaming foundational work. Roam monitors can now specify active or passive scans, and updating roam syslogs and SME proxy for roaming
- Implemented miscellaneous enhancements across the WLAN stack. These include switching to Rust log, removing unnecessary WPA3 support checks, adding scan backoff between separate connection attempts, using LastSample fill policy for telemetry counters, fixing ffx wlan argument ingestion, adding SYN4381 chip support, and new APIs for country code settings.
- Added support in Devicetree for serial device composite nodes and iommu name properties, which improves device management.
- Added simulated tests for band capability verification for the BRCMFMAC driver.
- Updated the BRCMFMAC driver to conditionally set the RSNE IE, fixing a bug in association indication.