Skip to content

Commit b45ad8d

Browse files
Juntian777facebook-github-bot
authored andcommitted
Refactor write_tensor_or_raise_error to Return Error Codes Instead of Raising Errors (#11051)
Summary: Pull Request resolved: #11051 This PR to make the write_tensor_or_raise_error function error out more gracefully by updating the signature of write_tensor_or_raise_error to return executorch::runtime::Result<long> instead of long Check the error code and raise an error if needed after invoking write_tensor_or_return_error function using ET_CHECK_MSG Reviewed By: Gasoonjia Differential Revision: D75111482
1 parent 5268b24 commit b45ad8d

File tree

3 files changed

+31
-19
lines changed

3 files changed

+31
-19
lines changed

devtools/etdump/etdump_flatcc.cpp

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -394,9 +394,12 @@ Result<bool> ETDumpGen::log_intermediate_output_delegate_helper(
394394

395395
// Check the type of `output` then call the corresponding logging functions
396396
if constexpr (std::is_same<T, Tensor>::value) {
397-
long offset = write_tensor_or_raise_error(output);
397+
Result<long> offset = write_tensor_or_return_error(output);
398+
ET_CHECK_MSG(
399+
offset.ok(),
400+
"write_tensor_or_return_error() failed to write tensor to debug buffer");
398401
Result<etdump_Tensor_ref_t> tensor_ref =
399-
add_tensor_entry(builder_, output, offset);
402+
add_tensor_entry(builder_, output, offset.get());
400403
if (!tensor_ref.ok()) {
401404
return tensor_ref.error();
402405
}
@@ -408,9 +411,12 @@ Result<bool> ETDumpGen::log_intermediate_output_delegate_helper(
408411
} else if constexpr (std::is_same<T, ArrayRef<Tensor>>::value) {
409412
etdump_Tensor_vec_start(builder_);
410413
for (size_t i = 0; i < output.size(); ++i) {
411-
long offset = write_tensor_or_raise_error(output[i]);
414+
Result<long> offset = write_tensor_or_return_error(output[i]);
415+
ET_CHECK_MSG(
416+
offset.ok(),
417+
"write_tensor_or_return_error() failed to write tensor to debug buffer");
412418
Result<etdump_Tensor_ref_t> tensor_ref =
413-
add_tensor_entry(builder_, output[i], offset);
419+
add_tensor_entry(builder_, output[i], offset.get());
414420
if (!tensor_ref.ok()) {
415421
return tensor_ref.error();
416422
}
@@ -566,9 +572,12 @@ Result<bool> ETDumpGen::log_evalue(
566572
switch (evalue.tag) {
567573
case Tag::Tensor: {
568574
executorch::aten::Tensor tensor = evalue.toTensor();
569-
long offset = write_tensor_or_raise_error(tensor);
575+
Result<long> offset = write_tensor_or_return_error(tensor);
576+
ET_CHECK_MSG(
577+
offset.ok(),
578+
"write_tensor_or_return_error() failed to write tensor to debug buffer");
570579
Result<etdump_Tensor_ref_t> tensor_ref =
571-
add_tensor_entry(builder_, tensor, offset);
580+
add_tensor_entry(builder_, tensor, offset.get());
572581
if (!tensor_ref.ok()) {
573582
return tensor_ref.error();
574583
}
@@ -591,9 +600,12 @@ Result<bool> ETDumpGen::log_evalue(
591600
evalue.toTensorList();
592601
etdump_Tensor_vec_start(builder_);
593602
for (size_t i = 0; i < tensors.size(); ++i) {
594-
long offset = write_tensor_or_raise_error(tensors[i]);
603+
Result<long> offset = write_tensor_or_return_error(tensors[i]);
604+
ET_CHECK_MSG(
605+
offset.ok(),
606+
"write_tensor_or_return_error() failed to write tensor to debug buffer");
595607
Result<etdump_Tensor_ref_t> tensor_ref =
596-
add_tensor_entry(builder_, tensors[i], offset);
608+
add_tensor_entry(builder_, tensors[i], offset.get());
597609
if (!tensor_ref.ok()) {
598610
return tensor_ref.error();
599611
}
@@ -689,7 +701,7 @@ void ETDumpGen::set_delegation_intermediate_output_filter(
689701
filter_ = filter;
690702
}
691703

692-
long ETDumpGen::write_tensor_or_raise_error(Tensor tensor) {
704+
Result<long> ETDumpGen::write_tensor_or_return_error(Tensor tensor) {
693705
// Previously, the function copy_tensor_to_debug_buffer returned 0xFF..F when
694706
// given an empty tensor, which is an invalid offset for most buffers. In our
695707
// data sink, we will return the current debug_buffer_offset for better
@@ -702,14 +714,14 @@ long ETDumpGen::write_tensor_or_raise_error(Tensor tensor) {
702714
return static_cast<size_t>(-1);
703715
}
704716

705-
ET_CHECK_MSG(
706-
data_sink_, "Must set data sink before writing tensor-like data");
717+
if (!data_sink_) {
718+
return Error::InvalidArgument;
719+
}
707720
Result<size_t> ret =
708721
data_sink_->write(tensor.const_data_ptr(), tensor.nbytes());
709-
ET_CHECK_MSG(
710-
ret.ok(),
711-
"Failed to write tensor with error 0x%" PRIx32,
712-
static_cast<uint32_t>(ret.error()));
722+
if (!ret.ok()) {
723+
return ret.error();
724+
}
713725
return static_cast<long>(ret.get());
714726
}
715727

devtools/etdump/etdump_flatcc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ class ETDumpGen : public ::executorch::runtime::EventTracer {
184184
DelegateDebugIntId delegate_debug_index,
185185
const T& output);
186186

187-
long write_tensor_or_raise_error(executorch::aten::Tensor tensor);
187+
Result<long> write_tensor_or_return_error(executorch::aten::Tensor tensor);
188188

189189
struct flatcc_builder* builder_;
190190
size_t num_blocks_ = 0;

devtools/etdump/tests/etdump_test.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class ProfilerETDumpTest : public ::testing::Test {
7676
ET_EXPECT_DEATH(
7777
gen->log_intermediate_output_delegate(
7878
"test_event_tensor", kUnsetDelegateDebugIntId, tf.ones({3, 2})),
79-
"Must set data sink before writing tensor-like data");
79+
"failed to write tensor to debug buffer");
8080
}
8181

8282
void check_log_with_filter(
@@ -301,7 +301,7 @@ TEST_F(ProfilerETDumpTest, DebugEvent) {
301301
if (j == 0) {
302302
ET_EXPECT_DEATH(
303303
etdump_gen[i]->log_evalue(evalue_tensor),
304-
"Must set data sink before writing tensor-like data");
304+
"failed to write tensor to debug buffer");
305305

306306
// Set debug buffer with span
307307
etdump_gen[i]->set_debug_buffer(buffer);
@@ -315,7 +315,7 @@ TEST_F(ProfilerETDumpTest, DebugEvent) {
315315

316316
ET_EXPECT_DEATH(
317317
etdump_gen[i]->log_evalue(evalue_tensor),
318-
"Must set data sink before writing tensor-like data");
318+
"failed to write tensor to debug buffer");
319319

320320
if (j == 1) {
321321
// Set buffer data sink

0 commit comments

Comments
 (0)