@@ -18,6 +18,9 @@ namespace Clang
18
18
19
19
namespace Utils
20
20
{
21
+ // -----------------------------------------------------------------------------------------------------------
22
+ template <typename T> inline constexpr T Min ( const T a, const T b ) { return a < b ? a : b; }
23
+
21
24
// ------------------------------------------------------------------------------------------
22
25
constexpr size_t StrLength (const char * str)
23
26
{
@@ -275,21 +278,33 @@ namespace Clang
275
278
// -----------------------------------------------------------------------------------------------------------
276
279
void NormalizeStartTimes (const char * path, CompileUnitContext& context, ScoreTimeline& timeline)
277
280
{
278
- TCompileEvents& events = timeline. tracks [ 0 ];
279
-
280
- if (!events. empty () )
281
+ // Retrieve the first event start time
282
+ U32 offset = 0u ;
283
+ for ( size_t i = 0 , sz = timeline. tracks . size (); i < sz; ++i )
281
284
{
282
- const U32 offset = events[0 ].start ;
285
+ const TCompileEvents& events = timeline.tracks [i];
286
+ offset = events.empty () ? offset : Utils::Min ( events[0 ].start , offset);
287
+ }
283
288
284
- // Base the start times on the .json creation time instead of relying on consistent in json wall clock time
285
- const U64 fileEndTime = IO::GetLastWriteTimeInMicros (path);
286
- const U64 fileStartTime = fileEndTime - events[0 ].duration ;
287
- context.startTime [0 ] = fileStartTime + (context.startTime [0 ] - offset);
288
- context.startTime [1 ] = fileStartTime + (context.startTime [1 ] - offset);
289
+ // Offset all events
290
+ if ( offset > 0u )
291
+ {
292
+ for ( size_t i = 0 , sz = timeline.tracks .size (); i < sz; ++i )
293
+ {
294
+ TCompileEvents& events = timeline.tracks [i];
295
+ if ( !events.empty () )
296
+ {
297
+ // Base the start times on the .json creation time instead of relying on consistent in json wall clock time
298
+ const U64 fileEndTime = IO::GetLastWriteTimeInMicros ( path );
299
+ const U64 fileStartTime = fileEndTime - events[ 0 ].duration ;
300
+ context.startTime [ 0 ] = fileStartTime + ( context.startTime [ 0 ] - offset );
301
+ context.startTime [ 1 ] = fileStartTime + ( context.startTime [ 1 ] - offset );
289
302
290
- for (CompileEvent& entry : events)
291
- {
292
- entry.start -= offset;
303
+ for ( CompileEvent& entry : events )
304
+ {
305
+ entry.start -= offset;
306
+ }
307
+ }
293
308
}
294
309
}
295
310
}
0 commit comments