From 5333e3b67fcda8dc0f6886111a0ea5ea395069ce Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 1 Jul 2026 14:39:58 +0000 Subject: [PATCH] Optimize Map deep equality check from O(N^2) to O(N) The generated pigeon code for `_deepEquals` uses a nested loop to compare Maps, resulting in O(N^2) complexity. This commit optimizes it by doing an O(1) `b.containsKey(keyA)` check first before falling back to the O(N) iteration for complex keys (like Lists or other Maps). This preserves the original behavior while significantly speeding up equality checks for typical Maps with primitive keys. Co-authored-by: esenmx <43244505+esenmx@users.noreply.github.com> --- lib/src/messages.g.dart | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/src/messages.g.dart b/lib/src/messages.g.dart index b6fbc99..28a8768 100644 --- a/lib/src/messages.g.dart +++ b/lib/src/messages.g.dart @@ -69,17 +69,29 @@ bool _deepEquals(Object? a, Object? b) { return false; } for (final MapEntry entryA in a.entries) { + final Object? keyA = entryA.key; + final Object? valueA = entryA.value; + bool found = false; - for (final MapEntry entryB in b.entries) { - if (_deepEquals(entryA.key, entryB.key)) { - if (_deepEquals(entryA.value, entryB.value)) { - found = true; - break; - } else { - return false; + if (b.containsKey(keyA)) { + if (_deepEquals(valueA, b[keyA])) { + found = true; + } + } + + if (!found) { + for (final MapEntry entryB in b.entries) { + if (_deepEquals(keyA, entryB.key)) { + if (_deepEquals(valueA, entryB.value)) { + found = true; + break; + } else { + return false; + } } } } + if (!found) { return false; }