/* * 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 #include #include #include #include #include #include #include #include #include #include #include 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 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 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()