@@ -209,7 +209,7 @@ protected FileRealizationMode GetFileRealizationMode(string path)
209209 => IsDuplicateIdenticalOutputPath ( _pluginLogger ! , path ) ? FileRealizationMode . CopyNoVerify : FileRealizationMode . Any ;
210210
211211 public override Task BeginBuildAsync ( CacheContext context , PluginLoggerBase logger , CancellationToken cancellationToken )
212- => TimeAndLogAsync ( logger , ( ) => BeginBuildInnerAsync ( context , logger , cancellationToken ) ) ;
212+ => TimeAndLogAsync ( logger , ( ) => BeginBuildInnerAsync ( context , logger , cancellationToken ) , cancellationToken ) ;
213213
214214 private async Task BeginBuildInnerAsync ( CacheContext context , PluginLoggerBase logger , CancellationToken cancellationToken )
215215 {
@@ -341,7 +341,7 @@ private async Task BeginBuildInnerAsync(CacheContext context, PluginLoggerBase l
341341 }
342342
343343 public override Task EndBuildAsync ( PluginLoggerBase logger , CancellationToken cancellationToken )
344- => TimeAndLogAsync ( logger , ( ) => EndBuildInnerAsync ( logger , cancellationToken ) ) ;
344+ => TimeAndLogAsync ( logger , ( ) => EndBuildInnerAsync ( logger , cancellationToken ) , cancellationToken ) ;
345345
346346 private async Task EndBuildInnerAsync ( PluginLoggerBase logger , CancellationToken cancellationToken )
347347 {
@@ -358,10 +358,11 @@ private async Task EndBuildInnerAsync(PluginLoggerBase logger, CancellationToken
358358 }
359359
360360 public override Task < CacheResult > GetCacheResultAsync ( BuildRequestData buildRequest , PluginLoggerBase logger , CancellationToken cancellationToken )
361- => TimeAndLogAsync (
362- logger ,
363- ( ) => GetCacheResultInnerAsync ( buildRequest , logger , cancellationToken ) ,
364- context : buildRequest . ProjectFullPath ) ;
361+ => TimeAndLogAsync (
362+ logger ,
363+ ( ) => GetCacheResultInnerAsync ( buildRequest , logger , cancellationToken ) ,
364+ cancellationToken ,
365+ context : buildRequest . ProjectFullPath ) ;
365366
366367 private async Task < CacheResult > GetCacheResultInnerAsync ( BuildRequestData buildRequest , PluginLoggerBase logger , CancellationToken cancellationToken )
367368 {
@@ -466,49 +467,50 @@ private async Task<CacheResult> GetCacheResultSingleAsync(NodeContext nodeContex
466467 }
467468
468469 public override void HandleFileAccess ( FileAccessContext fileAccessContext , FileAccessData fileAccessData )
469- => TimeAndLog ( _pluginLogger , ( ) => HandleFileAccessInner ( fileAccessContext , fileAccessData ) ) ;
470+ {
471+ if ( Initialized )
472+ {
473+ TimeAndLog ( _pluginLogger , ( ) => HandleFileAccessInner ( fileAccessContext , fileAccessData ) ) ;
474+ }
475+ }
470476
471477 private void HandleFileAccessInner ( FileAccessContext fileAccessContext , FileAccessData fileAccessData )
472478 {
473479 _hasHadFileAccessReport = true ;
474480
475- if ( ! Initialized )
476- {
477- return ;
478- }
479-
480481 NodeContext ? nodeContext = GetNodeContext ( fileAccessContext ) ;
481482 if ( nodeContext == null )
482483 {
483484 return ;
484485 }
485486
486- _fileAccessRepository . AddFileAccess ( nodeContext , fileAccessData ) ;
487+ _fileAccessRepository ! . AddFileAccess ( nodeContext , fileAccessData ) ;
487488 }
488489
489490 public override void HandleProcess ( FileAccessContext fileAccessContext , ProcessData processData )
490- => TimeAndLog ( _pluginLogger , ( ) => HandleProcessInner ( fileAccessContext , processData ) ) ;
491-
492- private void HandleProcessInner ( FileAccessContext fileAccessContext , ProcessData processData )
493491 {
494- if ( ! Initialized )
492+ if ( Initialized )
495493 {
496- return ;
494+ TimeAndLog ( _pluginLogger , ( ) => HandleProcessInner ( fileAccessContext , processData ) ) ;
497495 }
496+ }
498497
498+ private void HandleProcessInner ( FileAccessContext fileAccessContext , ProcessData processData )
499+ {
499500 NodeContext ? nodeContext = GetNodeContext ( fileAccessContext ) ;
500501 if ( nodeContext == null )
501502 {
502503 return ;
503504 }
504505
505- _fileAccessRepository . AddProcess ( nodeContext , processData ) ;
506+ _fileAccessRepository ! . AddProcess ( nodeContext , processData ) ;
506507 }
507508
508509 public override Task HandleProjectFinishedAsync ( FileAccessContext fileAccessContext , BuildResult buildResult , PluginLoggerBase logger , CancellationToken cancellationToken )
509510 => TimeAndLogAsync (
510511 logger ,
511512 ( ) => HandleProjectFinishedInnerAsync ( fileAccessContext , buildResult , logger , cancellationToken ) ,
513+ cancellationToken ,
512514 context : fileAccessContext . ProjectFullPath ) ;
513515
514516 private async Task HandleProjectFinishedInnerAsync ( FileAccessContext fileAccessContext , BuildResult buildResult , PluginLoggerBase logger , CancellationToken cancellationToken )
@@ -1195,47 +1197,84 @@ private void CheckForDuplicateOutputs(PluginLoggerBase logger, IReadOnlyDictiona
11951197 }
11961198 }
11971199
1198- private static async Task < T > TimeAndLogAsync < T > ( PluginLoggerBase ? logger , Func < Task < T > > innerAsync , string ? context = null , [ CallerMemberName ] string memberName = "" )
1200+ private static async Task < T > TimeAndLogAsync < T > (
1201+ PluginLoggerBase logger ,
1202+ Func < Task < T > > innerAsync ,
1203+ CancellationToken cancellationToken ,
1204+ string ? context = null ,
1205+ [ CallerMemberName ] string memberName = "" )
11991206 {
12001207 var timer = Stopwatch . StartNew ( ) ;
12011208 try
12021209 {
1203- return await innerAsync ( ) ;
1210+ T result = await innerAsync ( ) ;
1211+
1212+ // only log 1+ second operations to avoid debug spew
1213+ if ( timer . ElapsedMilliseconds > 1000L )
1214+ {
1215+ if ( context == null )
1216+ {
1217+ logger . LogMessage ( $ "{ memberName } succeeded after { timer . ElapsedMilliseconds } ms.") ;
1218+ }
1219+ else
1220+ {
1221+ logger . LogMessage ( $ "{ memberName } ({ context } ) succeeded after { timer . ElapsedMilliseconds } ms.") ;
1222+ }
1223+ }
1224+
1225+ return result ;
1226+ }
1227+ catch ( OperationCanceledException ) when ( cancellationToken . IsCancellationRequested )
1228+ {
1229+ if ( context == null )
1230+ {
1231+ logger . LogMessage ( $ "{ memberName } cancelled after { timer . ElapsedMilliseconds } ms") ;
1232+ }
1233+ else
1234+ {
1235+ logger . LogMessage ( $ "{ memberName } ({ context } ) cancelled after { timer . ElapsedMilliseconds } ms") ;
1236+ }
1237+ throw ;
12041238 }
12051239 catch ( Exception e )
12061240 {
12071241 if ( context == null )
12081242 {
1209- logger ? . LogWarning ( $ "{ memberName } failed after { timer . ElapsedMilliseconds } ms: { e } ") ;
1243+ logger . LogWarning ( $ "{ memberName } failed after { timer . ElapsedMilliseconds } ms: { e } ") ;
12101244 }
12111245 else
12121246 {
1213- logger ? . LogWarning ( $ "{ memberName } ({ context } ) failed after { timer . ElapsedMilliseconds } ms: { e } ") ;
1247+ logger . LogWarning ( $ "{ memberName } ({ context } ) failed after { timer . ElapsedMilliseconds } ms: { e } ") ;
12141248 }
12151249 throw ;
12161250 }
1217- finally
1251+ }
1252+
1253+ private static void TimeAndLog (
1254+ PluginLoggerBase logger ,
1255+ Action inner ,
1256+ [ CallerMemberName ] string memberName = "" )
1257+ {
1258+ var timer = Stopwatch . StartNew ( ) ;
1259+ try
12181260 {
1261+ inner ( ) ;
1262+
12191263 // only log 1+ second operations to avoid debug spew
1220- if ( timer . ElapsedMilliseconds > 1000.0 )
1264+ if ( timer . ElapsedMilliseconds > 1000L )
12211265 {
1222- if ( context == null )
1223- {
1224- logger ? . LogMessage ( $ "{ memberName } succeeded after { timer . ElapsedMilliseconds } ms.") ;
1225- }
1226- else
1227- {
1228- logger ? . LogMessage ( $ "{ memberName } ({ context } ) succeeded after { timer . ElapsedMilliseconds } ms.") ;
1229- }
1266+ logger . LogMessage ( $ "{ memberName } succeeded after { timer . ElapsedMilliseconds } ms.") ;
12301267 }
12311268 }
1269+ catch ( Exception e )
1270+ {
1271+ logger . LogWarning ( $ "{ memberName } failed after { timer . ElapsedMilliseconds } ms: { e } ") ;
1272+ throw ;
1273+ }
12321274 }
12331275
1234- private static Task < int > TimeAndLogAsync ( PluginLoggerBase ? logger , Func < Task > innerAsync , string ? context = null , [ CallerMemberName ] string memberName = "" )
1235- => TimeAndLogAsync ( logger , async ( ) => { await innerAsync ( ) ; return 0 ; } , context , memberName ) ;
1236-
1237- private static void TimeAndLog ( PluginLoggerBase ? logger , Action inner , string ? context = null , [ CallerMemberName ] string memberName = "" )
1238- => TimeAndLogAsync ( logger , ( ) => { inner ( ) ; return Task . CompletedTask ; } , context , memberName ) . GetAwaiter ( ) . GetResult ( ) ;
1276+ private static Task < int > TimeAndLogAsync ( PluginLoggerBase logger , Func < Task > innerAsync , CancellationToken cancellationToken , string ? context = null , [ CallerMemberName ] string memberName = "" )
1277+ => TimeAndLogAsync ( logger , async ( ) => { await innerAsync ( ) ; return 0 ; } , cancellationToken , context , memberName ) ;
12391278}
12401279
12411280public static class ProjectGraphNodeExtensions
0 commit comments