From 0148d6617459a2b8346aba788b0ac0ba29daa65d Mon Sep 17 00:00:00 2001 From: Chun-Heng Tai Date: Fri, 25 Sep 2020 16:22:12 -0700 Subject: [PATCH 1/4] Apply dpr transform to fuchsia accessibility bridge --- .../fuchsia/flutter/accessibility_bridge.cc | 82 ++++++++++++++++++- .../fuchsia/flutter/accessibility_bridge.h | 11 ++- .../flutter/accessibility_bridge_unittest.cc | 17 ++++ .../platform/fuchsia/flutter/platform_view.cc | 6 ++ .../platform/fuchsia/flutter/platform_view.h | 2 + 5 files changed, 114 insertions(+), 4 deletions(-) diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.cc b/shell/platform/fuchsia/flutter/accessibility_bridge.cc index 28aa2d6fa999a..3f49f0c2d05cf 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.cc @@ -56,9 +56,14 @@ fuchsia::ui::gfx::BoundingBox AccessibilityBridge::GetNodeLocation( fuchsia::ui::gfx::mat4 AccessibilityBridge::GetNodeTransform( const flutter::SemanticsNode& node) const { + return ConvertSkiaTransformToMat4(node.transform); +} + +fuchsia::ui::gfx::mat4 AccessibilityBridge::ConvertSkiaTransformToMat4( + const SkM44 transform) const { fuchsia::ui::gfx::mat4 value; float* m = value.matrix.data(); - node.transform.getColMajor(m); + transform.getColMajor(m); return value; } @@ -250,7 +255,7 @@ void AccessibilityBridge::AddSemanticsNodeUpdate( std::vector nodes; size_t current_size = 0; - + bool has_root_node_update = false; // TODO(MI4-2498): Actions, Roles, hit test children, additional // flags/states/attr @@ -259,6 +264,14 @@ void AccessibilityBridge::AddSemanticsNodeUpdate( for (const auto& value : update) { size_t this_node_size = sizeof(fuchsia::accessibility::semantics::Node); const auto& flutter_node = value.second; + // We handle root update separately in GetRootNodeUpdate. + // TODO(chunhtai): remove this special case after we remove the inverse + // view pixel ratio transformation in scenic view. + if (flutter_node.id == kRootNodeId) { + root_flutter_semantics_node_ = flutter_node; + has_root_node_update = true; + continue; + } // Store the nodes for later hit testing. nodes_[flutter_node.id] = { .id = flutter_node.id, @@ -292,7 +305,6 @@ void AccessibilityBridge::AddSemanticsNodeUpdate( PrintNodeSizeError(flutter_node.id); return; } - current_size += this_node_size; // If we would exceed the max FIDL message size by appending this node, @@ -309,6 +321,30 @@ void AccessibilityBridge::AddSemanticsNodeUpdate( PrintNodeSizeError(nodes.back().node_id()); } + // Handles root node update. + float new_view_pixel_ratio = delegate_.GetViewPixelRatio(); + if (has_root_node_update || + last_seen_view_pixel_ratio_ != new_view_pixel_ratio) { + last_seen_view_pixel_ratio_ = new_view_pixel_ratio; + size_t root_node_size; + fuchsia::accessibility::semantics::Node root_update = GetRootNodeUpdate(root_node_size); + // TODO(MI4-2531, FIDL-718): Remove this + // This is defensive. If, despite our best efforts, we ended up with a node + // that is larger than the max fidl size, we send no updates. + if (root_node_size >= kMaxMessageSize) { + PrintNodeSizeError(kRootNodeId); + return; + } + current_size += root_node_size; + // If we would exceed the max FIDL message size by appending this node, + // we should delete/update/commit now. + if (current_size >= kMaxMessageSize) { + tree_ptr_->UpdateSemanticNodes(std::move(nodes)); + nodes.clear(); + } + nodes.push_back(std::move(root_update)); + } + PruneUnreachableNodes(); UpdateScreenRects(); @@ -318,6 +354,46 @@ void AccessibilityBridge::AddSemanticsNodeUpdate( tree_ptr_->CommitUpdates([]() {}); } +fuchsia::accessibility::semantics::Node +AccessibilityBridge::GetRootNodeUpdate(size_t & node_size) { + fuchsia::accessibility::semantics::Node root_fuchsia_node; + std::vector child_ids; + node_size = sizeof(fuchsia::accessibility::semantics::Node); + for (int32_t flutter_child_id : + root_flutter_semantics_node_.childrenInTraversalOrder) { + child_ids.push_back(FlutterIdToFuchsiaId(flutter_child_id)); + } + // Applies the inverse view pixel ratio transformation to the root node. + float inverse_view_pixel_ratio = 1.f / last_seen_view_pixel_ratio_; + SkM44 inverse_view_pixel_ratio_transform; + inverse_view_pixel_ratio_transform.setScale(inverse_view_pixel_ratio, + inverse_view_pixel_ratio, 1.f); + + SkM44 result = root_flutter_semantics_node_.transform * + inverse_view_pixel_ratio_transform; + nodes_[root_flutter_semantics_node_.id] = { + .id = root_flutter_semantics_node_.id, + .flags = root_flutter_semantics_node_.flags, + .rect = root_flutter_semantics_node_.rect, + .transform = result, + .children_in_hit_test_order = + root_flutter_semantics_node_.childrenInHitTestOrder, + }; + root_fuchsia_node.set_node_id(root_flutter_semantics_node_.id) + .set_role(GetNodeRole(root_flutter_semantics_node_)) + .set_location(GetNodeLocation(root_flutter_semantics_node_)) + .set_transform(ConvertSkiaTransformToMat4(result)) + .set_attributes( + GetNodeAttributes(root_flutter_semantics_node_, &node_size)) + .set_states(GetNodeStates(root_flutter_semantics_node_, &node_size)) + .set_actions( + GetNodeActions(root_flutter_semantics_node_, &node_size)) + .set_child_ids(child_ids); + node_size += + kNodeIdSize * root_flutter_semantics_node_.childrenInTraversalOrder.size(); + return root_fuchsia_node; +} + void AccessibilityBridge::UpdateScreenRects() { std::unordered_set visited_nodes; UpdateScreenRects(kRootNodeId, SkM44{}, &visited_nodes); diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.h b/shell/platform/fuchsia/flutter/accessibility_bridge.h index bbfa18eae1621..007b885a7b676 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.h +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.h @@ -46,6 +46,7 @@ class AccessibilityBridge virtual void SetSemanticsEnabled(bool enabled) = 0; virtual void DispatchSemanticsAction(int32_t node_id, flutter::SemanticsAction action) = 0; + virtual float GetViewPixelRatio() = 0; }; // TODO(MI4-2531, FIDL-718): Remove this. We shouldn't be worried about @@ -115,6 +116,8 @@ class AccessibilityBridge AccessibilityBridge::Delegate& delegate_; static constexpr int32_t kRootNodeId = 0; + flutter::SemanticsNode root_flutter_semantics_node_; + float last_seen_view_pixel_ratio_ = 1.f; fidl::Binding binding_; fuchsia::accessibility::semantics::SemanticsManagerPtr fuchsia_semantics_manager_; @@ -124,15 +127,21 @@ class AccessibilityBridge // Assists with pruning unreachable nodes and hit testing. std::unordered_map nodes_; + fuchsia::accessibility::semantics::Node GetRootNodeUpdate(size_t & node_size); + // Derives the BoundingBox of a Flutter semantics node from its // rect and elevation. fuchsia::ui::gfx::BoundingBox GetNodeLocation( const flutter::SemanticsNode& node) const; - // Converts a Flutter semantics node's transformation to a mat4. + // Gets mat4 transformation from a Flutter semantics node. fuchsia::ui::gfx::mat4 GetNodeTransform( const flutter::SemanticsNode& node) const; + // Converts a Flutter semantics node's transformation to a mat4. + fuchsia::ui::gfx::mat4 ConvertSkiaTransformToMat4( + const SkM44 transform) const; + // Derives the attributes for a Fuchsia semantics node from a Flutter // semantics node. fuchsia::accessibility::semantics::Attributes GetNodeAttributes( diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc index 0cec5c6ea1025..aac68a402052d 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -22,11 +22,13 @@ namespace flutter_runner_test { class AccessibilityBridgeTestDelegate : public flutter_runner::AccessibilityBridge::Delegate { public: + float view_pixel_ratio = 1.f; void SetSemanticsEnabled(bool enabled) override { enabled_ = enabled; } void DispatchSemanticsAction(int32_t node_id, flutter::SemanticsAction action) override { actions.push_back(std::make_pair(node_id, action)); } + float GetViewPixelRatio() override { return view_pixel_ratio; } bool enabled() { return enabled_; } std::vector> actions; @@ -269,6 +271,21 @@ TEST_F(AccessibilityBridgeTest, PopulatesSelectedState) { EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); } +TEST_F(AccessibilityBridgeTest, ApplyViewPixelRatioToRoot) { + accessibility_delegate_.view_pixel_ratio = 1.25f; + flutter::SemanticsNode node0; + node0.id = 0; + node0.flags = static_cast(flutter::SemanticsFlags::kIsSelected); + + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + RunLoopUntilIdle(); + const auto& fuchsia_node = semantics_manager_.LastUpdatedNodes().at(0u); + EXPECT_EQ(fuchsia_node.node_id(), static_cast(node0.id)); + EXPECT_EQ(fuchsia_node.transform().matrix[0], 0.8f); + EXPECT_EQ(fuchsia_node.transform().matrix[5], 0.8f); + EXPECT_EQ(fuchsia_node.transform().matrix[10], 1.f); +} + TEST_F(AccessibilityBridgeTest, PopulatesHiddenState) { flutter::SemanticsNode node0; node0.id = 0; diff --git a/shell/platform/fuchsia/flutter/platform_view.cc b/shell/platform/fuchsia/flutter/platform_view.cc index 958b6046f6af9..d4bcec057a45c 100644 --- a/shell/platform/fuchsia/flutter/platform_view.cc +++ b/shell/platform/fuchsia/flutter/platform_view.cc @@ -570,6 +570,12 @@ void PlatformView::DispatchSemanticsAction(int32_t node_id, flutter::PlatformView::DispatchSemanticsAction(node_id, action, {}); } +// |flutter::PlatformView| +// |flutter_runner::AccessibilityBridge::Delegate| +float PlatformView::GetViewPixelRatio() { + return view_pixel_ratio_; +} + // |flutter::PlatformView| void PlatformView::UpdateSemantics( flutter::SemanticsNodeUpdates update, diff --git a/shell/platform/fuchsia/flutter/platform_view.h b/shell/platform/fuchsia/flutter/platform_view.h index 431272b774c6d..0a15fb8c366c4 100644 --- a/shell/platform/fuchsia/flutter/platform_view.h +++ b/shell/platform/fuchsia/flutter/platform_view.h @@ -70,6 +70,8 @@ class PlatformView final : public flutter::PlatformView, // |flutter_runner::AccessibilityBridge::Delegate| void DispatchSemanticsAction(int32_t node_id, flutter::SemanticsAction action) override; + // |flutter_runner::AccessibilityBridge::Delegate| + float GetViewPixelRatio() override; // |PlatformView| flutter::PointerDataDispatcherMaker GetDispatcherMaker() override; From a8042ca30b7026017f35973cba4483a9a79ba73f Mon Sep 17 00:00:00 2001 From: Chun-Heng Tai Date: Fri, 25 Sep 2020 16:31:56 -0700 Subject: [PATCH 2/4] fix format --- .../fuchsia/flutter/accessibility_bridge.cc | 16 ++++++++-------- .../fuchsia/flutter/accessibility_bridge.h | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.cc b/shell/platform/fuchsia/flutter/accessibility_bridge.cc index 3f49f0c2d05cf..bb885750016f7 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.cc @@ -324,10 +324,11 @@ void AccessibilityBridge::AddSemanticsNodeUpdate( // Handles root node update. float new_view_pixel_ratio = delegate_.GetViewPixelRatio(); if (has_root_node_update || - last_seen_view_pixel_ratio_ != new_view_pixel_ratio) { + last_seen_view_pixel_ratio_ != new_view_pixel_ratio) { last_seen_view_pixel_ratio_ = new_view_pixel_ratio; size_t root_node_size; - fuchsia::accessibility::semantics::Node root_update = GetRootNodeUpdate(root_node_size); + fuchsia::accessibility::semantics::Node root_update = + GetRootNodeUpdate(root_node_size); // TODO(MI4-2531, FIDL-718): Remove this // This is defensive. If, despite our best efforts, we ended up with a node // that is larger than the max fidl size, we send no updates. @@ -354,8 +355,8 @@ void AccessibilityBridge::AddSemanticsNodeUpdate( tree_ptr_->CommitUpdates([]() {}); } -fuchsia::accessibility::semantics::Node -AccessibilityBridge::GetRootNodeUpdate(size_t & node_size) { +fuchsia::accessibility::semantics::Node AccessibilityBridge::GetRootNodeUpdate( + size_t& node_size) { fuchsia::accessibility::semantics::Node root_fuchsia_node; std::vector child_ids; node_size = sizeof(fuchsia::accessibility::semantics::Node); @@ -386,11 +387,10 @@ AccessibilityBridge::GetRootNodeUpdate(size_t & node_size) { .set_attributes( GetNodeAttributes(root_flutter_semantics_node_, &node_size)) .set_states(GetNodeStates(root_flutter_semantics_node_, &node_size)) - .set_actions( - GetNodeActions(root_flutter_semantics_node_, &node_size)) + .set_actions(GetNodeActions(root_flutter_semantics_node_, &node_size)) .set_child_ids(child_ids); - node_size += - kNodeIdSize * root_flutter_semantics_node_.childrenInTraversalOrder.size(); + node_size += kNodeIdSize * + root_flutter_semantics_node_.childrenInTraversalOrder.size(); return root_fuchsia_node; } diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.h b/shell/platform/fuchsia/flutter/accessibility_bridge.h index 007b885a7b676..63ef021b6a822 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.h +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.h @@ -127,7 +127,7 @@ class AccessibilityBridge // Assists with pruning unreachable nodes and hit testing. std::unordered_map nodes_; - fuchsia::accessibility::semantics::Node GetRootNodeUpdate(size_t & node_size); + fuchsia::accessibility::semantics::Node GetRootNodeUpdate(size_t& node_size); // Derives the BoundingBox of a Flutter semantics node from its // rect and elevation. From 33c6742f08da83c1a8d4af1376f4566316e3bc12 Mon Sep 17 00:00:00 2001 From: Chun-Heng Tai Date: Fri, 25 Sep 2020 18:05:52 -0700 Subject: [PATCH 3/4] addressing comment --- .../fuchsia/flutter/accessibility_bridge.cc | 9 +- .../fuchsia/flutter/accessibility_bridge.h | 4 +- .../flutter/accessibility_bridge_unittest.cc | 147 ++++++++++-------- .../platform/fuchsia/flutter/platform_view.cc | 8 +- .../platform/fuchsia/flutter/platform_view.h | 2 - 5 files changed, 90 insertions(+), 80 deletions(-) diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.cc b/shell/platform/fuchsia/flutter/accessibility_bridge.cc index bb885750016f7..93de993d95e22 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.cc @@ -244,7 +244,8 @@ static void PrintNodeSizeError(uint32_t node_id) { } void AccessibilityBridge::AddSemanticsNodeUpdate( - const flutter::SemanticsNodeUpdates update) { + const flutter::SemanticsNodeUpdates update, + float view_pixel_ratio) { if (update.empty()) { return; } @@ -322,10 +323,8 @@ void AccessibilityBridge::AddSemanticsNodeUpdate( } // Handles root node update. - float new_view_pixel_ratio = delegate_.GetViewPixelRatio(); - if (has_root_node_update || - last_seen_view_pixel_ratio_ != new_view_pixel_ratio) { - last_seen_view_pixel_ratio_ = new_view_pixel_ratio; + if (has_root_node_update || last_seen_view_pixel_ratio_ != view_pixel_ratio) { + last_seen_view_pixel_ratio_ = view_pixel_ratio; size_t root_node_size; fuchsia::accessibility::semantics::Node root_update = GetRootNodeUpdate(root_node_size); diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.h b/shell/platform/fuchsia/flutter/accessibility_bridge.h index 63ef021b6a822..bfa5b6b0d2cd9 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.h +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.h @@ -46,7 +46,6 @@ class AccessibilityBridge virtual void SetSemanticsEnabled(bool enabled) = 0; virtual void DispatchSemanticsAction(int32_t node_id, flutter::SemanticsAction action) = 0; - virtual float GetViewPixelRatio() = 0; }; // TODO(MI4-2531, FIDL-718): Remove this. We shouldn't be worried about @@ -83,7 +82,8 @@ class AccessibilityBridge void SetSemanticsEnabled(bool enabled); // Adds a semantics node update to the buffer of node updates to apply. - void AddSemanticsNodeUpdate(const flutter::SemanticsNodeUpdates update); + void AddSemanticsNodeUpdate(const flutter::SemanticsNodeUpdates update, + float view_pixel_ration); // Notifies the bridge of a 'hover move' touch exploration event. zx_status_t OnHoverMove(double x, double y); diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc index aac68a402052d..5dd321505ff92 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -22,13 +22,11 @@ namespace flutter_runner_test { class AccessibilityBridgeTestDelegate : public flutter_runner::AccessibilityBridge::Delegate { public: - float view_pixel_ratio = 1.f; void SetSemanticsEnabled(bool enabled) override { enabled_ = enabled; } void DispatchSemanticsAction(int32_t node_id, flutter::SemanticsAction action) override { actions.push_back(std::make_pair(node_id, action)); } - float GetViewPixelRatio() override { return view_pixel_ratio; } bool enabled() { return enabled_; } std::vector> actions; @@ -106,11 +104,13 @@ TEST_F(AccessibilityBridgeTest, DeletesChildrenTransitively) { node0.childrenInTraversalOrder = {1}; node0.childrenInHitTestOrder = {1}; - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - {1, node1}, - {2, node2}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + {1, node1}, + {2, node2}, + }, + 1.f); RunLoopUntilIdle(); EXPECT_EQ(0, semantics_manager_.DeleteCount()); @@ -124,9 +124,11 @@ TEST_F(AccessibilityBridgeTest, DeletesChildrenTransitively) { // Remove the children node0.childrenInTraversalOrder.clear(); node0.childrenInHitTestOrder.clear(); - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + }, + 1.f); RunLoopUntilIdle(); EXPECT_EQ(1, semantics_manager_.DeleteCount()); @@ -144,7 +146,7 @@ TEST_F(AccessibilityBridgeTest, PopulatesRoleButton) { node0.id = 0; node0.flags = static_cast(flutter::SemanticsFlags::kIsButton); - accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.f); RunLoopUntilIdle(); EXPECT_EQ(1U, semantics_manager_.LastUpdatedNodes().size()); @@ -160,7 +162,7 @@ TEST_F(AccessibilityBridgeTest, PopulatesRoleImage) { node0.id = 0; node0.flags = static_cast(flutter::SemanticsFlags::kIsImage); - accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.f); RunLoopUntilIdle(); EXPECT_EQ(1U, semantics_manager_.LastUpdatedNodes().size()); @@ -176,7 +178,7 @@ TEST_F(AccessibilityBridgeTest, PopulatesRoleSlider) { node0.id = 0; node0.actions |= static_cast(flutter::SemanticsAction::kIncrease); - accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.f); RunLoopUntilIdle(); EXPECT_EQ(1U, semantics_manager_.LastUpdatedNodes().size()); @@ -192,7 +194,7 @@ TEST_F(AccessibilityBridgeTest, PopulatesRoleHeader) { node0.id = 0; node0.flags = static_cast(flutter::SemanticsFlags::kIsHeader); - accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.f); RunLoopUntilIdle(); EXPECT_EQ(1U, semantics_manager_.LastUpdatedNodes().size()); @@ -214,7 +216,7 @@ TEST_F(AccessibilityBridgeTest, PopulatesCheckedState) { node0.flags |= static_cast(flutter::SemanticsFlags::kIsChecked); node0.value = "value"; - accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.f); RunLoopUntilIdle(); EXPECT_EQ(0, semantics_manager_.DeleteCount()); @@ -248,7 +250,7 @@ TEST_F(AccessibilityBridgeTest, PopulatesSelectedState) { // IsHidden = false node0.flags = static_cast(flutter::SemanticsFlags::kIsSelected); - accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.f); RunLoopUntilIdle(); EXPECT_EQ(0, semantics_manager_.DeleteCount()); @@ -272,12 +274,11 @@ TEST_F(AccessibilityBridgeTest, PopulatesSelectedState) { } TEST_F(AccessibilityBridgeTest, ApplyViewPixelRatioToRoot) { - accessibility_delegate_.view_pixel_ratio = 1.25f; flutter::SemanticsNode node0; node0.id = 0; node0.flags = static_cast(flutter::SemanticsFlags::kIsSelected); - accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.25f); RunLoopUntilIdle(); const auto& fuchsia_node = semantics_manager_.LastUpdatedNodes().at(0u); EXPECT_EQ(fuchsia_node.node_id(), static_cast(node0.id)); @@ -295,7 +296,7 @@ TEST_F(AccessibilityBridgeTest, PopulatesHiddenState) { // IsHidden = true node0.flags = static_cast(flutter::SemanticsFlags::kIsHidden); - accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.f); RunLoopUntilIdle(); EXPECT_EQ(0, semantics_manager_.DeleteCount()); @@ -327,7 +328,7 @@ TEST_F(AccessibilityBridgeTest, PopulatesActions) { node0.actions |= static_cast(flutter::SemanticsAction::kIncrease); node0.actions |= static_cast(flutter::SemanticsAction::kDecrease); - accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}); + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.f); RunLoopUntilIdle(); EXPECT_EQ(0, semantics_manager_.DeleteCount()); @@ -364,11 +365,13 @@ TEST_F(AccessibilityBridgeTest, TruncatesLargeLabel) { node0.childrenInTraversalOrder = {1, 2}; node0.childrenInHitTestOrder = {1, 2}; - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - {1, node1}, - {2, bad_node}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + {1, node1}, + {2, bad_node}, + }, + 1.f); RunLoopUntilIdle(); // Nothing to delete, but we should have broken @@ -408,11 +411,13 @@ TEST_F(AccessibilityBridgeTest, TruncatesLargeValue) { node0.childrenInTraversalOrder = {1, 2}; node0.childrenInHitTestOrder = {1, 2}; - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - {1, node1}, - {2, bad_node}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + {1, node1}, + {2, bad_node}, + }, + 1.f); RunLoopUntilIdle(); EXPECT_EQ(0, semantics_manager_.DeleteCount()); @@ -463,13 +468,15 @@ TEST_F(AccessibilityBridgeTest, SplitsLargeUpdates) { node1.childrenInTraversalOrder = {3, 4}; node1.childrenInHitTestOrder = {3, 4}; - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - {1, node1}, - {2, node2}, - {3, node3}, - {4, node4}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + {1, node1}, + {2, node2}, + {3, node3}, + {4, node4}, + }, + 1.f); RunLoopUntilIdle(); // Nothing to delete, but we should have broken into groups (4, 3, 2), (1, 0) @@ -487,9 +494,11 @@ TEST_F(AccessibilityBridgeTest, HandlesCycles) { node0.id = 0; node0.childrenInTraversalOrder.push_back(0); node0.childrenInHitTestOrder.push_back(0); - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + }, + 1.f); RunLoopUntilIdle(); EXPECT_EQ(0, semantics_manager_.DeleteCount()); @@ -504,10 +513,12 @@ TEST_F(AccessibilityBridgeTest, HandlesCycles) { node1.id = 1; node1.childrenInTraversalOrder = {0}; node1.childrenInHitTestOrder = {0}; - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - {1, node1}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + {1, node1}, + }, + 1.f); RunLoopUntilIdle(); EXPECT_EQ(0, semantics_manager_.DeleteCount()); @@ -544,7 +555,7 @@ TEST_F(AccessibilityBridgeTest, BatchesLargeMessages) { } update.insert(std::make_pair(0, std::move(node0))); - accessibility_bridge_->AddSemanticsNodeUpdate(update); + accessibility_bridge_->AddSemanticsNodeUpdate(update, 1.f); RunLoopUntilIdle(); EXPECT_EQ(0, semantics_manager_.DeleteCount()); @@ -558,9 +569,11 @@ TEST_F(AccessibilityBridgeTest, BatchesLargeMessages) { // Remove the children node0.childrenInTraversalOrder.clear(); node0.childrenInHitTestOrder.clear(); - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + }, + 1.f); RunLoopUntilIdle(); EXPECT_EQ(1, semantics_manager_.DeleteCount()); @@ -595,13 +608,15 @@ TEST_F(AccessibilityBridgeTest, HitTest) { node0.childrenInTraversalOrder = {1, 2, 3, 4}; node0.childrenInHitTestOrder = {1, 2, 3, 4}; - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - {1, node1}, - {2, node2}, - {3, node3}, - {4, node4}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + {1, node1}, + {2, node2}, + {3, node3}, + {4, node4}, + }, + 1.f); RunLoopUntilIdle(); uint32_t hit_node_id; @@ -646,11 +661,13 @@ TEST_F(AccessibilityBridgeTest, HitTestOverlapping) { node0.childrenInTraversalOrder = {1, 2}; node0.childrenInHitTestOrder = {2, 1}; - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - {1, node1}, - {2, node2}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + {1, node1}, + {2, node2}, + }, + 1.f); RunLoopUntilIdle(); uint32_t hit_node_id; @@ -673,10 +690,12 @@ TEST_F(AccessibilityBridgeTest, Actions) { node0.childrenInTraversalOrder = {1}; node0.childrenInHitTestOrder = {1}; - accessibility_bridge_->AddSemanticsNodeUpdate({ - {0, node0}, - {1, node1}, - }); + accessibility_bridge_->AddSemanticsNodeUpdate( + { + {0, node0}, + {1, node1}, + }, + 1.f); RunLoopUntilIdle(); auto handled_callback = [](bool handled) { EXPECT_TRUE(handled); }; diff --git a/shell/platform/fuchsia/flutter/platform_view.cc b/shell/platform/fuchsia/flutter/platform_view.cc index d4bcec057a45c..3f15dac57da37 100644 --- a/shell/platform/fuchsia/flutter/platform_view.cc +++ b/shell/platform/fuchsia/flutter/platform_view.cc @@ -570,17 +570,11 @@ void PlatformView::DispatchSemanticsAction(int32_t node_id, flutter::PlatformView::DispatchSemanticsAction(node_id, action, {}); } -// |flutter::PlatformView| -// |flutter_runner::AccessibilityBridge::Delegate| -float PlatformView::GetViewPixelRatio() { - return view_pixel_ratio_; -} - // |flutter::PlatformView| void PlatformView::UpdateSemantics( flutter::SemanticsNodeUpdates update, flutter::CustomAccessibilityActionUpdates actions) { - accessibility_bridge_->AddSemanticsNodeUpdate(update); + accessibility_bridge_->AddSemanticsNodeUpdate(update, view_pixel_ratio_); } // Channel handler for kAccessibilityChannel diff --git a/shell/platform/fuchsia/flutter/platform_view.h b/shell/platform/fuchsia/flutter/platform_view.h index 0a15fb8c366c4..431272b774c6d 100644 --- a/shell/platform/fuchsia/flutter/platform_view.h +++ b/shell/platform/fuchsia/flutter/platform_view.h @@ -70,8 +70,6 @@ class PlatformView final : public flutter::PlatformView, // |flutter_runner::AccessibilityBridge::Delegate| void DispatchSemanticsAction(int32_t node_id, flutter::SemanticsAction action) override; - // |flutter_runner::AccessibilityBridge::Delegate| - float GetViewPixelRatio() override; // |PlatformView| flutter::PointerDataDispatcherMaker GetDispatcherMaker() override; From 767d75e8b0b7b561abb447408d8802500faed820 Mon Sep 17 00:00:00 2001 From: Chun-Heng Tai Date: Fri, 25 Sep 2020 18:07:11 -0700 Subject: [PATCH 4/4] fix typo --- shell/platform/fuchsia/flutter/accessibility_bridge.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.h b/shell/platform/fuchsia/flutter/accessibility_bridge.h index bfa5b6b0d2cd9..5ba1d981b0aaa 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.h +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.h @@ -83,7 +83,7 @@ class AccessibilityBridge // Adds a semantics node update to the buffer of node updates to apply. void AddSemanticsNodeUpdate(const flutter::SemanticsNodeUpdates update, - float view_pixel_ration); + float view_pixel_ratio); // Notifies the bridge of a 'hover move' touch exploration event. zx_status_t OnHoverMove(double x, double y);