123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <iostream>
- #include <string>
- #include <tuple>
- #include <vector>
- #include <android-base/test_utils.h>
- #include <benchmark/benchmark.h>
- #include <ziparchive/zip_archive.h>
- #include <ziparchive/zip_archive_stream_entry.h>
- #include <ziparchive/zip_writer.h>
- static TemporaryFile* CreateZip() {
- TemporaryFile* result = new TemporaryFile;
- FILE* fp = fdopen(result->fd, "w");
- ZipWriter writer(fp);
- std::string lastName = "file";
- for (size_t i = 0; i < 1000; i++) {
- // Make file names longer and longer.
- lastName = lastName + std::to_string(i);
- writer.StartEntry(lastName.c_str(), ZipWriter::kCompress);
- writer.WriteBytes("helo", 4);
- writer.FinishEntry();
- }
- writer.Finish();
- fclose(fp);
- return result;
- }
- static void FindEntry_no_match(benchmark::State& state) {
- // Create a temporary zip archive.
- std::unique_ptr<TemporaryFile> temp_file(CreateZip());
- ZipArchiveHandle handle;
- ZipEntry data;
- // In order to walk through all file names in the archive, look for a name
- // that does not exist in the archive.
- ZipString name("thisFileNameDoesNotExist");
- // Start the benchmark.
- while (state.KeepRunning()) {
- OpenArchive(temp_file->path, &handle);
- FindEntry(handle, name, &data);
- CloseArchive(handle);
- }
- }
- BENCHMARK(FindEntry_no_match);
- static void Iterate_all_files(benchmark::State& state) {
- std::unique_ptr<TemporaryFile> temp_file(CreateZip());
- ZipArchiveHandle handle;
- void* iteration_cookie;
- ZipEntry data;
- ZipString name;
- while (state.KeepRunning()) {
- OpenArchive(temp_file->path, &handle);
- StartIteration(handle, &iteration_cookie, nullptr, nullptr);
- while (Next(iteration_cookie, &data, &name) == 0) {
- }
- EndIteration(iteration_cookie);
- CloseArchive(handle);
- }
- }
- BENCHMARK(Iterate_all_files);
- BENCHMARK_MAIN();
|