17
17
MultiMethodExecutorchProgram ,
18
18
MultiMethodExirExportedProgram ,
19
19
)
20
+ from executorch .exir .emit ._emitter import _DelegateDebugIdentifierMap
20
21
from executorch .exir .serde .serialize import deserialize , serialize
21
22
22
23
@@ -25,13 +26,17 @@ class ETRecordReservedFileNames(str, Enum):
25
26
PROGRAM_BUFFER = "program_buffer"
26
27
ET_DIALECT_GRAPH_MODULE = "et_dialect_graph_module"
27
28
DEBUG_HANDLE_MAP_NAME = "debug_handle_map"
29
+ DELEGATE_MAP_NAME = "delegate_map"
28
30
29
31
30
32
@dataclass
31
33
class ETRecord :
32
34
graph_map : Optional [Dict [str , ExportedProgram ]] = None
33
35
program_buffer : Optional [bytes ] = None
34
36
_debug_handle_map : Optional [Dict [int , Union [int , List [int ]]]] = None
37
+ _delegate_map : Optional [
38
+ Dict [str , Dict [int , Dict [str , Union [str , _DelegateDebugIdentifierMap ]]]]
39
+ ] = None
35
40
36
41
37
42
def _handle_exported_program (
@@ -161,6 +166,11 @@ def generate_etrecord(
161
166
json .dumps (program .debug_handle_map ),
162
167
)
163
168
169
+ etrecord_zip .writestr (
170
+ ETRecordReservedFileNames .DELEGATE_MAP_NAME ,
171
+ json .dumps (program .delegate_map ),
172
+ )
173
+
164
174
165
175
def parse_etrecord (etrecord_path : str ) -> ETRecord :
166
176
"""
@@ -190,6 +200,7 @@ def parse_etrecord(etrecord_path: str) -> ETRecord:
190
200
191
201
graph_map : Dict [str , ExportedProgram ] = {}
192
202
debug_handle_map = None
203
+ delegate_map = None
193
204
program_buffer = None
194
205
195
206
serialized_exported_program_files = set ()
@@ -199,6 +210,10 @@ def parse_etrecord(etrecord_path: str) -> ETRecord:
199
210
debug_handle_map = json .loads (
200
211
etrecord_zip .read (ETRecordReservedFileNames .DEBUG_HANDLE_MAP_NAME )
201
212
)
213
+ elif entry == ETRecordReservedFileNames .DELEGATE_MAP_NAME :
214
+ delegate_map = json .loads (
215
+ etrecord_zip .read (ETRecordReservedFileNames .DELEGATE_MAP_NAME )
216
+ )
202
217
elif entry == ETRecordReservedFileNames .PROGRAM_BUFFER :
203
218
program_buffer = etrecord_zip .read (ETRecordReservedFileNames .PROGRAM_BUFFER )
204
219
elif entry == ETRecordReservedFileNames .ETRECORD_IDENTIFIER :
@@ -223,4 +238,5 @@ def parse_etrecord(etrecord_path: str) -> ETRecord:
223
238
graph_map = graph_map ,
224
239
program_buffer = program_buffer ,
225
240
_debug_handle_map = debug_handle_map ,
241
+ _delegate_map = delegate_map ,
226
242
)
0 commit comments