@@ -13,6 +13,11 @@ void MethodInfo::serialize(std::vector<char>& buffer) const {
1313 serializePrimitive (moduleNameLength, buffer);
1414 serializePrimitiveArray (moduleName, moduleNameLength, buffer);
1515}
16+
17+ void MethodInfo::Dispose () {
18+ delete moduleName;
19+ delete assemblyName;
20+ }
1621// endregion
1722
1823// region CoverageRecord
@@ -21,27 +26,31 @@ void CoverageRecord::serialize(std::vector<char>& buffer) const {
2126 serializePrimitive (event, buffer);
2227 serializePrimitive (methodId, buffer);
2328 serializePrimitive (thread, buffer);
29+ serializePrimitive (timestamp, buffer);
2430}
2531// endregion
2632
33+ long long GetMicrosecondTime () {
34+ using namespace std ::chrono;
35+ return duration_cast<microseconds>(system_clock::now ().time_since_epoch ()).count ();
36+ }
37+
2738// region CoverageHistory
2839CoverageHistory::CoverageHistory (OFFSET offset, int methodId) {
2940 auto insertResult = visitedMethods.insert (methodId);
30- LOG ( if (insertResult.second ) {
31- tout << " Visit method: " << methodId;
32- });
33- auto record = new CoverageRecord ({offset, EnterMain, profilerState->threadInfo ->getCurrentThread (), methodId});
41+ if (insertResult.second ) {
42+ LOG ( tout << " Visit method: " << methodId) ;
43+ }
44+ auto record = new CoverageRecord ({offset, EnterMain, profilerState->threadInfo ->getCurrentThread (), methodId, GetMicrosecondTime () });
3445 records.push_back (record);
3546}
3647
3748void CoverageHistory::addCoverage (OFFSET offset, CoverageEvent event, int methodId) {
3849 auto insertResult = visitedMethods.insert (methodId);
39- LOG (
4050 if (insertResult.second ) {
41- tout << " Visit method: " << methodId;
51+ LOG ( tout << " Visit method: " << methodId) ;
4252 }
43- );
44- auto record = new CoverageRecord ({offset, event, profilerState->threadInfo ->getCurrentThread (), methodId});
53+ auto record = new CoverageRecord ({offset, event, profilerState->threadInfo ->getCurrentThread (), methodId, GetMicrosecondTime ()});
4554 records.push_back (record);
4655}
4756
@@ -54,6 +63,8 @@ void CoverageHistory::serialize(std::vector<char>& buffer) const {
5463}
5564
5665CoverageHistory::~CoverageHistory () {
66+ for (auto r : records)
67+ delete r;
5768 records.clear ();
5869}
5970// endregion
@@ -99,6 +110,7 @@ void CoverageTracker::invocationFinished() {
99110 coverage->serialize (buffer);
100111 }
101112
113+ delete coverage;
102114 trackedCoverage->remove ();
103115
104116 serializedCoverageMutex.lock ();
@@ -110,6 +122,7 @@ void CoverageTracker::invocationFinished() {
110122char * CoverageTracker::serializeCoverageReport (size_t * size) {
111123 collectedMethodsMutex.lock ();
112124 serializedCoverageMutex.lock ();
125+ printf (" got locks, converting info\n " );
113126
114127 auto buffer = std::vector<char >();
115128 auto methodsToSerialize = std::vector<std::pair<int , MethodInfo>>();
@@ -126,6 +139,7 @@ char* CoverageTracker::serializeCoverageReport(size_t* size) {
126139 serializePrimitive (el.first , buffer);
127140 el.second .serialize (buffer);
128141 }
142+ printf (" converted methods: %lld\n " , buffer.size ());
129143
130144 auto threadMapping = profilerState->threadTracker ->getMapping ();
131145 for (auto mapping: threadMapping) {
@@ -148,16 +162,25 @@ char* CoverageTracker::serializeCoverageReport(size_t* size) {
148162 serializePrimitiveArray (&serializedCoverage[i][0 ], serializedCoverage[i].size (), buffer);
149163 }
150164
165+ printf (" converted reports: %lld\n " , buffer.size ());
166+
167+ for (auto cov : trackedCoverage->items ())
168+ delete cov.second ;
151169 trackedCoverage->clear ();
152170 serializedCoverage.clear ();
153171 methodsToSerialize.clear ();
154172
155173 serializedCoverageMutex.unlock ();
156174 collectedMethodsMutex.unlock ();
157175
176+ printf (" cleared and unlocked data\n " );
177+
158178 *size = buffer.size ();
159179 char * array = new char [*size];
180+ printf (" successfully allocated\n " );
160181 std::memcpy (array, &buffer[0 ], *size);
182+
183+ printf (" total bytes: %lld" , *size);
161184 return array;
162185}
163186
@@ -179,9 +202,15 @@ void CoverageTracker::clear() {
179202
180203CoverageTracker::~CoverageTracker (){
181204 clear ();
205+ for (int i = 0 ; i < collectedMethods.size (); i++)
206+ collectedMethods[i].Dispose ();
207+ collectedMethods.clear ();
208+ delete trackedCoverage;
182209}
183210
184211void CoverageTracker::invocationAborted () {
212+ auto abortedCov = trackedCoverage->load ();
213+ delete abortedCov;
185214 trackedCoverage->update ([](CoverageHistory *cov) {
186215 return (CoverageHistory*) nullptr ;
187216 });
0 commit comments