Skip to content

Commit

Permalink
Improve useless stack frame deletion algorithm more (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
ezyang authored Jul 15, 2024
1 parent 588dd9d commit e582e38
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 16 deletions.
39 changes: 24 additions & 15 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,24 +44,33 @@ impl Default for ParseConfig {
}

fn maybe_remove_convert_frame_suffixes(frames: &mut Vec<FrameSummary>) {
let target_frames = [
("torch/_dynamo/convert_frame.py", "catch_errors"),
("torch/_dynamo/convert_frame.py", "_convert_frame"),
("torch/_dynamo/convert_frame.py", "_convert_frame_assert"),
let all_target_frames = [
[
("torch/_dynamo/convert_frame.py", "catch_errors"),
("torch/_dynamo/convert_frame.py", "_convert_frame"),
("torch/_dynamo/convert_frame.py", "_convert_frame_assert"),
],
[
("torch/_dynamo/convert_frame.py", "__call__"),
("torch/_dynamo/convert_frame.py", "__call__"),
("torch/_dynamo/convert_frame.py", "__call__"),
],
];

let len = frames.len();
if len >= target_frames.len() {
let suffix = &frames[len - target_frames.len()..];
if suffix
.iter()
.zip(target_frames.iter())
.all(|(frame, target)| {
simplify_filename(unintern_str(frame.filename).as_ref()) == target.0
&& frame.name == target.1
})
{
frames.truncate(len - target_frames.len());
for target_frames in all_target_frames {
if len >= target_frames.len() {
let suffix = &frames[len - target_frames.len()..];
if suffix
.iter()
.zip(target_frames.iter())
.all(|(frame, target)| {
simplify_filename(unintern_str(frame.filename).as_ref()) == target.0
&& frame.name == target.1
})
{
frames.truncate(len - target_frames.len());
}
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ pub fn simplify_filename<'a>(filename: &'a str) -> &'a str {
if parts.len() > 1 {
return parts[1];
}
let re = Regex::new(r"\d+e\d+-seed-nspid\d+_cgpid\d+-ns-\d+/").unwrap();
let re = Regex::new(r"[^/]+-seed-nspid[^/]+/").unwrap();
if let Some(captures) = re.captures(filename) {
if let Some(capture) = captures.get(0) {
return &filename[capture.end()..];
Expand Down

0 comments on commit e582e38

Please sign in to comment.