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