From 3d343282889a922177127de9eb10833905c7feb7 Mon Sep 17 00:00:00 2001 From: zhouke Date: Wed, 21 Sep 2022 10:08:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?dumpLayout=20=E4=BF=AE=E5=A4=8Dbug=EF=BC=8C?= =?UTF-8?q?=E5=90=8C=E4=B8=80=E5=B1=82=E7=BA=A7=E7=9A=84=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=8C=E8=8B=A5=E6=8E=92=E5=9C=A8=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E7=9A=84=E8=8A=82=E7=82=B9=E8=A2=AB=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=EF=BC=8C=E5=90=8E=E9=9D=A2=E7=9A=84=E8=8A=82=E7=82=B9=E5=B0=86?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E8=A2=AB=E6=89=93=E5=8D=B0=EF=BC=8C.Signed-o?= =?UTF-8?q?ff-by:=20.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhouke --- uitest/core/ui_model.cpp | 43 ++++++++++++++++++++------ uitest/core/ui_model.h | 2 ++ uitest/server/system_ui_controller.cpp | 1 + 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/uitest/core/ui_model.cpp b/uitest/core/ui_model.cpp index 2588f28..316ef39 100644 --- a/uitest/core/ui_model.cpp +++ b/uitest/core/ui_model.cpp @@ -311,7 +311,23 @@ namespace OHOS::uitest { widgetsConstructed_ = true; } - static void DfsMarshalWidget(const WidgetTree& tree, const Widget& root, nlohmann::json& dom) + void WidgetTree::GetChildCoutMap(std::map &childCountMap) const + { + for (auto &hierarchy : widgetHierarchyIdDfsOrder_) { + if (hierarchy == ROOT_HIERARCHY) { + continue; + } + auto parentHierarchy = WidgetHierarchyBuilder::GetParentWidgetHierarchy(hierarchy); + if (childCountMap.find(parentHierarchy) == childCountMap.end()) { + childCountMap[parentHierarchy] = 1; + } else { + childCountMap[parentHierarchy] = childCountMap[parentHierarchy] + 1; + } + } + } + + static void DfsMarshalWidget(const WidgetTree& tree, const Widget& root, nlohmann::json& dom, + const std::map childCountMap) { auto attributesData = json(); // "< UiAttr::HIERARCHY" : do not expose inner used attributes @@ -326,14 +342,21 @@ namespace OHOS::uitest { attributesData[ATTR_NAMES[UiAttr::BOUNDS].data()] = stream.str(); auto childrenData = json::array(); - uint32_t childIndex = 0; - auto child = tree.GetChildWidget(root, childIndex); - while (child != nullptr) { - auto childData = json(); - DfsMarshalWidget(tree, *child, childData); - childrenData.emplace_back(childData); + uint32_t childIndex = 0, childCount = 0 , visitCount = 0; + auto hierarchy = root.GetHierarchy(); + if (childCountMap.find(hierarchy) != childCountMap.end()) { + childCount = childCountMap.find(hierarchy)->second; + } + while (visitCount < childCount) { + auto child = tree.GetChildWidget(root, childIndex); childIndex++; - child = tree.GetChildWidget(root, childIndex); + if (child == nullptr) { + continue; + } + auto childData = json(); + DfsMarshalWidget(tree, *child, childData, childCountMap); + childrenData.emplace_back(childData); + visitCount++; } dom["attributes"] = attributesData; @@ -344,8 +367,10 @@ namespace OHOS::uitest { { DCHECK(widgetsConstructed_); auto root = GetRootWidget(); + std::map childCountMap; + this->GetChildCoutMap(childCountMap); if (root != nullptr) { - DfsMarshalWidget(*this, *root, dom); + DfsMarshalWidget(*this, *root, dom, childCountMap); } } diff --git a/uitest/core/ui_model.h b/uitest/core/ui_model.h index bc99eb7..e07b8be 100644 --- a/uitest/core/ui_model.h +++ b/uitest/core/ui_model.h @@ -243,6 +243,8 @@ namespace OHOS::uitest { void DfsTraverseDescendants(WidgetVisitor &visitor, const Widget &root) const; + void GetChildCoutMap(std::map &childCoutMap) const; + /** * Get the root widget node. * diff --git a/uitest/server/system_ui_controller.cpp b/uitest/server/system_ui_controller.cpp index a95b03d..b2c5fc1 100644 --- a/uitest/server/system_ui_controller.cpp +++ b/uitest/server/system_ui_controller.cpp @@ -210,6 +210,7 @@ namespace OHOS::uitest { child = child2; } if (!child.IsVisible()) { + LOG_I("invisible node drop, id: %{public}d", child.GetAccessibilityId()); continue; } auto parcel = json(); From 4cf0001c914fdaf47b5043319f6242b8dd171b8e Mon Sep 17 00:00:00 2001 From: zhouke Date: Wed, 21 Sep 2022 10:42:51 +0800 Subject: [PATCH 2/2] modify.Signed-off-by: . Signed-off-by: zhouke --- uitest/core/ui_model.cpp | 41 ++++++++++++++++++---------------------- uitest/core/ui_model.h | 2 -- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/uitest/core/ui_model.cpp b/uitest/core/ui_model.cpp index 316ef39..8ce27b0 100644 --- a/uitest/core/ui_model.cpp +++ b/uitest/core/ui_model.cpp @@ -311,23 +311,8 @@ namespace OHOS::uitest { widgetsConstructed_ = true; } - void WidgetTree::GetChildCoutMap(std::map &childCountMap) const - { - for (auto &hierarchy : widgetHierarchyIdDfsOrder_) { - if (hierarchy == ROOT_HIERARCHY) { - continue; - } - auto parentHierarchy = WidgetHierarchyBuilder::GetParentWidgetHierarchy(hierarchy); - if (childCountMap.find(parentHierarchy) == childCountMap.end()) { - childCountMap[parentHierarchy] = 1; - } else { - childCountMap[parentHierarchy] = childCountMap[parentHierarchy] + 1; - } - } - } - static void DfsMarshalWidget(const WidgetTree& tree, const Widget& root, nlohmann::json& dom, - const std::map childCountMap) + const std::map widgetChildCountMap) { auto attributesData = json(); // "< UiAttr::HIERARCHY" : do not expose inner used attributes @@ -342,10 +327,10 @@ namespace OHOS::uitest { attributesData[ATTR_NAMES[UiAttr::BOUNDS].data()] = stream.str(); auto childrenData = json::array(); - uint32_t childIndex = 0, childCount = 0 , visitCount = 0; + uint32_t childIndex = 0, childCount = 0, visitCount = 0; auto hierarchy = root.GetHierarchy(); - if (childCountMap.find(hierarchy) != childCountMap.end()) { - childCount = childCountMap.find(hierarchy)->second; + if (widgetChildCountMap.find(hierarchy) != widgetChildCountMap.end()) { + childCount = widgetChildCountMap.find(hierarchy)->second; } while (visitCount < childCount) { auto child = tree.GetChildWidget(root, childIndex); @@ -354,7 +339,7 @@ namespace OHOS::uitest { continue; } auto childData = json(); - DfsMarshalWidget(tree, *child, childData, childCountMap); + DfsMarshalWidget(tree, *child, childData, widgetChildCountMap); childrenData.emplace_back(childData); visitCount++; } @@ -367,10 +352,20 @@ namespace OHOS::uitest { { DCHECK(widgetsConstructed_); auto root = GetRootWidget(); - std::map childCountMap; - this->GetChildCoutMap(childCountMap); + std::map widgetChildCountMap; + for (auto &hierarchy : widgetHierarchyIdDfsOrder_) { + if (hierarchy == ROOT_HIERARCHY) { + continue; + } + auto parentHierarchy = WidgetHierarchyBuilder::GetParentWidgetHierarchy(hierarchy); + if (widgetChildCountMap.find(parentHierarchy) == widgetChildCountMap.end()) { + widgetChildCountMap[parentHierarchy] = 1; + } else { + widgetChildCountMap[parentHierarchy] = widgetChildCountMap[parentHierarchy] + 1; + } + } if (root != nullptr) { - DfsMarshalWidget(*this, *root, dom, childCountMap); + DfsMarshalWidget(*this, *root, dom, widgetChildCountMap); } } diff --git a/uitest/core/ui_model.h b/uitest/core/ui_model.h index e07b8be..bc99eb7 100644 --- a/uitest/core/ui_model.h +++ b/uitest/core/ui_model.h @@ -243,8 +243,6 @@ namespace OHOS::uitest { void DfsTraverseDescendants(WidgetVisitor &visitor, const Widget &root) const; - void GetChildCoutMap(std::map &childCoutMap) const; - /** * Get the root widget node. *