
issue: https://github.com/flutter/flutter/issues/159177 The improvements come from using absl::flat_hash_map. measurements with std vs absl (`host_profile_arm64`): ``` # Std 0.041124 0.0398002 0.0396546 0.0405552 0.0397742 # Absl 0.0353708 0.0336834 0.0338616 0.033050 0.0331976 ``` Benchmark used ```c++ TEST(BufferBindingsGLESTest, BindUniformDataMicro) { BufferBindingsGLES bindings; absl::flat_hash_map<std::string, GLint> uniform_bindings; uniform_bindings["SHADERMETADATA.FOOBAR"] = 1; bindings.SetUniformBindings(std::move(uniform_bindings)); std::shared_ptr<MockGLES> mock_gl = MockGLES::Init(); MockAllocator allocator; Bindings vertex_bindings; ShaderMetadata shader_metadata = { .name = "shader_metadata", .members = {ShaderStructMemberMetadata{.type = ShaderType::kFloat, .name = "foobar", .offset = 0, .size = sizeof(float), .byte_length = sizeof(float)}}}; std::shared_ptr<ReactorGLES> reactor; std::shared_ptr<Allocation> backing_store = std::make_shared<Allocation>(); ASSERT_TRUE(backing_store->Truncate(Bytes{sizeof(float)})); DeviceBufferGLES device_buffer(DeviceBufferDescriptor{.size = sizeof(float)}, reactor, backing_store); BufferView buffer_view(&device_buffer, Range(0, sizeof(float))); vertex_bindings.buffers.push_back(BufferAndUniformSlot{ .slot = ShaderUniformSlot{ .name = "foobar", .ext_res_0 = 0, .set = 0, .binding = 0}, .view = BufferResource(&shader_metadata, buffer_view)}); Bindings fragment_bindings; int32_t count = 5'000'000; auto start = std::chrono::high_resolution_clock::now(); for (int32_t i = 0; i < count; ++i) { bindings.BindUniformData(mock_gl->GetProcTable(), allocator, vertex_bindings, fragment_bindings); if (i % 100 == 0) { mock_gl->GetCapturedCalls(); } } auto end = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start) .count(); std::cout << "Execution time: " << duration / static_cast<double>(count) << " microseconds" << std::endl; } ``` This is one of our hottest symbols on the raster thread: <img width="1528" alt="Screenshot 2024-11-27 at 2 27 54 PM" src="https://github.com/user-attachments/assets/a9029d6f-ee96-4612-83f1-6b69f24e6ce8"> ## 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]. <!-- Links --> [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
Description
A vendored version of the flutter engine for firka :3
Languages
Dart
75.4%
C++
16.4%
Objective-C++
2.7%
Java
2.7%
Objective-C
0.6%
Other
1.8%