Skip to content

Commit 164489b

Browse files
author
root
committed
test(etdump): Add FileDataSink test coverage
Summary: - Extend test loops to cover FileDataSink scenarios (j=2 case) - Add temporary file cleanup in TearDown - Include file_data_sink.h, stdio.h and fstream in test sources - Update CMakeLists.txt to ensure proper linking Fixes pytorch#9165
1 parent 37265a1 commit 164489b

File tree

2 files changed

+54
-15
lines changed

2 files changed

+54
-15
lines changed

devtools/CMakeLists.txt

+3-1
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ add_library(
186186
${CMAKE_CURRENT_SOURCE_DIR}/etdump/emitter.cpp
187187
${CMAKE_CURRENT_SOURCE_DIR}/etdump/data_sinks/buffer_data_sink.cpp
188188
${CMAKE_CURRENT_SOURCE_DIR}/etdump/data_sinks/buffer_data_sink.h
189+
${CMAKE_CURRENT_SOURCE_DIR}/etdump/data_sinks/file_data_sink.cpp
190+
${CMAKE_CURRENT_SOURCE_DIR}/etdump/data_sinks/file_data_sink.h
189191
)
190192

191193
target_link_libraries(
@@ -233,5 +235,5 @@ install(
233235

234236
if(BUILD_TESTING)
235237
# TODO: This is currently not working!
236-
# add_subdirectory(etdump/tests)
238+
add_subdirectory(etdump/tests)
237239
endif()

devtools/etdump/tests/etdump_test.cpp

+51-14
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88

99
#include <gtest/gtest.h>
1010
#include <cstdio>
11+
#include <stdio.h>
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>
@@ -19,6 +21,7 @@
1921
#include <executorch/test/utils/DeathTest.h>
2022
#include <cstdint>
2123
#include <cstring>
24+
#include <fstream>
2225

2326
using ::executorch::aten::ScalarType;
2427
using ::executorch::aten::Tensor;
@@ -36,6 +39,7 @@ using ::executorch::runtime::Tag;
3639
using ::executorch::runtime::testing::TensorFactory;
3740

3841
using ::executorch::etdump::BufferDataSink;
42+
using ::executorch::etdump::FileDataSink;
3943

4044
class ProfilerETDumpTest : public ::testing::Test {
4145
protected:
@@ -45,16 +49,23 @@ class ProfilerETDumpTest : public ::testing::Test {
4549
const size_t buf_size = 512 * 1024;
4650
buf = (uint8_t*)malloc(buf_size * sizeof(uint8_t));
4751
etdump_gen[1] = new ETDumpGen(Span<uint8_t>(buf, buf_size));
52+
53+
std::array<char, L_tmpnam> dummy_name;
54+
dummy_name[L_tmpnam-1] = '\0';
55+
dump_file_path = std::string(dummy_name.data()) + "-dump";
4856
}
4957

5058
void TearDown() override {
5159
delete etdump_gen[0];
5260
delete etdump_gen[1];
5361
free(buf);
62+
63+
std::remove(dump_file_path.c_str());
5464
}
5565

5666
ETDumpGen* etdump_gen[2];
5767
uint8_t* buf = nullptr;
68+
std::string dump_file_path;
5869
};
5970

6071
TEST_F(ProfilerETDumpTest, SingleProfileEvent) {
@@ -177,7 +188,7 @@ TEST_F(ProfilerETDumpTest, AllocationEvents) {
177188

178189
TEST_F(ProfilerETDumpTest, DebugEvent) {
179190
for (size_t i = 0; i < 2; i++) {
180-
for (size_t j = 0; j < 2; j++) {
191+
for (size_t j = 0; j < 3; j++) {
181192
etdump_gen[i]->create_event_block("test_block");
182193

183194
void* ptr = malloc(2048);
@@ -199,16 +210,22 @@ TEST_F(ProfilerETDumpTest, DebugEvent) {
199210
// using span to record debug data
200211
Span<uint8_t> buffer((uint8_t*)ptr, 2048);
201212
auto buffer_data_sink = BufferDataSink::create(ptr, 2048);
213+
auto file_data_sink = FileDataSink::create(dump_file_path.c_str());
214+
202215
if (j == 0) {
203216
ET_EXPECT_DEATH(
204217
etdump_gen[i]->log_evalue(evalue_tensor),
205218
"Must set data sink before writing tensor-like data");
206219
etdump_gen[i]->set_debug_buffer(buffer);
207220
}
208-
// using data sink to record debug data
209-
else {
221+
// using buffer data sink to record debug data
222+
else if (j == 1) {
210223
etdump_gen[i]->set_data_sink(&buffer_data_sink.get());
211224
}
225+
// using file data sink to record debug data
226+
else {
227+
etdump_gen[i]->set_data_sink(&file_data_sink.get());
228+
}
212229

213230
etdump_gen[i]->log_evalue(evalue_tensor);
214231
etdump_gen[i]->log_evalue(
@@ -221,7 +238,7 @@ TEST_F(ProfilerETDumpTest, DebugEvent) {
221238

222239
TEST_F(ProfilerETDumpTest, DebugEventTensorList) {
223240
for (size_t i = 0; i < 2; i++) {
224-
for (size_t j = 0; j < 2; j++) {
241+
for (size_t j = 0; j < 3; j++) {
225242
TensorFactory<ScalarType::Int> tf;
226243
executorch::aten::Tensor storage[2] = {tf.ones({3, 2}), tf.ones({3, 2})};
227244
EValue evalue_1(storage[0]);
@@ -238,15 +255,20 @@ TEST_F(ProfilerETDumpTest, DebugEventTensorList) {
238255
Span<uint8_t> buffer((uint8_t*)ptr, 2048);
239256

240257
auto buffer_data_sink = BufferDataSink::create(ptr, 2048);
258+
auto file_data_sink = FileDataSink::create(dump_file_path.c_str());
241259

242260
// using span to record debug data
243261
if (j == 0) {
244262
etdump_gen[i]->set_debug_buffer(buffer);
245263
}
246-
// using data sink to record debug data
247-
else {
264+
// using buffer data sink to record debug data
265+
else if (j == 1) {
248266
etdump_gen[i]->set_data_sink(&buffer_data_sink.get());
249267
}
268+
// using file data sink to record debug dats
269+
else {
270+
etdump_gen[i]->set_data_sink(&file_data_sink.get());
271+
}
250272

251273
etdump_gen[i]->log_evalue(evalue);
252274

@@ -267,15 +289,20 @@ TEST_F(ProfilerETDumpTest, VerifyLogging) {
267289
Span<uint8_t> buffer((uint8_t*)ptr, 2048);
268290

269291
auto buffer_data_sink = BufferDataSink::create(ptr, 2048);
292+
auto file_data_sink = FileDataSink::create(dump_file_path.c_str());
270293

271294
// using span to record debug data
272295
if (j == 0) {
273296
etdump_gen[i]->set_debug_buffer(buffer);
274297
}
275-
// using data sink to record debug data
276-
else {
298+
// using buffer data sink to record debug data
299+
else if (j == 1) {
277300
etdump_gen[i]->set_data_sink(&buffer_data_sink.get());
278301
}
302+
// using buffer data sink to record debug data
303+
else {
304+
etdump_gen[i]->set_data_sink(&file_data_sink.get());
305+
}
279306

280307
etdump_gen[i]->log_evalue(evalue);
281308
etdump_gen[i]->log_evalue(evalue, LoggedEValueType::kProgramOutput);
@@ -473,11 +500,12 @@ TEST_F(ProfilerETDumpTest, VerifyData) {
473500

474501
TEST_F(ProfilerETDumpTest, LogDelegateIntermediateOutput) {
475502
for (size_t i = 0; i < 2; i++) {
476-
for (size_t j = 0; j < 2; j++) {
503+
for (size_t j = 0; j < 3; j++) {
477504
void* ptr = malloc(2048);
478505
Span<uint8_t> buffer((uint8_t*)ptr, 2048);
479506

480507
auto buffer_data_sink = BufferDataSink::create(ptr, 2048);
508+
auto file_data_sink = FileDataSink::create(dump_file_path.c_str());
481509

482510
etdump_gen[i]->create_event_block("test_block");
483511
TensorFactory<ScalarType::Float> tf;
@@ -493,10 +521,14 @@ TEST_F(ProfilerETDumpTest, LogDelegateIntermediateOutput) {
493521
"Must set data sink before writing tensor-like data");
494522
etdump_gen[i]->set_debug_buffer(buffer);
495523
}
496-
// using data sink to record debug data
497-
else {
524+
// using buffer data sink to record debug data
525+
else if (j == 1) {
498526
etdump_gen[i]->set_data_sink(&buffer_data_sink.get());
499527
}
528+
// using file data sink to record debug data
529+
else {
530+
etdump_gen[i]->set_data_sink(&file_data_sink.get());
531+
}
500532

501533
// Log a tensor
502534
etdump_gen[i]->log_intermediate_output_delegate(
@@ -546,22 +578,27 @@ TEST_F(ProfilerETDumpTest, VerifyDelegateIntermediateLogging) {
546578
EValue evalue(tf.ones({3, 2}));
547579

548580
for (size_t i = 0; i < 2; i++) {
549-
for (size_t j = 0; j < 2; j++) {
581+
for (size_t j = 0; j < 3; j++) {
550582
etdump_gen[i]->create_event_block("test_block");
551583

552584
void* ptr = malloc(2048);
553585
Span<uint8_t> buffer((uint8_t*)ptr, 2048);
554586
;
555587
auto buffer_data_sink = BufferDataSink::create(ptr, 2048);
588+
auto file_data_sink = FileDataSink::create(dump_file_path.c_str());
556589

557590
// using span to record debug data
558591
if (j == 0) {
559592
etdump_gen[i]->set_debug_buffer(buffer);
560593
}
561-
// using data sink to record debug data
562-
else {
594+
// using buffer data sink to record debug data
595+
else if (j == 1) {
563596
etdump_gen[i]->set_data_sink(&buffer_data_sink.get());
564597
}
598+
// using file data sink to record debug data
599+
else {
600+
etdump_gen[i]->set_data_sink(&file_data_sink.get());
601+
}
565602

566603
// Event 0
567604
etdump_gen[i]->log_intermediate_output_delegate(

0 commit comments

Comments
 (0)