Skip to content

Commit d46623e

Browse files
Megan0704-1root
and
root
authored
test(etdump): Add FileDataSink test coverage (#9332)
test(etdump): Add FileDataSink test coverage ## Summary Adds test validation for FileDataSink usage in ETDumpGen scenarios. Extends existing debug event tests to cover file-based data sinks. ## Test Plan **Build & Run Tests**: ```bash # From build directory (cmake-out) make -j32 ctest -R sdk_etdump_tests --output-on-failure ``` Fixes #9165 --------- Co-authored-by: root <[email protected]>
1 parent 6daff83 commit d46623e

File tree

2 files changed

+52
-14
lines changed

2 files changed

+52
-14
lines changed

devtools/CMakeLists.txt

+2
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(

devtools/etdump/tests/etdump_test.cpp

+50-14
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@
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;
2427
using ::executorch::aten::Tensor;
2528
using ::executorch::etdump::ETDumpGen;
2629
using ::executorch::etdump::ETDumpResult;
30+
using ::executorch::extension::testing::TempFile;
2731
using ::executorch::runtime::AllocatorID;
2832
using ::executorch::runtime::ArrayRef;
2933
using ::executorch::runtime::BoxedEvalueList;
@@ -36,6 +40,7 @@ using ::executorch::runtime::Tag;
3640
using ::executorch::runtime::testing::TensorFactory;
3741

3842
using ::executorch::etdump::BufferDataSink;
43+
using ::executorch::etdump::FileDataSink;
3944

4045
class 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

6070
TEST_F(ProfilerETDumpTest, SingleProfileEvent) {
@@ -177,7 +187,7 @@ TEST_F(ProfilerETDumpTest, AllocationEvents) {
177187

178188
TEST_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

222238
TEST_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

474500
TEST_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

Comments
 (0)