From 6e278bf21683329448e58019c8262fba06c6d985 Mon Sep 17 00:00:00 2001 From: gaaclarke <30870216+gaaclarke@users.noreply.github.com> Date: Mon, 2 Dec 2024 09:41:25 -0800 Subject: [PATCH] switched reactor to absl::flat_hash_map (flutter/engine#56845) We don't need consistent pointers anymore since we are avoiding deleting objects to minimize time in the writer lock related pr with benchmarks: https://github.com/flutter/engine/pull/56844 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide] and the [C++, Objective-C, Java style guides]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I added new tests to check the change I am making or feature I am adding, or the PR is [test-exempt]. See [testing the engine] for instructions on writing and running engine tests. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I signed the [CLA]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style [testing the engine]: https://github.com/flutter/flutter/wiki/Testing-the-engine [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat --- .../flutter/impeller/renderer/backend/gles/BUILD.gn | 1 + .../impeller/renderer/backend/gles/reactor_gles.h | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/engine/src/flutter/impeller/renderer/backend/gles/BUILD.gn b/engine/src/flutter/impeller/renderer/backend/gles/BUILD.gn index bede7318a3..f0b53263a4 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/BUILD.gn +++ b/engine/src/flutter/impeller/renderer/backend/gles/BUILD.gn @@ -104,5 +104,6 @@ impeller_component("gles") { "../../:renderer", "../../../shader_archive", "//flutter/fml", + "//flutter/third_party/abseil-cpp/absl/container:flat_hash_map", ] } diff --git a/engine/src/flutter/impeller/renderer/backend/gles/reactor_gles.h b/engine/src/flutter/impeller/renderer/backend/gles/reactor_gles.h index 881e2a9086..09dc092097 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/reactor_gles.h +++ b/engine/src/flutter/impeller/renderer/backend/gles/reactor_gles.h @@ -9,6 +9,7 @@ #include #include +#include "flutter/third_party/abseil-cpp/absl/container/flat_hash_map.h" #include "fml/closure.h" #include "impeller/base/thread.h" #include "impeller/renderer/backend/gles/handle_gles.h" @@ -276,12 +277,10 @@ class ReactorGLES { std::map> ops_ IPLR_GUARDED_BY( ops_mutex_); - // Make sure the container is one where erasing items during iteration doesn't - // invalidate other iterators. - using LiveHandles = std::unordered_map; + using LiveHandles = absl::flat_hash_map; mutable RWMutex handles_mutex_; LiveHandles handles_ IPLR_GUARDED_BY(handles_mutex_); int32_t handles_to_collect_count_ IPLR_GUARDED_BY(handles_mutex_) = 0;