181a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik/*
281a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik * Copyright (C) 2015 The Android Open Source Project
381a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik *
481a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik * Licensed under the Apache License, Version 2.0 (the "License");
581a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik * you may not use this file except in compliance with the License.
681a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik * You may obtain a copy of the License at
781a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik *
881a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik *      http://www.apache.org/licenses/LICENSE-2.0
981a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik *
1081a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik * Unless required by applicable law or agreed to in writing, software
1181a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik * distributed under the License is distributed on an "AS IS" BASIS,
1281a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1381a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik * See the License for the specific language governing permissions and
1481a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik * limitations under the License.
1581a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik */
1681a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik
170418afa362630e69bd853121770b115750ee46a4John Reck#include <benchmark/benchmark.h>
1881a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik
1981a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik#include "utils/LinearAllocator.h"
2081a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik
2181a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik#include <vector>
2281a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik
2381a1d2a15927b06b84359f839ab03ac8a20970bdChris Craikusing namespace android;
2481a1d2a15927b06b84359f839ab03ac8a20970bdChris Craikusing namespace android::uirenderer;
2581a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik
260418afa362630e69bd853121770b115750ee46a4John Reckstatic void BM_LinearStdAllocator_vectorBaseline(benchmark::State& state) {
270418afa362630e69bd853121770b115750ee46a4John Reck    while (state.KeepRunning()) {
2881a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik        std::vector<char> v;
2981a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik        for (int j = 0; j < 200; j++) {
3081a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik            v.push_back(j);
3181a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik        }
320418afa362630e69bd853121770b115750ee46a4John Reck        benchmark::DoNotOptimize(&v);
3381a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik    }
3481a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik}
350418afa362630e69bd853121770b115750ee46a4John ReckBENCHMARK(BM_LinearStdAllocator_vectorBaseline);
3681a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik
370418afa362630e69bd853121770b115750ee46a4John Reckstatic void BM_LinearStdAllocator_vector(benchmark::State& state) {
380418afa362630e69bd853121770b115750ee46a4John Reck    while (state.KeepRunning()) {
3981a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik        LinearAllocator la;
4081a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik        LinearStdAllocator<void*> stdAllocator(la);
4181a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik        std::vector<char, LinearStdAllocator<char> > v(stdAllocator);
4281a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik        for (int j = 0; j < 200; j++) {
4381a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik            v.push_back(j);
4481a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik        }
450418afa362630e69bd853121770b115750ee46a4John Reck        benchmark::DoNotOptimize(&v);
4681a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik    }
4781a1d2a15927b06b84359f839ab03ac8a20970bdChris Craik}
480418afa362630e69bd853121770b115750ee46a4John ReckBENCHMARK(BM_LinearStdAllocator_vector);
49