Skip to content

Improve power report calculation performance by omitting FullDPS and eHP unless needed - #10313

Open
AdamZ-8113 wants to merge 1 commit into
PathOfBuildingCommunity:devfrom
AdamZ-8113:perf/skip-unneeded-power-report-calcs
Open

Improve power report calculation performance by omitting FullDPS and eHP unless needed#10313
AdamZ-8113 wants to merge 1 commit into
PathOfBuildingCommunity:devfrom
AdamZ-8113:perf/skip-unneeded-power-report-calcs

Conversation

@AdamZ-8113

Copy link
Copy Markdown
Contributor

Description of the problem being solved:

The power report feature currently runs with this logic:

if (useFullDPS ~= false or build.viewMode == "TREE") and usedFullDPS then
    calcs.calcFullDPS(...)
end

Because we're always using the build.viewMode == "TREE", we're always using "Full DPS", even when the power report selected in PoB is something that doesn't require it, like "Hit DPS" or "Life".

Each report also calls calcs.perform(env) without skipEHP, so eHP is also being calculated every time. So basically if you want "Hit DPS" you're getting Hit DPS + Full DPS + eHP even though the power report only renders Hit DPS.

This change fixes this issue by only calculating Full DPS and eHP when the selected power report actually requires them.

In a benchmark test I ran with 29 builds across 10 different power report metrics, results were overwhelmingly positive. Histogram of the performance improvements below:

image

Steps taken to verify a working solution:

  • Built a benchmark tool that used "all depth" and ran benchmark across 10 different power report metrics - Histogram of the data provided above.
  • Manually compared and verified different power reports across many different builds
  • Checked both speed and correctness

Link to a build that showcases this PR:

Import this build into the current dev branch without the PR applied and run a Power Report for anything that doesn't require FullDPS or eHP, such as Attack/Cast Speed, Average Hit, Hit DPS, etc. Then apply the PR and compare the speed of calculation. It's significant enough that you can count the full seconds of timing difference. This is because "Full DPS" is very slow, and by skipping Full DPS when it's not necessary, the Power Report is much faster.

https://pob.codes/b/-MrLSBaNi7Q

Before screenshot:

N/A

After screenshot:

N/A

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant