diff --git a/lib/Fuzzer/FuzzerMerge.cpp b/lib/Fuzzer/FuzzerMerge.cpp index 344d7a83959..5c17f66940a 100644 --- a/lib/Fuzzer/FuzzerMerge.cpp +++ b/lib/Fuzzer/FuzzerMerge.cpp @@ -17,6 +17,7 @@ #include #include +#include #include namespace fuzzer { @@ -88,7 +89,7 @@ bool Merger::Parse(std::istream &IS, bool ParseCoverage) { assert(ExpectedStartMarker < Files.size()); ExpectedStartMarker++; } else if (Marker == "DONE") { - // DONE FILE_SIZE COV1 COV2 COV3 ... + // DONE FILE_ID COV1 COV2 COV3 ... size_t CurrentFileIdx = N; if (CurrentFileIdx != LastSeenStartMarker) return false; @@ -111,6 +112,13 @@ bool Merger::Parse(std::istream &IS, bool ParseCoverage) { return true; } +size_t Merger::ApproximateMemoryConsumption() const { + size_t Res = 0; + for (const auto &F: Files) + Res += sizeof(F) + F.Features.size() * sizeof(F.Features[0]); + return Res; +} + // Decides which files need to be merged (add thost to NewFiles). // Returns the number of new features added. size_t Merger::Merge(std::vector *NewFiles) { @@ -262,6 +270,8 @@ void Fuzzer::CrashResistantMerge(const std::vector &Args, IF.seekg(0, IF.beg); M.ParseOrExit(IF, true); IF.close(); + Printf("MERGE-OUTER: consumed %zd bytes to parse the control file\n", + M.ApproximateMemoryConsumption()); std::vector NewFiles; size_t NumNewFeatures = M.Merge(&NewFiles); Printf("MERGE-OUTER: %zd new files with %zd new features added\n", diff --git a/lib/Fuzzer/FuzzerMerge.h b/lib/Fuzzer/FuzzerMerge.h index 8a2fe5d74f8..4cef9c47bb1 100644 --- a/lib/Fuzzer/FuzzerMerge.h +++ b/lib/Fuzzer/FuzzerMerge.h @@ -43,7 +43,6 @@ #include "FuzzerDefs.h" #include -#include namespace fuzzer { @@ -63,6 +62,7 @@ struct Merger { bool Parse(const std::string &Str, bool ParseCoverage); void ParseOrExit(std::istream &IS, bool ParseCoverage); size_t Merge(std::vector *NewFiles); + size_t ApproximateMemoryConsumption() const; }; } // namespace fuzzer