void printTopFuncs() { if (!nTopFuncs) return; TransToFuncMapper funcMapper(g_transData); PerfEventsMap<FuncId> funcPerfEvents = transPerfEvents.mapTo(funcMapper); funcPerfEvents.printEventsSummary(sortBy, "FuncId", nTopFuncs, verboseStats, helpersMinPercentage); }
void printTopTrans() { if (!nTopTrans) return; // The summary currently includes all translations, so it's misleading // if we're filtering a specific kind of translations or address range. // It also doesn't sort by density, so do print it if sortByDensity is set. if (kindFilter == "all" && minAddr == 0 && maxAddr == (TCA)-1 && !sortByDensity) { transPerfEvents.printEventsSummary(sortBy, "TransId", nTopTrans, verboseStats, helpersMinPercentage); } // Sort and print the top translations. std::vector<TransID> transIds; for (TransID t = 0; t < NTRANS; t++) { if (TREC(t)->isValid() && (kindFilter == "all" || kindFilter == show(TREC(t)->kind).c_str()) && ((minAddr <= TREC(t)->aStart && TREC(t)->aStart <= maxAddr) || (minAddr <= TREC(t)->acoldStart && TREC(t)->acoldStart <= maxAddr))) { transIds.push_back(t); } } CompTrans compTrans(transPerfEvents, sortBy); sort(transIds.begin(), transIds.end(), compTrans); size_t nPrint = nTopTrans; if (transIds.size() < nTopTrans) { fprintf(stderr, "Warning: too few translations selected (%lu)\n", transIds.size()); nPrint = transIds.size(); } for (size_t i = 0; i < nPrint; i++) printTrans(transIds[i]); }
void printBytecodeStats(const OfflineTransData* tdata, const PerfEventsMap<TCA>& events, PerfEventType etype) { if (!g_repo) error("printBytecodeStats: null repo"); if (!tdata) error("printBytecodeStats: null g_transData"); AddrToBcMapper bcMapper(tdata); PerfEventsMap<ExtOpcode> bcPerfEvents = events.mapTo(bcMapper); std::map<ExtOpcode,std::string> opcodeToName; PerfEventsMap<ExtOpcode>::const_iterator it; for (it = bcPerfEvents.begin(); it != bcPerfEvents.end(); it++) { opcodeToName[it->first] = extOpcodeToString(it->first); } bcPerfEvents.printEventsSummary(etype, "Opcode", PerfEventsMap<ExtOpcode>::kAllEntries, verboseStats, helpersMinPercentage, opcodeToName); }