1d9f0492fSopenharmony_ci/*
2d9f0492fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License.
5d9f0492fSopenharmony_ci * You may obtain a copy of the License at
6d9f0492fSopenharmony_ci *
7d9f0492fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8d9f0492fSopenharmony_ci *
9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and
13d9f0492fSopenharmony_ci * limitations under the License.
14d9f0492fSopenharmony_ci */
15d9f0492fSopenharmony_ci
16d9f0492fSopenharmony_ci#include <benchmark/benchmark.h>
17d9f0492fSopenharmony_ci#include "benchmark_fwk.h"
18d9f0492fSopenharmony_ci#include "init_param.h"
19d9f0492fSopenharmony_ci#include "param_init.h"
20d9f0492fSopenharmony_ci#include "parameter.h"
21d9f0492fSopenharmony_ci#include "sys_param.h"
22d9f0492fSopenharmony_ci
23d9f0492fSopenharmony_ciusing namespace std;
24d9f0492fSopenharmony_ciusing namespace init_benchmark_test;
25d9f0492fSopenharmony_cinamespace {
26d9f0492fSopenharmony_cistatic int g_maxCount = 512;
27d9f0492fSopenharmony_ci}
28d9f0492fSopenharmony_ci
29d9f0492fSopenharmony_cistatic inline int TestRandom(void)
30d9f0492fSopenharmony_ci{
31d9f0492fSopenharmony_ci    return random();
32d9f0492fSopenharmony_ci}
33d9f0492fSopenharmony_ci
34d9f0492fSopenharmony_cinamespace init_benchmark_param {
35d9f0492fSopenharmony_cistruct LocalParameterTestState {
36d9f0492fSopenharmony_ci    explicit LocalParameterTestState(int nprops) noexcept : nprops(nprops), valid(false)
37d9f0492fSopenharmony_ci    {
38d9f0492fSopenharmony_ci        static const char paramNameChars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_.";
39d9f0492fSopenharmony_ci        if (g_maxCount < nprops) {
40d9f0492fSopenharmony_ci            fprintf(stderr, "Invalid nprops %d\n", nprops);
41d9f0492fSopenharmony_ci            return;
42d9f0492fSopenharmony_ci        }
43d9f0492fSopenharmony_ci        names = new char *[nprops];
44d9f0492fSopenharmony_ci        nameLens = new int[nprops];
45d9f0492fSopenharmony_ci        values = new char *[nprops];
46d9f0492fSopenharmony_ci        valueLens = new int[nprops];
47d9f0492fSopenharmony_ci
48d9f0492fSopenharmony_ci        srandom(nprops);
49d9f0492fSopenharmony_ci        int count = 0;
50d9f0492fSopenharmony_ci        for (int i = 0; i < nprops; i++) {
51d9f0492fSopenharmony_ci            // Make sure the name has at least 10 characters to make
52d9f0492fSopenharmony_ci            // it very unlikely to generate the same TestRandom name.
53d9f0492fSopenharmony_ci            nameLens[i] = (TestRandom() % (PARAM_NAME_LEN_MAX - 10)) + 10; // 10 name len
54d9f0492fSopenharmony_ci            names[i] = new char[PARAM_NAME_LEN_MAX + 1];
55d9f0492fSopenharmony_ci            size_t paramNameLen = sizeof(paramNameChars) - 1;
56d9f0492fSopenharmony_ci            for (int j = 0; j < nameLens[i]; j++) {
57d9f0492fSopenharmony_ci                if (j == 0 || names[i][j - 1] == '.' || j == nameLens[i] - 1) {
58d9f0492fSopenharmony_ci                    // Certain values are not allowed:
59d9f0492fSopenharmony_ci                    // - Don't start name with '.'
60d9f0492fSopenharmony_ci                    // - Don't allow '.' to appear twice in a row
61d9f0492fSopenharmony_ci                    // - Don't allow the name to end with '.'
62d9f0492fSopenharmony_ci                    // This assumes that '.' is the last character in the
63d9f0492fSopenharmony_ci                    // array so that decrementing the length by one removes
64d9f0492fSopenharmony_ci                    // the value from the possible values.
65d9f0492fSopenharmony_ci                    paramNameLen--;
66d9f0492fSopenharmony_ci                }
67d9f0492fSopenharmony_ci                names[i][j] = paramNameChars[TestRandom() % paramNameLen];
68d9f0492fSopenharmony_ci            }
69d9f0492fSopenharmony_ci            names[i][nameLens[i]] = 0;
70d9f0492fSopenharmony_ci
71d9f0492fSopenharmony_ci            // Make sure the value contains at least 1 character.
72d9f0492fSopenharmony_ci            valueLens[i] = (TestRandom() % (PARAM_VALUE_LEN_MAX - 1)) + 1;
73d9f0492fSopenharmony_ci            values[i] = new char[PARAM_VALUE_LEN_MAX];
74d9f0492fSopenharmony_ci            for (int j = 0; j < valueLens[i]; j++) {
75d9f0492fSopenharmony_ci                values[i][j] = paramNameChars[TestRandom() % (sizeof(paramNameChars) - 1)];
76d9f0492fSopenharmony_ci            }
77d9f0492fSopenharmony_ci
78d9f0492fSopenharmony_ci            if (SystemSetParameter(names[i], values[i]) != 0) {
79d9f0492fSopenharmony_ci                count++;
80d9f0492fSopenharmony_ci            }
81d9f0492fSopenharmony_ci        }
82d9f0492fSopenharmony_ci        if (count > 0) {
83d9f0492fSopenharmony_ci            fprintf(stderr, "Failed to add a property, count %d\n", count);
84d9f0492fSopenharmony_ci        }
85d9f0492fSopenharmony_ci        valid = true;
86d9f0492fSopenharmony_ci    }
87d9f0492fSopenharmony_ci
88d9f0492fSopenharmony_ci    LocalParameterTestState(const LocalParameterTestState&) = delete;
89d9f0492fSopenharmony_ci    LocalParameterTestState & operator=(const LocalParameterTestState&) = delete;
90d9f0492fSopenharmony_ci
91d9f0492fSopenharmony_ci    ~LocalParameterTestState() noexcept
92d9f0492fSopenharmony_ci    {
93d9f0492fSopenharmony_ci        for (int i = 0; i < nprops; i++) {
94d9f0492fSopenharmony_ci            delete names[i];
95d9f0492fSopenharmony_ci            delete values[i];
96d9f0492fSopenharmony_ci        }
97d9f0492fSopenharmony_ci        delete[] names;
98d9f0492fSopenharmony_ci        delete[] nameLens;
99d9f0492fSopenharmony_ci        delete[] values;
100d9f0492fSopenharmony_ci        delete[] valueLens;
101d9f0492fSopenharmony_ci    }
102d9f0492fSopenharmony_ci
103d9f0492fSopenharmony_cipublic:
104d9f0492fSopenharmony_ci    const int nprops;
105d9f0492fSopenharmony_ci    char **names;
106d9f0492fSopenharmony_ci    int *nameLens;
107d9f0492fSopenharmony_ci    char **values;
108d9f0492fSopenharmony_ci    int *valueLens;
109d9f0492fSopenharmony_ci    bool valid;
110d9f0492fSopenharmony_ci};
111d9f0492fSopenharmony_ci}
112d9f0492fSopenharmony_ci
113d9f0492fSopenharmony_cistatic init_benchmark_param::LocalParameterTestState *g_localParamTester = nullptr;
114d9f0492fSopenharmony_ci
115d9f0492fSopenharmony_civoid CreateLocalParameterTest(int max)
116d9f0492fSopenharmony_ci{
117d9f0492fSopenharmony_ci    g_maxCount = max > 0 ? max : g_maxCount;
118d9f0492fSopenharmony_ci    g_localParamTester = new init_benchmark_param::LocalParameterTestState(g_maxCount);
119d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr) {
120d9f0492fSopenharmony_ci        exit(0);
121d9f0492fSopenharmony_ci    }
122d9f0492fSopenharmony_ci}
123d9f0492fSopenharmony_ci
124d9f0492fSopenharmony_ci/**
125d9f0492fSopenharmony_ci * @brief for parameter get
126d9f0492fSopenharmony_ci *
127d9f0492fSopenharmony_ci * @param state
128d9f0492fSopenharmony_ci */
129d9f0492fSopenharmony_cistatic void BMCachedParameterGet(benchmark::State &state)
130d9f0492fSopenharmony_ci{
131d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
132d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
133d9f0492fSopenharmony_ci        return;
134d9f0492fSopenharmony_ci    }
135d9f0492fSopenharmony_ci
136d9f0492fSopenharmony_ci    CachedHandle handle = CachedParameterCreate(g_localParamTester->names[TestRandom() % g_maxCount], "4444444");
137d9f0492fSopenharmony_ci    for (auto _ : state) {
138d9f0492fSopenharmony_ci        benchmark::DoNotOptimize(CachedParameterGet(handle));
139d9f0492fSopenharmony_ci    }
140d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
141d9f0492fSopenharmony_ci}
142d9f0492fSopenharmony_ci
143d9f0492fSopenharmony_ci/**
144d9f0492fSopenharmony_ci * @brief for parameter get, static handle
145d9f0492fSopenharmony_ci *
146d9f0492fSopenharmony_ci * @param state
147d9f0492fSopenharmony_ci */
148d9f0492fSopenharmony_cistatic void BMCachedParameterGetChangedStatic(benchmark::State &state)
149d9f0492fSopenharmony_ci{
150d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
151d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
152d9f0492fSopenharmony_ci        return;
153d9f0492fSopenharmony_ci    }
154d9f0492fSopenharmony_ci
155d9f0492fSopenharmony_ci    for (auto _ : state) {
156d9f0492fSopenharmony_ci        static CachedHandle handle = CachedParameterCreate(
157d9f0492fSopenharmony_ci            g_localParamTester->names[TestRandom() % g_maxCount], "xxxxxx");
158d9f0492fSopenharmony_ci        int changed = 0;
159d9f0492fSopenharmony_ci        benchmark::DoNotOptimize(CachedParameterGetChanged(handle, &changed));
160d9f0492fSopenharmony_ci    }
161d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
162d9f0492fSopenharmony_ci}
163d9f0492fSopenharmony_ci
164d9f0492fSopenharmony_ci/**
165d9f0492fSopenharmony_ci * @brief for parameter get, global handle
166d9f0492fSopenharmony_ci *
167d9f0492fSopenharmony_ci * @param state
168d9f0492fSopenharmony_ci */
169d9f0492fSopenharmony_cistatic void BMCachedParameterGetChangedGlobal(benchmark::State &state)
170d9f0492fSopenharmony_ci{
171d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
172d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
173d9f0492fSopenharmony_ci        return;
174d9f0492fSopenharmony_ci    }
175d9f0492fSopenharmony_ci
176d9f0492fSopenharmony_ci    CachedHandle handle = CachedParameterCreate(g_localParamTester->names[TestRandom() % g_maxCount], "xxxxxxxxx");
177d9f0492fSopenharmony_ci    for (auto _ : state) {
178d9f0492fSopenharmony_ci        int changed = 0;
179d9f0492fSopenharmony_ci        benchmark::DoNotOptimize(CachedParameterGetChanged(handle, &changed));
180d9f0492fSopenharmony_ci    }
181d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
182d9f0492fSopenharmony_ci}
183d9f0492fSopenharmony_ci
184d9f0492fSopenharmony_ci/**
185d9f0492fSopenharmony_ci * @brief for parameter get, global handle
186d9f0492fSopenharmony_ci *
187d9f0492fSopenharmony_ci * @param state
188d9f0492fSopenharmony_ci */
189d9f0492fSopenharmony_cistatic void BMCachedParameterGetChangedGlobal2(benchmark::State &state)
190d9f0492fSopenharmony_ci{
191d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
192d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
193d9f0492fSopenharmony_ci        return;
194d9f0492fSopenharmony_ci    }
195d9f0492fSopenharmony_ci
196d9f0492fSopenharmony_ci    CachedHandle handle = nullptr;
197d9f0492fSopenharmony_ci    for (auto _ : state) {
198d9f0492fSopenharmony_ci        if (handle == nullptr) {
199d9f0492fSopenharmony_ci            handle = CachedParameterCreate(g_localParamTester->names[TestRandom() % g_maxCount], "xxxxxxxxx");
200d9f0492fSopenharmony_ci        }
201d9f0492fSopenharmony_ci        int changed = 0;
202d9f0492fSopenharmony_ci        benchmark::DoNotOptimize(CachedParameterGetChanged(handle, &changed));
203d9f0492fSopenharmony_ci    }
204d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
205d9f0492fSopenharmony_ci}
206d9f0492fSopenharmony_ci
207d9f0492fSopenharmony_ci/**
208d9f0492fSopenharmony_ci * @brief for get
209d9f0492fSopenharmony_ci * data exist
210d9f0492fSopenharmony_ci *
211d9f0492fSopenharmony_ci * @param state
212d9f0492fSopenharmony_ci */
213d9f0492fSopenharmony_cistatic void BMSystemReadParam(benchmark::State &state)
214d9f0492fSopenharmony_ci{
215d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
216d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
217d9f0492fSopenharmony_ci        return;
218d9f0492fSopenharmony_ci    }
219d9f0492fSopenharmony_ci    {
220d9f0492fSopenharmony_ci        char value[PARAM_VALUE_LEN_MAX] = {0};
221d9f0492fSopenharmony_ci        uint32_t len = PARAM_VALUE_LEN_MAX;
222d9f0492fSopenharmony_ci        SystemReadParam(g_localParamTester->names[TestRandom() % g_maxCount], value, &len);
223d9f0492fSopenharmony_ci    }
224d9f0492fSopenharmony_ci    for (auto _ : state) {
225d9f0492fSopenharmony_ci        char value[PARAM_VALUE_LEN_MAX] = {0};
226d9f0492fSopenharmony_ci        uint32_t len = PARAM_VALUE_LEN_MAX;
227d9f0492fSopenharmony_ci        SystemReadParam(g_localParamTester->names[TestRandom() % g_maxCount], value, &len);
228d9f0492fSopenharmony_ci    }
229d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
230d9f0492fSopenharmony_ci}
231d9f0492fSopenharmony_ci
232d9f0492fSopenharmony_ci/**
233d9f0492fSopenharmony_ci * @brief for get
234d9f0492fSopenharmony_ci * data not exist
235d9f0492fSopenharmony_ci *
236d9f0492fSopenharmony_ci * @param state
237d9f0492fSopenharmony_ci */
238d9f0492fSopenharmony_cistatic void BMSystemReadParam_none(benchmark::State &state)
239d9f0492fSopenharmony_ci{
240d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
241d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
242d9f0492fSopenharmony_ci        return;
243d9f0492fSopenharmony_ci    }
244d9f0492fSopenharmony_ci    {
245d9f0492fSopenharmony_ci        char value[PARAM_VALUE_LEN_MAX] = {0};
246d9f0492fSopenharmony_ci        uint32_t len = PARAM_VALUE_LEN_MAX;
247d9f0492fSopenharmony_ci        SystemReadParam("test.aaa.aaa.aaa", value, &len);
248d9f0492fSopenharmony_ci    }
249d9f0492fSopenharmony_ci    for (auto _ : state) {
250d9f0492fSopenharmony_ci        char value[PARAM_VALUE_LEN_MAX] = {0};
251d9f0492fSopenharmony_ci        uint32_t len = PARAM_VALUE_LEN_MAX;
252d9f0492fSopenharmony_ci        SystemReadParam("test.aaa.aaa.aaa", value, &len);
253d9f0492fSopenharmony_ci    }
254d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
255d9f0492fSopenharmony_ci}
256d9f0492fSopenharmony_ci
257d9f0492fSopenharmony_ci/**
258d9f0492fSopenharmony_ci * @brief for find
259d9f0492fSopenharmony_ci *
260d9f0492fSopenharmony_ci * @param state
261d9f0492fSopenharmony_ci */
262d9f0492fSopenharmony_cistatic void BMSystemFindParameter(benchmark::State &state)
263d9f0492fSopenharmony_ci{
264d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
265d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
266d9f0492fSopenharmony_ci        return;
267d9f0492fSopenharmony_ci    }
268d9f0492fSopenharmony_ci
269d9f0492fSopenharmony_ci    for (auto _ : state) {
270d9f0492fSopenharmony_ci        ParamHandle handle = 0;
271d9f0492fSopenharmony_ci        SystemFindParameter(g_localParamTester->names[TestRandom() % g_maxCount], &handle);
272d9f0492fSopenharmony_ci    }
273d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
274d9f0492fSopenharmony_ci}
275d9f0492fSopenharmony_ci
276d9f0492fSopenharmony_ci/**
277d9f0492fSopenharmony_ci * @brief for find, and read value
278d9f0492fSopenharmony_ci *
279d9f0492fSopenharmony_ci * @param state
280d9f0492fSopenharmony_ci */
281d9f0492fSopenharmony_cistatic void BMSystemGetParameterValue(benchmark::State &state)
282d9f0492fSopenharmony_ci{
283d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
284d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
285d9f0492fSopenharmony_ci        return;
286d9f0492fSopenharmony_ci    }
287d9f0492fSopenharmony_ci
288d9f0492fSopenharmony_ci    ParamHandle *handle = new ParamHandle[g_maxCount];
289d9f0492fSopenharmony_ci    for (int i = 0; i < g_maxCount; ++i) {
290d9f0492fSopenharmony_ci        SystemFindParameter(g_localParamTester->names[TestRandom() % g_maxCount], &handle[i]);
291d9f0492fSopenharmony_ci    }
292d9f0492fSopenharmony_ci
293d9f0492fSopenharmony_ci    int i = 0;
294d9f0492fSopenharmony_ci    char value[PARAM_VALUE_LEN_MAX];
295d9f0492fSopenharmony_ci    for (auto _ : state) {
296d9f0492fSopenharmony_ci        uint32_t len = PARAM_VALUE_LEN_MAX;
297d9f0492fSopenharmony_ci        SystemGetParameterValue(handle[i], value, &len);
298d9f0492fSopenharmony_ci        i = (i + 1) % g_maxCount;
299d9f0492fSopenharmony_ci    }
300d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
301d9f0492fSopenharmony_ci    delete[] handle;
302d9f0492fSopenharmony_ci}
303d9f0492fSopenharmony_ci
304d9f0492fSopenharmony_ci/**
305d9f0492fSopenharmony_ci * @brief for find, and read commit id
306d9f0492fSopenharmony_ci *
307d9f0492fSopenharmony_ci * @param state
308d9f0492fSopenharmony_ci */
309d9f0492fSopenharmony_cistatic void BMSystemGetParameterCommitId(benchmark::State &state)
310d9f0492fSopenharmony_ci{
311d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
312d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
313d9f0492fSopenharmony_ci        return;
314d9f0492fSopenharmony_ci    }
315d9f0492fSopenharmony_ci
316d9f0492fSopenharmony_ci    ParamHandle *handle = new ParamHandle[g_maxCount];
317d9f0492fSopenharmony_ci    for (int i = 0; i < g_maxCount; ++i) {
318d9f0492fSopenharmony_ci        SystemFindParameter(g_localParamTester->names[TestRandom() % g_maxCount], &handle[i]);
319d9f0492fSopenharmony_ci    }
320d9f0492fSopenharmony_ci
321d9f0492fSopenharmony_ci    int i = 0;
322d9f0492fSopenharmony_ci    for (auto _ : state) {
323d9f0492fSopenharmony_ci        uint32_t commitId = 0;
324d9f0492fSopenharmony_ci        SystemGetParameterCommitId(handle[i], &commitId);
325d9f0492fSopenharmony_ci        i = (i + 1) % g_maxCount;
326d9f0492fSopenharmony_ci    }
327d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
328d9f0492fSopenharmony_ci    delete[] handle;
329d9f0492fSopenharmony_ci}
330d9f0492fSopenharmony_ci
331d9f0492fSopenharmony_cistatic void BMTestRandom(benchmark::State &state)
332d9f0492fSopenharmony_ci{
333d9f0492fSopenharmony_ci    if (g_localParamTester == nullptr || !g_localParamTester->valid) {
334d9f0492fSopenharmony_ci        fprintf(stderr, "Invalid nprops %d \n", g_maxCount);
335d9f0492fSopenharmony_ci        return;
336d9f0492fSopenharmony_ci    }
337d9f0492fSopenharmony_ci
338d9f0492fSopenharmony_ci    for (auto _ : state) {
339d9f0492fSopenharmony_ci        benchmark::DoNotOptimize(TestRandom());
340d9f0492fSopenharmony_ci    }
341d9f0492fSopenharmony_ci    state.SetItemsProcessed(state.iterations());
342d9f0492fSopenharmony_ci}
343d9f0492fSopenharmony_ci
344d9f0492fSopenharmony_ciINIT_BENCHMARK(BMCachedParameterGet);
345d9f0492fSopenharmony_ciINIT_BENCHMARK(BMCachedParameterGetChangedStatic);
346d9f0492fSopenharmony_ciINIT_BENCHMARK(BMCachedParameterGetChangedGlobal);
347d9f0492fSopenharmony_ciINIT_BENCHMARK(BMCachedParameterGetChangedGlobal2);
348d9f0492fSopenharmony_ci
349d9f0492fSopenharmony_ciINIT_BENCHMARK(BMSystemReadParam);
350d9f0492fSopenharmony_ciINIT_BENCHMARK(BMSystemReadParam_none);
351d9f0492fSopenharmony_ciINIT_BENCHMARK(BMSystemFindParameter);
352d9f0492fSopenharmony_ciINIT_BENCHMARK(BMSystemGetParameterValue);
353d9f0492fSopenharmony_ciINIT_BENCHMARK(BMSystemGetParameterCommitId);
354d9f0492fSopenharmony_ciINIT_BENCHMARK(BMTestRandom);
355