Date: July 26, 2024
Version: F21
The following changes have been implemented:
Bluetooth
The following updates have been made for Bluetooth:
- Significant progress was made toward migrating the Bluetooth stack to DFv2 and modernizing its APIs:
- The
bt-hci-intel
, bt-fct-hci
, and bt-hci-passthrough
drivers were migrated to DFv2 and the new HciTransport
protocol. - The
fuchsia.hardware.bluetooth.VirtualController
, fuchsia.hardware.bluetooth.Peer
, and fuchsia.hardware.bluetooth.Emulator
APIs were modernized. - Modernized the
fuchsia.bluetooth.snoop
FIDL API.
- Improved Bluetooth functionality and reliability:
- Implemented the
AudioOffloadController.Stop
method and the bredr.Connection
protocol. - Added support for setting the LE connection role in the fake controller and fixed a crash in
BrEdrDynamicChannel
. - Implemented
IsoStreamServer
.
- Enhanced Bluetooth testing and development:
- All
bt-host
Bazel unit tests were combined into one package to speed up Fuchsia Bazel builds. - Implemented the
HciTransport
API in EmulatorDevice
.
Developer
The following updates have been made for Developer:
ffx
- Improved the usability and reliability of various
ffx
commands:- Enhanced error reporting for
ffx repository add-from-pm
and ffx target show
. - Fixed issues with
ffx component doctor
and ffx starnix adb
. - Improved reconnect logic and error handling.
- Migrated
ffx target wait
to be daemonless. - Added new
ffx
commands and options:- Introduced commands for fxfs profile management (
stop_profile
and delete_profile
). - Added the
--undigested
flag to ffx profile memory
.
- Cleaned up output and logging for several
ffx
commands. - Undigested memory profiling: The
--undigested
flag in ffx profile memory
now displays only undigested memory.
Component Framework
The following updates have been made for Component Framework:
- Stability enhancements:
- Fixed a race condition when opening a service directory.
- Removed dead code related to component events.
Connectivity Drivers
The following updates have been made for Connectivity Drivers:
- Improved the stability of the SDIO driver by addressing a crash that could occur during startup.
Diagnostics
The following updates have been made for Diagnostics:
- Optimized LogTracer to prevent unnecessary log record creation when using the log crate in Rust.
- Prevent blocking on interest listening in exceptions which caused issues during shutdown.
- Power broker includes lease history in Inspect.
- Various improvements to the C++ syslog API.
Display
The following updates have been made for Display:
- Simplified the display driver stack:
- Removed the unused DFv1 driver and enabled the DFv2 driver component by default.
Driver Framework
The following updates have been made for Driver Framework:
- Syslog dependency removal: Removed the syslog dependency from the driver runtime shared library. This also solves link errors at runtime when Bazel drivers request an otherwise absent libsyslog.so in some cases.
FIDL
The following updates have been made for FIDL:
- Improved FIDL performance and tooling:
- Optimized the FIDL Rust client waker and added handle counts to assertion checks in C++.
- Implemented RFC-0232 for multi-API level FIDL bindings:
- Added support in fidlc and updated the GN build to use specific API level versions.
- Removed the deprecated
@available legacy
argument and updated related documentation.
- Improved FIDL API design and documentation:
- Clarified AST for methods and disallowed attributes on the right-hand side of type declarations.
- Enforced ABI checks in FIDL for both platform and external components.
- API level reference standardization: The
HEAD
keyword is now supported in ZX_*_SINCE()
macros, enabling consistent API level referencing and future-proofing API changes.
I18n
The following updates have been made for I18n:
- Cleaned up the build system by removing empty migration groups.
IOT
The following updates have been made for IOT:
- Improved the reliability of the IOT stack by fixing an issue with the discovery proxy workaround and preventing incorrect IPv4 address additions.
Kernel
The following updates have been made for Kernel:
- Improved timer functionality: The
platform_set_oneshot_timer
function now uses raw ticks as input, and support for the Sstc feature allows directly setting the timer compare value in supervisor mode. - Enhanced system call logging and debugging: System calls are now logged by name in LTRACE, and kernel logging for suspend failures has been improved.
- Addressed race conditions and stability issues: Fixed race conditions related to CPU idle state after suspend and thread scheduling during hotplug, and reverted changes to page allocation and dirty page handling for stability.
- Introduced new VMO system calls: Added
zx_vmo_get_stream_size
and zx_vmo_set_stream_size
, which will eventually replace using properties for VMO content size. - Miscellaneous bug fixes: Addressed assertion failures in
std::find
and improved page cache behavior.
Platform Drivers
The following updates have been made for Plaform Drivers:
- Enhanced GPIO utility: The GPIO util tool now supports setting pin functions and includes interrupt functionality.
- Improved USB functionality and stability: USB connection detection now works correctly, and the
fusb302
driver update prevents duplicate GoodCRC
messages, resolving a VIM3 power-cycling issue. - Driver runtime optimization: The driver runtime shared library no longer depends on the syslog library, addressing runtime link errors.
- Amlogic display enhancement: The Amlogic display encoder color turns green when
SetDisplayPower(false)
is called for easier debugging. - Node topology verification: The
sherlock
and astro
device-enumeration-test
have been migrated to verify node topology using monikers from the driver development service. - ElementControl channel provisioning:
Topology.AddElement
now lets clients provide their own ElementControl
channel. While clients can still use the returned channel for now, this behavior will be deprecated.
Rust
The following updates have been made for Rust:
- Toolchain and dependency updates: Removed the
--no-goma
flag from rust-ci
, added the rutabaga_gfx
crate, removed dependency_on_unit_never_type_fallback
instances and the -Awhere_clauses_object_safety
lint. - Improved remote execution and API level handling: Rust's remote execution strategy is now correctly propagated, and Rustdoc no longer handles the
api_level
flag.
Power Management
The following updates have been made for Power Management:
- Power Dependency Management and Terminology: When an element is removed, its dependencies are also removed. “Active” dependencies are renamed to “assertive”, and “passive” to “opportunistic”.
- Fake Suspend Initialization:
fake-suspend
is now blocked until initialized.
SDK
The following updates have been made for SDK:
- Improved IDK atom generation: The Fuchsia Bazel SDK now uses
//sdk:final_fuchsia_sdk
, moving IDK atom generation to the Bazel graph, and an empty *.api_summary.json
file indicates an unsupported FIDL library at a specific API level. - Enhanced functionality and testing:
fbl/fzl
has been removed from the SDK, _walk_json
is more resilient, and tests were added for structured_config
. - Added
bin_name
support: The fuchsia_cc_binary
rule now supports the bin_name
attribute.
Software Delivery
The following updates have been made for Software Delivery:
- Package directory and cache optimization: Package directory is optimized for fxblob, significantly improving blob reading speed, and the package cache no longer needs a storage lifetime workaround.
- Improved logging and error messages: Added a log message for the system image package hash and enhanced error messages related to packages.
Starnix
The following updates have been made for Starnix:
- Improved resource management and attribution: Starnix programs are now reported as child principals for better memory attribution.
- Enhanced signal handling and suspend/resume functionality: Process-directed signals are optimized to interrupt only one task, and a suspend waiter issue is resolved, preventing unresponsiveness after resuming with an active shell.
- Filesystem and data storage improvements: Added routing for the data storage capability in tests, enabling xts tests on real filesystems, and added support for propagating extended attributes from tarballs to filesystems.
- Graphics and input enhancements: Added a Gfxstream-based Rutabaga instance to the GPU device and a device for
touch_standby
state communication with the input pipeline. - Improved policy handling, stats, and address space management: Refined policy index and permission checking, ensured stats refresh after suspend, and fixed an issue with
user_new_limit
reading from the wrong address space. - Miscellaneous bug fixes and updates: Addressed various issues including bpf file descriptor handling, wake lease renaming, ebpf help function stubs, and
FsNode.append_lock
modification.
Testing
The following updates have been made for Testing:
- Enhanced
fx test
user experience: The fx test
rewrite provides debugging enhancements, including improved argument parsing and helpful suggestions. - Improved test robustness and reliability: The SWD end-to-end tests, network tests, and
ip-test-macro
are now more reliable and informative, while a potential flake in WLAN's hw-sim
autoconnect has been addressed.- Changes: fxr/1070592, fxr/1069938, fxr/1069512, fxr/1069213, fxr/1065796, fxr/1056587, fxr/1069133, fxr/1063557, fxr/1063393, fxr/1060972
- Bugs: fxb/347081618, fxb/339515302, fxb/42081267, fxb/42084902, fxb/330168486
- Updated flag name and removed unused file: The
ffx-output-directory
flag is renamed to artifact-output-directory
for clarity, and the unused mock.rs
file is removed from fuchsia-component-test
. - More robust
gvisor_syscall_tests
: These tests are more robust and accurate, with updates for raw IP socket testing, kernel version handling, PMTUD, and a fix for IPPROTO_ICMP
. - GPIO and netstack test updates:
gpio
tests are prepared for DFv2/gtest conversion. The netstack_test
macro is now explicit, requiring explicit type parameters.
Timekeeping
The following updates have been made for Timekeeping:
- Improved TTRF documentation and testing: Implemented persistent testing async commands for Timekeeper behavior modification (not yet enabled), added a README with example code for TTRF, and removed outdated CFv1 references.
- Removed unused dependencies: Removed unused power topology dependency tokens.
Toolchain
The following updates have been made for Toolchain:
- Paravirtualization Support:
PlatformParavirtualizationConfig
now defaults to allowing virtualization if supported. Paravirtualization support, including the vsock service, was added to the ‘generic emulated arm64’ board configuration.
Tools
The following updates have been made for Tools:
- Bluetooth controller enhancements: The fake Bluetooth controller now supports setting the LE connection role.
- Testing and tooling updates: Realm integration tests were added to CTF. Tests for the Bazel SDK's
structured_config
have been added. The bt-fct-hci
tool was migrated to HciTransport
. The testrunner now reconnects on timeout for target connection errors. - Test Phys VMO cleanliness and logging: Test phys VMOs are now cleaned before being returned to ensure a known state. A warning is issued when
records_dropped
exceeds 0 for skipped ContextSwitch
records. - Package information source: The list-packages tool now sources package information from
all_package_manifests.list
. The visual design of the pkgstats package page has been improved.
UI
The following updates have been made for UI:
- Debugging Enhancements: Hit regions and display power status are now dumped to Inspect for easier debugging.
WLAN
The following updates have been made for WLAN:
- Testing enhancements: Support was added for deleting fullmac drivers during startup for testing. A potential flake in hw-sim autoconnect has been addressed. An improvement was made to the Honeydew test harness for detecting abnormal startup.
- Network configuration migration: The format and storage of saved network configurations were updated, including migration from old stash data. A new metric tracks network configuration migration results.
- Roaming improvements: The
RoamManager
's serve function was separated for future conversion to a service loop-based service. Internal roaming library types are updated for clarity, removing unnecessary fields. Roaming disconnect handling has been improved, distinguishing ignorable disconnects from roam attempt failures. - Inspect optimization: The
InspectBoundedSetNode
struct optimizes event metadata handling in Inspect. Logging now includes disconnect information in Inspect.