Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 368ad25c authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Log detected cycles in LayerHierarchy#traverse" into main

parents a7b68952 bb2ec6a4
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -52,8 +52,12 @@ LayerHierarchy::LayerHierarchy(const LayerHierarchy& hierarchy, bool childrenOnl
    mChildren = hierarchy.mChildren;
    mChildren = hierarchy.mChildren;
}
}


void LayerHierarchy::traverse(const Visitor& visitor,
void LayerHierarchy::traverse(const Visitor& visitor, LayerHierarchy::TraversalPath& traversalPath,
                              LayerHierarchy::TraversalPath& traversalPath) const {
                              uint32_t depth) const {
    LLOG_ALWAYS_FATAL_WITH_TRACE_IF(depth > 50,
                                    "Cycle detected in LayerHierarchy::traverse. See "
                                    "traverse_stack_overflow_transactions.winscope");

    if (mLayer) {
    if (mLayer) {
        bool breakTraversal = !visitor(*this, traversalPath);
        bool breakTraversal = !visitor(*this, traversalPath);
        if (breakTraversal) {
        if (breakTraversal) {
@@ -66,7 +70,7 @@ void LayerHierarchy::traverse(const Visitor& visitor,
    for (auto& [child, childVariant] : mChildren) {
    for (auto& [child, childVariant] : mChildren) {
        ScopedAddToTraversalPath addChildToTraversalPath(traversalPath, child->mLayer->id,
        ScopedAddToTraversalPath addChildToTraversalPath(traversalPath, child->mLayer->id,
                                                         childVariant);
                                                         childVariant);
        child->traverse(visitor, traversalPath);
        child->traverse(visitor, traversalPath, depth + 1);
    }
    }
}
}


+3 −2
Original line number Original line Diff line number Diff line
@@ -147,7 +147,7 @@ public:
        if (mLayer) {
        if (mLayer) {
            root.id = mLayer->id;
            root.id = mLayer->id;
        }
        }
        traverse(visitor, root);
        traverse(visitor, root, /*depth=*/0);
    }
    }


    // Traverse the hierarchy in z-order, skipping children that have relative parents.
    // Traverse the hierarchy in z-order, skipping children that have relative parents.
@@ -190,7 +190,8 @@ private:
    void sortChildrenByZOrder();
    void sortChildrenByZOrder();
    void updateChild(LayerHierarchy*, LayerHierarchy::Variant);
    void updateChild(LayerHierarchy*, LayerHierarchy::Variant);
    void traverseInZOrder(const Visitor& visitor, LayerHierarchy::TraversalPath& parent) const;
    void traverseInZOrder(const Visitor& visitor, LayerHierarchy::TraversalPath& parent) const;
    void traverse(const Visitor& visitor, LayerHierarchy::TraversalPath& parent) const;
    void traverse(const Visitor& visitor, LayerHierarchy::TraversalPath& parent,
                  uint32_t depth = 0) const;
    void dump(std::ostream& out, const std::string& prefix, LayerHierarchy::Variant variant,
    void dump(std::ostream& out, const std::string& prefix, LayerHierarchy::Variant variant,
              bool isLastChild, bool includeMirroredHierarchy) const;
              bool isLastChild, bool includeMirroredHierarchy) const;