@@ -497,36 +497,60 @@ TEST_F(ProfilerETDumpTest, VerifyData) {
497497 }
498498}
499499
500+ // Helper to assert that logging without a data sink triggers ET_EXPECT_DEATH
501+ static void et_expect_death_log_delegate (
502+ ETDumpGen* gen,
503+ TensorFactory<ScalarType::Float>& tf) {
504+ ET_EXPECT_DEATH (
505+ gen->log_intermediate_output_delegate (
506+ " test_event_tensor" ,
507+ static_cast <torch::executor::DebugHandle>(-1 ),
508+ tf.ones ({3 , 2 })),
509+ " Must set data sink before writing tensor-like data" );
510+ }
511+
500512TEST_F (ProfilerETDumpTest, LogDelegateIntermediateOutput) {
513+ const size_t debug_buf_size = 2048 ;
514+ const size_t etdump_buf_size = 512 * 1024 ;
515+
501516 for (size_t i = 0 ; i < 2 ; i++) {
502517 for (size_t j = 0 ; j < 3 ; j++) {
503- void * ptr = malloc (2048 );
504- Span<uint8_t > buffer ((uint8_t *)ptr, 2048 );
518+ uint8_t * buf = nullptr ;
519+ void * ptr = malloc (debug_buf_size);
520+ Span<uint8_t > buffer ((uint8_t *)ptr, debug_buf_size);
505521
506- auto buffer_data_sink = BufferDataSink::create (ptr, 2048 );
522+ auto buffer_data_sink = BufferDataSink::create (ptr, debug_buf_size );
507523 auto file_data_sink = FileDataSink::create (dump_file_path.c_str ());
508524
509525 etdump_gen[i]->create_event_block (" test_block" );
510526 TensorFactory<ScalarType::Float> tf;
511527
512- // using span to record debug data
513528 if (j == 0 ) {
514- // TODO(gasoonjia): add similar ET_EXPECT_DEATH on BufferDataSink branch
515- ET_EXPECT_DEATH (
516- etdump_gen[i]->log_intermediate_output_delegate (
517- " test_event_tensor" ,
518- static_cast <torch::executor::DebugHandle>(-1 ),
519- tf.ones ({3 , 2 })),
520- " Must set data sink before writing tensor-like data" );
529+ // Use span to record debug data
530+ et_expect_death_log_delegate (etdump_gen[i], tf);
521531 etdump_gen[i]->set_debug_buffer (buffer);
522- }
523- // using buffer data sink to record debug data
524- else if (j == 1 ) {
525- etdump_gen[i]->set_data_sink (&buffer_data_sink.get ());
526- }
527- // using file data sink to record debug data
528- else {
529- etdump_gen[i]->set_data_sink (&file_data_sink.get ());
532+ } else {
533+ buf = (uint8_t *)malloc (etdump_buf_size * sizeof (uint8_t ));
534+
535+ // Wrap buffer in span for ETDumGen constructor
536+ Span<uint8_t > span_buf (buf, etdump_buf_size);
537+
538+ // Reset ETDumpGen to correctly trigger ET_EXPECT_DEATH
539+ delete etdump_gen[i];
540+
541+ // Recreate ETDumpGen; use span buffer only for etdump_gen[1]
542+ etdump_gen[i] = (i == 0 ) ? new ETDumpGen () : new ETDumpGen (span_buf);
543+
544+ etdump_gen[i]->create_event_block (" test_block" );
545+ et_expect_death_log_delegate (etdump_gen[i], tf);
546+
547+ if (j == 1 ) {
548+ // Use buffer data sink to record debug data
549+ etdump_gen[i]->set_data_sink (&buffer_data_sink.get ());
550+ } else {
551+ // Use file data sink to record debug data
552+ etdump_gen[i]->set_data_sink (&file_data_sink.get ());
553+ }
530554 }
531555
532556 // Log a tensor
@@ -568,6 +592,9 @@ TEST_F(ProfilerETDumpTest, LogDelegateIntermediateOutput) {
568592 if (!etdump_gen[i]->is_static_etdump ()) {
569593 free (result.buf );
570594 }
595+ if (buf) {
596+ free (buf);
597+ }
571598 }
572599 }
573600}
0 commit comments