#ifndef wasm_tools_wasm_split_instrumenter_h
#define wasm_tools_wasm_split_instrumenter_h
#include "pass.h"
#include "split-options.h"
#include "wasm.h"
namespace wasm {
struct InstrumenterConfig {
Name importNamespace = "env";
Name secondaryMemoryName = "profile-data";
WasmSplitOptions::StorageKind storageKind =
WasmSplitOptions::StorageKind::InGlobals;
std::string profileExport = DEFAULT_PROFILE_EXPORT;
};
struct Instrumenter : public Pass {
Module* wasm = nullptr;
const InstrumenterConfig& config;
uint64_t moduleHash;
Name counterGlobal;
std::vector<Name> functionGlobals;
Name secondaryMemory;
Instrumenter(const InstrumenterConfig& config, uint64_t moduleHash);
void run(Module* wasm) override;
private:
void addGlobals(size_t numFuncs);
void addSecondaryMemory(size_t numFuncs);
void instrumentFuncs();
void addProfileExport(size_t numFuncs);
};
}
#endif