@@ -3,10 +3,10 @@ use std::future::Future;
3
3
use anyhow:: Result ;
4
4
use rustc_hash:: FxHashSet ;
5
5
use serde:: { Deserialize , Serialize } ;
6
- use tracing:: Instrument ;
6
+ use tracing:: { Instrument , Level , Span } ;
7
7
use turbo_rcstr:: RcStr ;
8
8
use turbo_tasks:: {
9
- FxIndexSet , NonLocalValue , ReadRef , ResolvedVc , TryJoinIterExt , ValueToString , Vc ,
9
+ FxIndexSet , NonLocalValue , ReadRef , ResolvedVc , TryJoinIterExt , Vc ,
10
10
debug:: ValueDebugFormat ,
11
11
graph:: { AdjacencyMap , GraphTraversal , Visit , VisitControlFlow } ,
12
12
trace:: TraceRawVcs ,
@@ -121,14 +121,23 @@ pub async fn find_server_entries(
121
121
include_traced : bool ,
122
122
) -> Result < Vc < ServerEntries > > {
123
123
async move {
124
+ let emit_spans = tracing:: enabled!( Level :: INFO ) ;
124
125
let graph = AdjacencyMap :: new ( )
125
126
. skip_duplicates ( )
126
127
. visit (
127
128
vec ! [ FindServerEntriesNode :: Internal (
128
129
entry,
129
- entry. ident( ) . to_string( ) . await ?,
130
+ if emit_spans {
131
+ // INVALIDATION: we don't need to invalidate when the span name changes
132
+ Some ( entry. ident_string( ) . untracked( ) . await ?)
133
+ } else {
134
+ None
135
+ } ,
130
136
) ] ,
131
- FindServerEntries { include_traced } ,
137
+ FindServerEntries {
138
+ include_traced,
139
+ emit_spans,
140
+ } ,
132
141
)
133
142
. await
134
143
. completed ( ) ?
@@ -161,6 +170,7 @@ pub async fn find_server_entries(
161
170
struct FindServerEntries {
162
171
/// Whether to walk ChunkingType::Traced references
163
172
include_traced : bool ,
173
+ emit_spans : bool ,
164
174
}
165
175
166
176
#[ derive(
@@ -177,9 +187,12 @@ struct FindServerEntries {
177
187
) ]
178
188
enum FindServerEntriesNode {
179
189
ClientReference ,
180
- ServerComponentEntry ( ResolvedVc < NextServerComponentModule > , ReadRef < RcStr > ) ,
181
- ServerUtilEntry ( ResolvedVc < NextServerUtilityModule > , ReadRef < RcStr > ) ,
182
- Internal ( ResolvedVc < Box < dyn Module > > , ReadRef < RcStr > ) ,
190
+ ServerComponentEntry (
191
+ ResolvedVc < NextServerComponentModule > ,
192
+ Option < ReadRef < RcStr > > ,
193
+ ) ,
194
+ ServerUtilEntry ( ResolvedVc < NextServerUtilityModule > , Option < ReadRef < RcStr > > ) ,
195
+ Internal ( ResolvedVc < Box < dyn Module > > , Option < ReadRef < RcStr > > ) ,
183
196
}
184
197
185
198
impl Visit < FindServerEntriesNode > for FindServerEntries {
@@ -208,6 +221,7 @@ impl Visit<FindServerEntriesNode> for FindServerEntries {
208
221
FindServerEntriesNode :: ServerUtilEntry ( module, _) => Vc :: upcast ( * * module) ,
209
222
FindServerEntriesNode :: ServerComponentEntry ( module, _) => Vc :: upcast ( * * module) ,
210
223
} ;
224
+ let emit_spans = self . emit_spans ;
211
225
async move {
212
226
// Pass include_traced to reuse the same cached `primary_chunkable_referenced_modules`
213
227
// task result, but the traced references will be filtered out again afterwards.
@@ -235,7 +249,13 @@ impl Visit<FindServerEntriesNode> for FindServerEntries {
235
249
{
236
250
return Ok ( FindServerEntriesNode :: ServerComponentEntry (
237
251
server_component_asset,
238
- server_component_asset. ident ( ) . to_string ( ) . await ?,
252
+ if emit_spans {
253
+ // INVALIDATION: we don't need to invalidate when the span name
254
+ // changes
255
+ Some ( server_component_asset. ident_string ( ) . untracked ( ) . await ?)
256
+ } else {
257
+ None
258
+ } ,
239
259
) ) ;
240
260
}
241
261
@@ -244,13 +264,24 @@ impl Visit<FindServerEntriesNode> for FindServerEntries {
244
264
{
245
265
return Ok ( FindServerEntriesNode :: ServerUtilEntry (
246
266
server_util_module,
247
- module. ident ( ) . to_string ( ) . await ?,
267
+ if emit_spans {
268
+ // INVALIDATION: we don't need to invalidate when the span name
269
+ // changes
270
+ Some ( module. ident_string ( ) . untracked ( ) . await ?)
271
+ } else {
272
+ None
273
+ } ,
248
274
) ) ;
249
275
}
250
276
251
277
Ok ( FindServerEntriesNode :: Internal (
252
278
* module,
253
- module. ident ( ) . to_string ( ) . await ?,
279
+ if emit_spans {
280
+ // INVALIDATION: we don't need to invalidate when the span name changes
281
+ Some ( module. ident_string ( ) . untracked ( ) . await ?)
282
+ } else {
283
+ None
284
+ } ,
254
285
) )
255
286
} ) ;
256
287
@@ -261,18 +292,21 @@ impl Visit<FindServerEntriesNode> for FindServerEntries {
261
292
}
262
293
263
294
fn span ( & mut self , node : & FindServerEntriesNode ) -> tracing:: Span {
295
+ if !self . emit_spans {
296
+ return Span :: current ( ) ;
297
+ }
264
298
match node {
265
299
FindServerEntriesNode :: ClientReference => {
266
300
tracing:: info_span!( "client reference" )
267
301
}
268
302
FindServerEntriesNode :: Internal ( _, name) => {
269
- tracing:: info_span!( "module" , name = display( name) )
303
+ tracing:: info_span!( "module" , name = display( name. as_ref ( ) . unwrap ( ) ) )
270
304
}
271
305
FindServerEntriesNode :: ServerUtilEntry ( _, name) => {
272
- tracing:: info_span!( "server util" , name = display( name) )
306
+ tracing:: info_span!( "server util" , name = display( name. as_ref ( ) . unwrap ( ) ) )
273
307
}
274
308
FindServerEntriesNode :: ServerComponentEntry ( _, name) => {
275
- tracing:: info_span!( "layout segment" , name = display( name) )
309
+ tracing:: info_span!( "layout segment" , name = display( name. as_ref ( ) . unwrap ( ) ) )
276
310
}
277
311
}
278
312
}
0 commit comments