diff --git a/CHANGELOG.md b/CHANGELOG.md index f8cfdccb..ebb9f041 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ## Next + +- perf: Optimize mask widget rect collection to O(N) ([#269](https://github.com/PostHog/posthog-flutter/pull/269)) + # 5.12.0 - feat: flutter error tracking support for web ([#243](https://github.com/PostHog/posthog-flutter/pull/243)) diff --git a/lib/src/replay/element_parsers/element_data.dart b/lib/src/replay/element_parsers/element_data.dart index 4aeeb1fe..1d0fd023 100644 --- a/lib/src/replay/element_parsers/element_data.dart +++ b/lib/src/replay/element_parsers/element_data.dart @@ -22,9 +22,9 @@ class ElementData { } List extractMaskWidgetRects() { - final rects = []; + final rects = {}; _collectMaskWidgetRects(this, rects); - return rects; + return rects.toList(); } List extractRects({bool isRoot = true}) { @@ -47,14 +47,14 @@ class ElementData { return rects; } - void _collectMaskWidgetRects(ElementData element, List rectList) { - if (!rectList.contains(element.rect)) { + void _collectMaskWidgetRects(ElementData element, Set rectSet) { + if (!rectSet.contains(element.rect)) { if (element.widget is PostHogMaskWidget) { - rectList.add(element.rect); + rectSet.add(element.rect); } else if (element.widget is TextField) { final textField = element.widget as TextField; if (textField.obscureText) { - rectList.add(element.rect); + rectSet.add(element.rect); } } } @@ -62,7 +62,7 @@ class ElementData { final children = element.children; if (children != null && children.isNotEmpty) { for (var child in children) { - _collectMaskWidgetRects(child, rectList); + _collectMaskWidgetRects(child, rectSet); } } }