536 {
537 if (update.empty()) {
538 return;
539 }
540 FML_DCHECK(nodes_.find(kRootNodeId) != nodes_.end() ||
541 update.find(kRootNodeId) != update.end())
542 << "AccessibilityBridge received an update with out ever getting a root "
543 "node.";
544
545 FuchsiaAtomicUpdate atomic_update;
546 bool has_root_node_update = false;
547
548
549
550
551
552 for (const auto& [flutter_node_id, flutter_node] : update) {
553 size_t this_node_size = sizeof(fuchsia::accessibility::semantics::Node);
554
555
556
557
558
559
560 if (flutter_node.id == kRootNodeId) {
561 root_flutter_semantics_node_ = flutter_node;
562 has_root_node_update = true;
563 continue;
564 }
565
566 nodes_[flutter_node.id].data = flutter_node;
567
568 fuchsia::accessibility::semantics::Node fuchsia_node;
569 std::vector<uint32_t> child_ids;
570
571
572 for (int32_t flutter_child_id : flutter_node.childrenInTraversalOrder) {
574 }
575
576
577 fuchsia_node.set_node_id(flutter_node.id)
578 .set_role(GetNodeRole(flutter_node))
579 .set_location(GetNodeLocation(flutter_node))
580 .set_transform(GetNodeTransform(flutter_node))
581 .set_attributes(GetNodeAttributes(flutter_node, &this_node_size))
582 .set_states(GetNodeStates(flutter_node, &this_node_size))
583 .set_actions(GetNodeActions(flutter_node, &this_node_size))
584 .set_child_ids(child_ids);
585 this_node_size +=
586 kNodeIdSize * flutter_node.childrenInTraversalOrder.size();
587
588 atomic_update.AddNodeUpdate(std::move(fuchsia_node), this_node_size);
589 }
590
591
592 if (has_root_node_update || last_seen_view_pixel_ratio_ != view_pixel_ratio) {
593 last_seen_view_pixel_ratio_ = view_pixel_ratio;
594 size_t root_node_size;
595 fuchsia::accessibility::semantics::Node root_update =
596 GetRootNodeUpdate(root_node_size);
597 atomic_update.AddNodeUpdate(std::move(root_update), root_node_size);
598 }
599
600 PruneUnreachableNodes(&atomic_update);
601 UpdateScreenRects();
602
603 atomic_updates_->push(std::move(atomic_update));
604 if (atomic_updates_->size() == 1) {
605
606 Apply(&atomic_updates_->front());
607 }
608}
static constexpr size_t kNodeIdSize
#define FML_DCHECK(condition)
static uint32_t FlutterIdToFuchsiaId(int32_t flutter_node_id)