108bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka/*
208bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka * Copyright (C) 2016 The Android Open Source Project
308bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka *
408bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License");
508bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka * you may not use this file except in compliance with the License.
608bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka * You may obtain a copy of the License at
708bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka *
808bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka *      http://www.apache.org/licenses/LICENSE-2.0
908bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka *
1008bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka * Unless required by applicable law or agreed to in writing, software
1108bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS,
1208bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1308bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka * See the License for the specific language governing permissions and
1408bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka * limitations under the License.
1508bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka */
161d461589869ee5b7102f96271b0ef0a776ab513cSeigo Nonaka#include <fcntl.h>
171d461589869ee5b7102f96271b0ef0a776ab513cSeigo Nonaka#include <sys/mman.h>
186c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka#include <sys/stat.h>
1908bfef04afed092b6a6a8a5fc5d1e1165c5304aeSeigo Nonaka
201d461589869ee5b7102f96271b0ef0a776ab513cSeigo Nonaka#include <benchmark/benchmark.h>
210ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka#include <cutils/log.h>
220ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka#include <unicode/uclean.h>
230ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka#include <unicode/udata.h>
240ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
250ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonakaint main(int argc, char** argv) {
260ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    const char* fn = "/system/usr/icu/" U_ICUDATA_NAME ".dat";
270ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    int fd = open(fn, O_RDONLY);
280ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    LOG_ALWAYS_FATAL_IF(fd == -1);
290ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    struct stat st;
300ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    LOG_ALWAYS_FATAL_IF(fstat(fd, &st) != 0);
310ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    void* data = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
320ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
330ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    UErrorCode errorCode = U_ZERO_ERROR;
340ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    udata_setCommonData(data, &errorCode);
350ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    LOG_ALWAYS_FATAL_IF(U_FAILURE(errorCode));
360ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    u_init(&errorCode);
370ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    LOG_ALWAYS_FATAL_IF(U_FAILURE(errorCode));
380ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
390ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    benchmark::Initialize(&argc, argv);
400ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    benchmark::RunSpecifiedBenchmarks();
410ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka
420ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    u_cleanup();
430ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka    return 0;
440ca4fb6d44160245ad2333851ac18a13fc553ec9Seigo Nonaka}
45