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.