summaryrefslogtreecommitdiff
path: root/src/passes/Metrics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/Metrics.cpp')
-rw-r--r--src/passes/Metrics.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/passes/Metrics.cpp b/src/passes/Metrics.cpp
index 81706042b..5176f8762 100644
--- a/src/passes/Metrics.cpp
+++ b/src/passes/Metrics.cpp
@@ -46,25 +46,26 @@ struct Metrics : public WalkerPass<PostWalker<Metrics, UnifiedExpressionVisitor<
}
void doWalkModule(Module* module) {
+ ImportInfo imports(*module);
+
// global things
for (auto& curr : module->functionTypes) {
visitFunctionType(curr.get());
}
- for (auto& curr : module->imports) {
- visitImport(curr.get());
- }
for (auto& curr : module->exports) {
visitExport(curr.get());
}
- for (auto& curr : module->globals) {
- walkGlobal(curr.get());
- }
+ ModuleUtils::iterDefinedGlobals(*module, [&](Global* curr) {
+ walkGlobal(curr);
+ });
walkTable(&module->table);
walkMemory(&module->memory);
+ // add imports
+ counts["[imports]"] = imports.getNumImports();
// add functions
- counts["[funcs]"] = module->functions.size();
+ counts["[funcs]"] = imports.getNumDefinedFunctions();
// add memory and table
if (module->memory.exists) {
Index size = 0;
@@ -89,14 +90,14 @@ struct Metrics : public WalkerPass<PostWalker<Metrics, UnifiedExpressionVisitor<
WasmBinaryWriter writer(module, buffer);
writer.write();
// print for each function
- for (Index i = 0; i < module->functions.size(); i++) {
- auto* func = module->functions[i].get();
+ Index binaryIndex = 0;
+ ModuleUtils::iterDefinedFunctions(*module, [&](Function* func) {
counts.clear();
walkFunction(func);
counts["[vars]"] = func->getNumVars();
- counts["[binary-bytes]"] = writer.tableOfContents.functionBodies[i].size;
+ counts["[binary-bytes]"] = writer.tableOfContents.functionBodies[binaryIndex++].size;
printCounts(std::string("func: ") + func->name.str);
- }
+ });
// print for each export how much code size is due to it, i.e.,
// how much the module could shrink without it.
auto sizeAfterGlobalCleanup = [](Module* module) {
@@ -138,10 +139,10 @@ struct Metrics : public WalkerPass<PostWalker<Metrics, UnifiedExpressionVisitor<
} else {
// add function info
size_t vars = 0;
- for (auto& func : module->functions) {
- walkFunction(func.get());
+ ModuleUtils::iterDefinedFunctions(*module, [&](Function* func) {
+ walkFunction(func);
vars += func->getNumVars();
- }
+ });
counts["[vars]"] = vars;
// print
printCounts("total");