88
99#include  < gtest/gtest.h> 
1010#include  < cstdio> 
11+ #include  < memory> 
1112
1213#include  < executorch/devtools/etdump/data_sinks/buffer_data_sink.h> 
14+ #include  < executorch/devtools/etdump/data_sinks/file_data_sink.h> 
1315#include  < executorch/devtools/etdump/etdump_flatcc.h> 
1416#include  < executorch/devtools/etdump/etdump_schema_flatcc_builder.h> 
1517#include  < executorch/devtools/etdump/etdump_schema_flatcc_reader.h> 
18+ #include  < executorch/extension/testing_util/temp_file.h> 
1619#include  < executorch/runtime/core/exec_aten/testing_util/tensor_factory.h> 
1720#include  < executorch/runtime/core/span.h> 
1821#include  < executorch/runtime/platform/runtime.h> 
@@ -24,6 +27,7 @@ using ::executorch::aten::ScalarType;
2427using  ::executorch::aten::Tensor;
2528using  ::executorch::etdump::ETDumpGen;
2629using  ::executorch::etdump::ETDumpResult;
30+ using  ::executorch::extension::testing::TempFile;
2731using  ::executorch::runtime::AllocatorID;
2832using  ::executorch::runtime::ArrayRef;
2933using  ::executorch::runtime::BoxedEvalueList;
@@ -36,6 +40,7 @@ using ::executorch::runtime::Tag;
3640using  ::executorch::runtime::testing::TensorFactory;
3741
3842using  ::executorch::etdump::BufferDataSink;
43+ using  ::executorch::etdump::FileDataSink;
3944
4045class  ProfilerETDumpTest  : public ::testing::Test {
4146 protected: 
@@ -45,6 +50,9 @@ class ProfilerETDumpTest : public ::testing::Test {
4550    const  size_t  buf_size = 512  * 1024 ;
4651    buf = (uint8_t *)malloc (buf_size * sizeof (uint8_t ));
4752    etdump_gen[1 ] = new  ETDumpGen (Span<uint8_t >(buf, buf_size));
53+ 
54+     temp_file = std::make_unique<TempFile>(std::string ());
55+     dump_file_path = temp_file->path ();
4856  }
4957
5058  void  TearDown () override  {
@@ -55,6 +63,8 @@ class ProfilerETDumpTest : public ::testing::Test {
5563
5664  ETDumpGen* etdump_gen[2 ];
5765  uint8_t * buf = nullptr ;
66+   std::unique_ptr<TempFile> temp_file;
67+   std::string dump_file_path;
5868};
5969
6070TEST_F (ProfilerETDumpTest, SingleProfileEvent) {
@@ -177,7 +187,7 @@ TEST_F(ProfilerETDumpTest, AllocationEvents) {
177187
178188TEST_F (ProfilerETDumpTest, DebugEvent) {
179189  for  (size_t  i = 0 ; i < 2 ; i++) {
180-     for  (size_t  j = 0 ; j < 2 ; j++) {
190+     for  (size_t  j = 0 ; j < 3 ; j++) {
181191      etdump_gen[i]->create_event_block (" test_block"  );
182192
183193      void * ptr = malloc (2048 );
@@ -199,16 +209,22 @@ TEST_F(ProfilerETDumpTest, DebugEvent) {
199209      //  using span to record debug data
200210      Span<uint8_t > buffer ((uint8_t *)ptr, 2048 );
201211      auto  buffer_data_sink = BufferDataSink::create (ptr, 2048 );
212+       auto  file_data_sink = FileDataSink::create (dump_file_path.c_str ());
213+ 
202214      if  (j == 0 ) {
203215        ET_EXPECT_DEATH (
204216            etdump_gen[i]->log_evalue (evalue_tensor),
205217            " Must set data sink before writing tensor-like data"  );
206218        etdump_gen[i]->set_debug_buffer (buffer);
207219      }
208-       //  using data sink to record debug data
209-       else  {
220+       //  using buffer  data sink to record debug data
221+       else  if  (j ==  1 )  {
210222        etdump_gen[i]->set_data_sink (&buffer_data_sink.get ());
211223      }
224+       //  using file data sink to record debug data
225+       else  {
226+         etdump_gen[i]->set_data_sink (&file_data_sink.get ());
227+       }
212228
213229      etdump_gen[i]->log_evalue (evalue_tensor);
214230      etdump_gen[i]->log_evalue (
@@ -221,7 +237,7 @@ TEST_F(ProfilerETDumpTest, DebugEvent) {
221237
222238TEST_F (ProfilerETDumpTest, DebugEventTensorList) {
223239  for  (size_t  i = 0 ; i < 2 ; i++) {
224-     for  (size_t  j = 0 ; j < 2 ; j++) {
240+     for  (size_t  j = 0 ; j < 3 ; j++) {
225241      TensorFactory<ScalarType::Int> tf;
226242      executorch::aten::Tensor storage[2 ] = {tf.ones ({3 , 2 }), tf.ones ({3 , 2 })};
227243      EValue evalue_1 (storage[0 ]);
@@ -238,15 +254,20 @@ TEST_F(ProfilerETDumpTest, DebugEventTensorList) {
238254      Span<uint8_t > buffer ((uint8_t *)ptr, 2048 );
239255
240256      auto  buffer_data_sink = BufferDataSink::create (ptr, 2048 );
257+       auto  file_data_sink = FileDataSink::create (dump_file_path.c_str ());
241258
242259      //  using span to record debug data
243260      if  (j == 0 ) {
244261        etdump_gen[i]->set_debug_buffer (buffer);
245262      }
246-       //  using data sink to record debug data
247-       else  {
263+       //  using buffer  data sink to record debug data
264+       else  if  (j ==  1 )  {
248265        etdump_gen[i]->set_data_sink (&buffer_data_sink.get ());
249266      }
267+       //  using file data sink to record debug dats
268+       else  {
269+         etdump_gen[i]->set_data_sink (&file_data_sink.get ());
270+       }
250271
251272      etdump_gen[i]->log_evalue (evalue);
252273
@@ -267,15 +288,20 @@ TEST_F(ProfilerETDumpTest, VerifyLogging) {
267288      Span<uint8_t > buffer ((uint8_t *)ptr, 2048 );
268289
269290      auto  buffer_data_sink = BufferDataSink::create (ptr, 2048 );
291+       auto  file_data_sink = FileDataSink::create (dump_file_path.c_str ());
270292
271293      //  using span to record debug data
272294      if  (j == 0 ) {
273295        etdump_gen[i]->set_debug_buffer (buffer);
274296      }
275-       //  using data sink to record debug data
276-       else  {
297+       //  using buffer  data sink to record debug data
298+       else  if  (j ==  1 )  {
277299        etdump_gen[i]->set_data_sink (&buffer_data_sink.get ());
278300      }
301+       //  using buffer data sink to record debug data
302+       else  {
303+         etdump_gen[i]->set_data_sink (&file_data_sink.get ());
304+       }
279305
280306      etdump_gen[i]->log_evalue (evalue);
281307      etdump_gen[i]->log_evalue (evalue, LoggedEValueType::kProgramOutput );
@@ -473,11 +499,12 @@ TEST_F(ProfilerETDumpTest, VerifyData) {
473499
474500TEST_F (ProfilerETDumpTest, LogDelegateIntermediateOutput) {
475501  for  (size_t  i = 0 ; i < 2 ; i++) {
476-     for  (size_t  j = 0 ; j < 2 ; j++) {
502+     for  (size_t  j = 0 ; j < 3 ; j++) {
477503      void * ptr = malloc (2048 );
478504      Span<uint8_t > buffer ((uint8_t *)ptr, 2048 );
479505
480506      auto  buffer_data_sink = BufferDataSink::create (ptr, 2048 );
507+       auto  file_data_sink = FileDataSink::create (dump_file_path.c_str ());
481508
482509      etdump_gen[i]->create_event_block (" test_block"  );
483510      TensorFactory<ScalarType::Float> tf;
@@ -493,10 +520,14 @@ TEST_F(ProfilerETDumpTest, LogDelegateIntermediateOutput) {
493520            " Must set data sink before writing tensor-like data"  );
494521        etdump_gen[i]->set_debug_buffer (buffer);
495522      }
496-       //  using data sink to record debug data
497-       else  {
523+       //  using buffer  data sink to record debug data
524+       else  if  (j ==  1 )  {
498525        etdump_gen[i]->set_data_sink (&buffer_data_sink.get ());
499526      }
527+       //  using file data sink to record debug data
528+       else  {
529+         etdump_gen[i]->set_data_sink (&file_data_sink.get ());
530+       }
500531
501532      //  Log a tensor
502533      etdump_gen[i]->log_intermediate_output_delegate (
@@ -546,22 +577,27 @@ TEST_F(ProfilerETDumpTest, VerifyDelegateIntermediateLogging) {
546577  EValue evalue (tf.ones ({3 , 2 }));
547578
548579  for  (size_t  i = 0 ; i < 2 ; i++) {
549-     for  (size_t  j = 0 ; j < 2 ; j++) {
580+     for  (size_t  j = 0 ; j < 3 ; j++) {
550581      etdump_gen[i]->create_event_block (" test_block"  );
551582
552583      void * ptr = malloc (2048 );
553584      Span<uint8_t > buffer ((uint8_t *)ptr, 2048 );
554585      ;
555586      auto  buffer_data_sink = BufferDataSink::create (ptr, 2048 );
587+       auto  file_data_sink = FileDataSink::create (dump_file_path.c_str ());
556588
557589      //  using span to record debug data
558590      if  (j == 0 ) {
559591        etdump_gen[i]->set_debug_buffer (buffer);
560592      }
561-       //  using data sink to record debug data
562-       else  {
593+       //  using buffer  data sink to record debug data
594+       else  if  (j ==  1 )  {
563595        etdump_gen[i]->set_data_sink (&buffer_data_sink.get ());
564596      }
597+       //  using file data sink to record debug data
598+       else  {
599+         etdump_gen[i]->set_data_sink (&file_data_sink.get ());
600+       }
565601
566602      //  Event 0
567603      etdump_gen[i]->log_intermediate_output_delegate (
0 commit comments