Browse Source

feat(profiling): Mark partially deobfuscated android frames (#51926)

We'd like to be able to identify which frames are only partially
deobfuscated.
Tony Xiao 1 year ago
parent
commit
f9b9147831
1 changed files with 6 additions and 0 deletions
  1. 6 0
      src/sentry/profiles/task.py

+ 6 - 0
src/sentry/profiles/task.py

@@ -621,6 +621,7 @@ def _deobfuscate(profile: Profile, project: Project) -> None:
             mapped = mapper.remap_frame(
                 method["class_name"], method["name"], method["source_line"] or 0
             )
+            method.setdefault("data", {})
             if len(mapped) == 1:
                 new_frame = mapped[0]
                 method.update(
@@ -631,6 +632,7 @@ def _deobfuscate(profile: Profile, project: Project) -> None:
                         "source_line": new_frame.line,
                     }
                 )
+                method["data"]["deobfuscation_status"] = "deobfuscated"
             elif len(mapped) > 1:
                 bottom_class = mapped[-1].class_name
                 method["inline_frames"] = [
@@ -641,6 +643,7 @@ def _deobfuscate(profile: Profile, project: Project) -> None:
                         if bottom_class == new_frame.class_name
                         else None,
                         "source_line": new_frame.line,
+                        "data": {"deobfuscation_status": "deobfuscated"},
                     }
                     for new_frame in mapped
                 ]
@@ -648,6 +651,9 @@ def _deobfuscate(profile: Profile, project: Project) -> None:
                 mapped_class = mapper.remap_class(method["class_name"])
                 if mapped_class:
                     method["class_name"] = mapped_class
+                    method["data"]["deobfuscation_status"] = "partial"
+                else:
+                    method["data"]["deobfuscation_status"] = "missing"
 
 
 @metrics.wraps("process_profile.track_outcome")