#pragma once #include #include #include #include #include #include "ProfileLineEventArgs.h" #include "ProfileScopeEventArgs.h" namespace EightBit { class Disassembly; class MOS6502; class Symbols; class Profiler { public: std::array instructionCounts; std::array addressProfiles; std::array addressCounts; std::array addressScopes; std::map scopeCycles; MOS6502& processor; Disassembly& disassembler; const Symbols& symbols; Profiler(MOS6502& processor, Disassembly& disassembler, Symbols& symbols); Signal StartingOutput; Signal FinishedOutput; Signal StartingLineOutput; Signal FinishedLineOutput; Signal EmitLine; Signal StartingScopeOutput; Signal FinishedScopeOutput; Signal EmitScope; void addInstruction(uint8_t instruction); void addAddress(uint16_t address, int cycles); void Generate(); private: void EmitProfileInformation(); void BuildAddressScopes(); }; }