@@ -472,36 +472,51 @@ class ExecuTorchJni : public facebook::jni::HybridClass<ExecuTorchJni> {
472472 }
473473
474474 jboolean etdump () {
475+ return etdump_to_path (" /data/local/tmp/result.etdump" );
476+ }
477+
478+ jboolean etdumpTo (facebook::jni::alias_ref<jstring> outputPath) {
479+ return etdump_to_path (outputPath->toStdString ().c_str ());
480+ }
481+
482+ private:
483+ jboolean etdump_to_path (const char * path) {
475484#ifdef EXECUTORCH_ANDROID_PROFILING
476485 executorch::etdump::ETDumpGen* etdumpgen =
477486 (executorch::etdump::ETDumpGen*)module_->event_tracer ();
478487 auto etdump_data = etdumpgen->get_etdump_data ();
479488
480489 if (etdump_data.buf != nullptr && etdump_data.size > 0 ) {
481- int etdump_file =
482- open (" /data/local/tmp/result.etdump" , O_WRONLY | O_CREAT, 0644 );
490+ int etdump_file = open (path, O_WRONLY | O_CREAT | O_TRUNC, 0644 );
483491 if (etdump_file == -1 ) {
484- ET_LOG (Error, " Cannot create result.etdump error: %d" , errno);
492+ ET_LOG (Error, " Cannot create %s error: %d" , path, errno);
493+ free (etdump_data.buf );
485494 return false ;
486495 }
487496 ssize_t bytes_written =
488497 write (etdump_file, (uint8_t *)etdump_data.buf , etdump_data.size );
489498 if (bytes_written == -1 ) {
490- ET_LOG (Error, " Cannot write result.etdump error: %d" , errno);
499+ ET_LOG (Error, " Cannot write %s error: %d" , path, errno);
500+ close (etdump_file);
501+ free (etdump_data.buf );
491502 return false ;
492503 } else {
493- ET_LOG (Info, " ETDump written %d bytes to file ." , bytes_written);
504+ ET_LOG (Info, " ETDump written %zd bytes to %s ." , bytes_written, path );
494505 }
495506 close (etdump_file);
496507 free (etdump_data.buf );
497508 return true ;
498509 } else {
499510 ET_LOG (Error, " No ETDump data available!" );
500511 }
512+ #else
513+ (void )path;
501514#endif
502515 return false ;
503516 }
504517
518+ public:
519+
505520 facebook::jni::local_ref<facebook::jni::JArrayClass<jstring>> getMethods () {
506521 const auto & names_result = module_->method_names ();
507522 if (!names_result.ok ()) {
@@ -571,6 +586,7 @@ class ExecuTorchJni : public facebook::jni::HybridClass<ExecuTorchJni> {
571586 makeNativeMethod (
572587 " readLogBufferStaticNative" , ExecuTorchJni::readLogBufferStatic),
573588 makeNativeMethod (" etdumpNative" , ExecuTorchJni::etdump),
589+ makeNativeMethod (" etdumpToNative" , ExecuTorchJni::etdumpTo),
574590 makeNativeMethod (" getMethodsNative" , ExecuTorchJni::getMethods),
575591 makeNativeMethod (" getUsedBackends" , ExecuTorchJni::getUsedBackends),
576592 });
0 commit comments