// Copyright 2022 The Dawn & Tint Authors
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this
//    list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
//    this list of conditions and the following disclaimer in the documentation
//    and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
//    contributors may be used to endorse or promote products derived from
//    this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

////////////////////////////////////////////////////////////////////////////////
// File generated by 'tools/src/cmd/gen' using the template:
//   src/tint/lang/wgsl/extension_bench.cc.tmpl
//
// To regenerate run: './tools/run gen'
//
//                       Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////

#include "src/tint/lang/wgsl/extension.h"

#include <array>

#include "benchmark/benchmark.h"

namespace tint::wgsl {
namespace {

void ExtensionParser(::benchmark::State& state) {
    const char* kStrings[] = {
        "chromium_disableuniformiccy_analysis",
        "chromil3_disable_unifority_analss",
        "chromium_disable_Vniformity_analysis",
        "chromium_disable_uniformity_analysis",
        "chromium_dis1ble_uniformity_analysis",
        "chromium_qqisable_unifomity_anaJysis",
        "chrollium_disable_uniformity_analysi77",
        "chromippHm_experqqmetal_dp4a",
        "chrmium_expecimntal_dp4",
        "chrmiumGexpebimental_dp4a",
        "chromium_experimental_dp4a",
        "chromium_exverimentiil_dp4a",
        "chro8ium_experimenWWal_dp4a",
        "chromiMm_eperimxxntal_dp4a",
        "cXromium_expermental_framggbuffer_fetch",
        "chVomiu_experimntal_fXauebuffer_fetch",
        "chromium_experimental_fr3mebuffer_fetch",
        "chromium_experimental_framebuffer_fetch",
        "chromium_experimental_fraEebuffer_fetch",
        "chromTTum_experimental_fraebuffePP_fetch",
        "chromum_experiddental_framebxxffer_fetch",
        "chromium_experimental_full_ptr_p44rameters",
        "SShromium_experimental_full_ptr_parameVVers",
        "chroRium_expRrimental_fu22l_ptr_prameters",
        "chromium_experimental_full_ptr_parameters",
        "chromium_experimFntal_full_ptr_paramet9r",
        "chromium_experimentl_full_ptr_parameters",
        "chromiuHexperimental_fulOO_pVr_paramRRters",
        "chromium_experimenya_pixel_local",
        "chrromium_exp77rimentnnl_pixellllocGl",
        "chromium_exper4mental_pixel_lo00al",
        "chromium_experimental_pixel_local",
        "chooomium_eperimenal_pxel_local",
        "chromium_experzzental_pixel_ocal",
        "chiiomiu_epperimental_pix11l_local",
        "chromXXum_experimental_push_constant",
        "chromII9um_experinnental_push_c55nstant",
        "chSSomium_experiHHental_pusrraaconstaYt",
        "chromium_experimental_push_constant",
        "chromium_epHrimentkk_psh_constant",
        "chromium_expegimenja_puRRh_costant",
        "chromium_bxperimental_push_contan",
        "chromium_experimental_sjbgroups",
        "chromium_experimental_sbgroups",
        "cromum_experimentalqsubgroups",
        "chromium_experimental_subgroups",
        "chromium_expNNrimental_subgoups",
        "chromium_experimetal_svvbgrous",
        "chromium_experiQental_subgroups",
        "chrorum_internal_dal_source_bleffding",
        "chromium_internal_dual_source_jlending",
        "chromiNNm_internal_dua8_sourwwe_blening",
        "chromium_internal_dual_source_blending",
        "chromium_internal_dual_soure_blending",
        "chromium_irrternal_dual_source_blending",
        "chromium_internal_duaG_source_blending",
        "chromium_internalFFrelaxed_uniform_layout",
        "chromEum_internal_relaxed_unifrmlyout",
        "chromium_internalrrrelaxd_uniform_layout",
        "chromium_internal_relaxed_uniform_layout",
        "chromiuminternal_relaxed_uniform_layut",
        "cXroDium_internal_rJJlaed_uniform_layout",
        "chromium_int8nal_relaed_uniform_layut",
        "k",
        "16",
        "J1",
        "f16",
        "c16",
        "fO6",
        "_KKttvv",
    };
    for (auto _ : state) {
        for (auto* str : kStrings) {
            auto result = ParseExtension(str);
            benchmark::DoNotOptimize(result);
        }
    }
}  // NOLINT(readability/fn_size)

BENCHMARK(ExtensionParser);

}  // namespace
}  // namespace tint::wgsl
