10ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka/*
20ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka * Copyright (C) 2016 The Android Open Source Project
30ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka *
40ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License");
50ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka * you may not use this file except in compliance with the License.
60ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka * You may obtain a copy of the License at
70ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka *
80ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka *      http://www.apache.org/licenses/LICENSE-2.0
90ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka *
100ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka * Unless required by applicable law or agreed to in writing, software
110ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS,
120ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka * See the License for the specific language governing permissions and
140ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka * limitations under the License.
150ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka */
160ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka#include <benchmark/benchmark.h>
170ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
180ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka#include "minikin/WordBreaker.h"
190ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka#include "util/UnicodeUtils.h"
200ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
210ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonakanamespace minikin {
220ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
230ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonakastatic void BM_WordBreaker_English(benchmark::State& state) {
240ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    const char* kLoremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do "
250ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka        "eiusmod tempor incididunt ut labore et dolore magna aliqua.";
260ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
270ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    WordBreaker wb;
280ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    wb.setLocale(icu::Locale::getEnglish());
290ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    std::vector<uint16_t> text = utf8ToUtf16(kLoremIpsum);
300ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    while (state.KeepRunning()) {
310ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka        wb.setText(text.data(), text.size());
320ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka        while (wb.next() != -1) {}
330ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    }
340ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka}
350ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo NonakaBENCHMARK(BM_WordBreaker_English);
360ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
370ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka// TODO: Add more tests for other languages.
380ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
390ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka}  // namespace minikin
40