@@ -28,8 +28,8 @@ use tokio::time::{Duration, Instant};
2828use tracing:: { Span , field:: Empty , info_span, trace_span} ;
2929use turbo_tasks:: {
3030 CellId , FxDashMap , FxIndexMap , KeyValuePair , RawVc , ReadCellOptions , ReadConsistency ,
31- SessionId , TRANSIENT_TASK_BIT , TaskExecutionReason , TaskId , TraitTypeId , TurboTasksBackendApi ,
32- ValueTypeId ,
31+ ReadOutputOptions , ReadTracking , SessionId , TRANSIENT_TASK_BIT , TaskExecutionReason , TaskId ,
32+ TraitTypeId , TurboTasksBackendApi , ValueTypeId ,
3333 backend:: {
3434 Backend , CachedTaskType , CellContent , TaskExecutionSpec , TransientTaskRoot ,
3535 TransientTaskType , TurboTasksExecutionError , TypedCellContent ,
@@ -458,7 +458,7 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
458458 self : & Arc < Self > ,
459459 task_id : TaskId ,
460460 reader : Option < TaskId > ,
461- consistency : ReadConsistency ,
461+ options : ReadOutputOptions ,
462462 turbo_tasks : & dyn TurboTasksBackendApi < TurboTasksBackend < B > > ,
463463 ) -> Result < Result < RawVc , EventListener > > {
464464 self . assert_not_persistent_calling_transient ( reader, task_id, /* cell_id */ None ) ;
@@ -469,15 +469,16 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
469469 fn listen_to_done_event < B : BackingStorage > (
470470 this : & TurboTasksBackendInner < B > ,
471471 reader : Option < TaskId > ,
472+ tracking : ReadTracking ,
472473 done_event : & Event ,
473474 ) -> EventListener {
474475 done_event. listen_with_note ( move || {
475476 let reader_desc = reader. map ( |r| this. get_task_desc_fn ( r) ) ;
476477 move || {
477478 if let Some ( reader_desc) = reader_desc. as_ref ( ) {
478- format ! ( "try_read_task_output from {}" , reader_desc( ) )
479+ format ! ( "try_read_task_output from {} ({}) " , reader_desc( ) , tracking )
479480 } else {
480- "try_read_task_output (untracked)" . to_string ( )
481+ format ! ( "try_read_task_output ({})" , tracking )
481482 }
482483 }
483484 } )
@@ -487,16 +488,19 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
487488 this : & TurboTasksBackendInner < B > ,
488489 task : & impl TaskGuard ,
489490 reader : Option < TaskId > ,
491+ tracking : ReadTracking ,
490492 ctx : & impl ExecuteContext < ' _ > ,
491493 ) -> Option < std:: result:: Result < std:: result:: Result < RawVc , EventListener > , anyhow:: Error > >
492494 {
493495 match get ! ( task, InProgress ) {
494- Some ( InProgressState :: Scheduled { done_event, .. } ) => {
495- Some ( Ok ( Err ( listen_to_done_event ( this, reader, done_event) ) ) )
496- }
496+ Some ( InProgressState :: Scheduled { done_event, .. } ) => Some ( Ok ( Err (
497+ listen_to_done_event ( this, reader, tracking , done_event) ,
498+ ) ) ) ,
497499 Some ( InProgressState :: InProgress ( box InProgressStateInner {
498500 done_event, ..
499- } ) ) => Some ( Ok ( Err ( listen_to_done_event ( this, reader, done_event) ) ) ) ,
501+ } ) ) => Some ( Ok ( Err ( listen_to_done_event (
502+ this, reader, tracking, done_event,
503+ ) ) ) ) ,
500504 Some ( InProgressState :: Canceled ) => Some ( Err ( anyhow:: anyhow!(
501505 "{} was canceled" ,
502506 ctx. get_task_description( task. id( ) )
@@ -505,7 +509,7 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
505509 }
506510 }
507511
508- if matches ! ( consistency, ReadConsistency :: Strong ) {
512+ if matches ! ( options . consistency, ReadConsistency :: Strong ) {
509513 // Ensure it's an root node
510514 loop {
511515 let aggregation_number = get_aggregation_number ( & task) ;
@@ -687,7 +691,7 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
687691 }
688692 }
689693
690- if let Some ( value) = check_in_progress ( self , & task, reader, & ctx) {
694+ if let Some ( value) = check_in_progress ( self , & task, reader, options . tracking , & ctx) {
691695 return value;
692696 }
693697
@@ -705,6 +709,7 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
705709 } ;
706710 if self . should_track_dependencies ( )
707711 && let Some ( reader) = reader
712+ && options. tracking . should_track ( result. is_err ( ) )
708713 && ( !task. is_immutable ( ) || cfg ! ( feature = "verify_immutable" ) )
709714 {
710715 let _ = task. add ( CachedDataItem :: OutputDependent {
@@ -810,7 +815,9 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
810815 None
811816 } ;
812817 if let Some ( content) = content {
813- add_cell_dependency ( self , task, reader, cell, task_id, & mut ctx) ;
818+ if options. tracking . should_track ( false ) {
819+ add_cell_dependency ( self , task, reader, cell, task_id, & mut ctx) ;
820+ }
814821 return Ok ( Ok ( TypedCellContent (
815822 cell. type_id ,
816823 CellContent ( Some ( content. reference ) ) ,
@@ -835,14 +842,18 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
835842 )
836843 . copied ( ) ;
837844 let Some ( max_id) = max_id else {
838- add_cell_dependency ( self , task, reader, cell, task_id, & mut ctx) ;
845+ if options. tracking . should_track ( true ) {
846+ add_cell_dependency ( self , task, reader, cell, task_id, & mut ctx) ;
847+ }
839848 bail ! (
840849 "Cell {cell:?} no longer exists in task {} (no cell of this type exists)" ,
841850 ctx. get_task_description( task_id)
842851 ) ;
843852 } ;
844853 if cell. index >= max_id {
845- add_cell_dependency ( self , task, reader, cell, task_id, & mut ctx) ;
854+ if options. tracking . should_track ( true ) {
855+ add_cell_dependency ( self , task, reader, cell, task_id, & mut ctx) ;
856+ }
846857 bail ! (
847858 "Cell {cell:?} no longer exists in task {} (index out of bounds)" ,
848859 ctx. get_task_description( task_id)
@@ -2457,7 +2468,7 @@ impl<B: BackingStorage> TurboTasksBackendInner<B> {
24572468 } )
24582469 }
24592470
2460- fn try_read_own_task_cell_untracked (
2471+ fn try_read_own_task_cell (
24612472 & self ,
24622473 task_id : TaskId ,
24632474 cell : CellId ,
@@ -3139,11 +3150,11 @@ impl<B: BackingStorage> Backend for TurboTasksBackend<B> {
31393150 & self ,
31403151 task_id : TaskId ,
31413152 reader : Option < TaskId > ,
3142- consistency : ReadConsistency ,
3153+ options : ReadOutputOptions ,
31433154 turbo_tasks : & dyn TurboTasksBackendApi < Self > ,
31443155 ) -> Result < Result < RawVc , EventListener > > {
31453156 self . 0
3146- . try_read_task_output ( task_id, reader, consistency , turbo_tasks)
3157+ . try_read_task_output ( task_id, reader, options , turbo_tasks)
31473158 }
31483159
31493160 fn try_read_task_cell (
@@ -3158,15 +3169,15 @@ impl<B: BackingStorage> Backend for TurboTasksBackend<B> {
31583169 . try_read_task_cell ( task_id, reader, cell, options, turbo_tasks)
31593170 }
31603171
3161- fn try_read_own_task_cell_untracked (
3172+ fn try_read_own_task_cell (
31623173 & self ,
31633174 task_id : TaskId ,
31643175 cell : CellId ,
31653176 options : ReadCellOptions ,
31663177 turbo_tasks : & dyn TurboTasksBackendApi < Self > ,
31673178 ) -> Result < TypedCellContent > {
31683179 self . 0
3169- . try_read_own_task_cell_untracked ( task_id, cell, options, turbo_tasks)
3180+ . try_read_own_task_cell ( task_id, cell, options, turbo_tasks)
31703181 }
31713182
31723183 fn read_task_collectibles (
0 commit comments