/*
* Copyright 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 "ProtoFuzzerStats.h"
#include <iomanip>
#include <iostream>
#include <map>
#include <sstream>
using std::endl;
using std::map;
using std::string;
using std::unordered_map;
namespace android {
namespace vts {
namespace fuzzer {
void ProtoFuzzerStats::RegisterTouch(string iface_name, string func_name) {
// Update the touch count for the full function name.
string key = iface_name + "::" + func_name;
touch_count_[key]++;
// Record that this interface has been touched.
touched_ifaces_.insert(std::move(iface_name));
}
string ProtoFuzzerStats::StatsString() const {
std::map<string, uint64_t> ordered_result{touch_count_.cbegin(),
touch_count_.cend()};
std::stringstream ss{};
ss << "HAL api function touch count: " << endl;
for (const auto &entry : ordered_result) {
ss << std::left << std::setfill(' ') << std::setw(40) << entry.first
<< std::setw(40) << entry.second << endl;
}
ss << endl;
return ss.str();
}
} // namespace fuzzer
} // namespace vts
} // namespace android