From 23d111a459ed115c90ed45aebb7c7dcdc47a3416 Mon Sep 17 00:00:00 2001 From: Ben Wiederhake Date: Mon, 9 Jan 2023 19:08:37 +0100 Subject: [PATCH] LibWeb: Implement value_id_from_string by hash lookup The old approach was basically a linear scan, which is slower than a hash map for the currently 303 elements, as evidenced by the new benchmark in TestCSSIDSpeed. Before: Completed benchmark 'value_id_from_string' in 3238ms After: Completed benchmark 'value_id_from_string' in 193ms --- .../CodeGenerators/LibWeb/GenerateCSSValueID.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSValueID.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSValueID.cpp index 201e9a13a3..bb70156c6d 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSValueID.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSValueID.cpp @@ -85,12 +85,12 @@ ErrorOr generate_implementation_file(JsonArray& identifier_data, Core::Str generator.append(R"~~~( #include +#include #include namespace Web::CSS { -ValueID value_id_from_string(StringView string) -{ +HashMap g_stringview_to_value_id_map { )~~~"); identifier_data.for_each([&](auto& name) { @@ -98,13 +98,17 @@ ValueID value_id_from_string(StringView string) member_generator.set("name", name.to_deprecated_string()); member_generator.set("name:titlecase", title_casify(name.to_deprecated_string())); member_generator.append(R"~~~( - if (string.equals_ignoring_case("@name@"sv)) - return ValueID::@name:titlecase@; + {"@name@"sv, ValueID::@name:titlecase@}, )~~~"); }); generator.append(R"~~~( - return ValueID::Invalid; +}; + +ValueID value_id_from_string(StringView string) +{ + auto maybe_value_id = g_stringview_to_value_id_map.get(string); + return maybe_value_id.value_or(ValueID::Invalid); } StringView string_from_value_id(ValueID value_id) {