Skip to content

Draft: Feature/eggwatch - #1296

Closed
Birkow wants to merge 22 commits into
DFHack:masterfrom
Birkow:feature/eggwatch
Closed

Draft: Feature/eggwatch#1296
Birkow wants to merge 22 commits into
DFHack:masterfrom
Birkow:feature/eggwatch

Conversation

@Birkow

Copy link
Copy Markdown
Contributor

lua script adding similar functionality to nestboxes with enhancements allowing to limit number of eggs forbidden per race and include live children/adult animals count in limit check.

@ab9rf

ab9rf commented Sep 7, 2024

Copy link
Copy Markdown
Member

there's no reason nestboxes should be a plugin, and replacing it with a more featureful script is entirely ok with me even if it does mean retiring my very first contributions to dfhack :)

@myk002

Copy link
Copy Markdown
Member

I'd like to understand the performance profile for a script that runs as frequently as this will. Can you show a perf report? Enable eggwatch, save the game, load it, and play "normally" for 5-10 minutes. Then save the game again. You can get the perf report from the savegame directory.

@ab9rf

ab9rf commented Sep 7, 2024

Copy link
Copy Markdown
Member

the nestbox scan itself should not be that expensive but the scan to count animals is likely to be more so. it might be an idea to run that scan less frequently and cache its results for use in the more frequent nestbox scan, which has to be run frequently or there's a chance that newly laid eggs will get snagged by hauler

but it's probably best to see profiling data before determining if such an optimization is needed

@Birkow

Birkow commented Sep 7, 2024

Copy link
Copy Markdown
ContributorAuthor

Is it correct file? this one is from save after running game with eggwatch script for ~10 minutes
https://drive.google.com/file/d/1Si389dgAXzuWuldrbvYKPsthX-YeAG8X/view?usp=drive_link
Edit:
Most of calls to script will end as soon as it's determined that created item is not fertile egg.
Edit2: fixed issue with link

@Birkow

Copy link
Copy Markdown
ContributorAuthor

Did some refactoring, added tags for script-enable-api, added hook dfhack.onStateChange, replaced internal use of creature_id with race. Pref report after last changes below:

dfhack-perf-counters.dat Summary -------

Measuring unpaused time only

elapsed 1757311 ms (29m 17s)
dfhack 110260 ms ( 6.27% of elapsed)

DFHack details

keybinding 0 ms ( 0.00% of dfhack, 0.00% of elapsed)
update 21603 ms ( 19.59% of dfhack, 1.23% of elapsed)
overlay 88595 ms ( 80.35% of dfhack, 5.04% of elapsed)
zscreen 62 ms ( 0.06% of dfhack, 0.00% of elapsed)

Update details

event manager 4356 ms ( 20.16% of update, 0.25% of elapsed)
plugin onUpdate 11768 ms ( 54.47% of update, 0.67% of elapsed)
lua timers 5103 ms ( 23.62% of update, 0.29% of elapsed)

Event manager per event type

 UNIT_NEW_ACTIVE 1470 ms ( 33.75% of event manager, 0.08% of elapsed)
JOB_COMPLETED 1013 ms ( 23.26% of event manager, 0.06% of elapsed)
JOB_STARTED 716 ms ( 16.44% of event manager, 0.04% of elapsed)
JOB_INITIATED 439 ms ( 10.08% of event manager, 0.02% of elapsed)
BUILDING 310 ms ( 7.12% of event manager, 0.02% of elapsed)
ITEM_CREATED 62 ms ( 1.42% of event manager, 0.00% of elapsed)
framework 346 ms ( 7.94% of event manager, 0.02% of elapsed)
all subtimers 4010 ms ( 92.06% of event manager, 0.23% of elapsed)

Event manager JOB_INITIATED event per plugin

 eventful 267 ms ( 60.82% of event type, 0.02% of elapsed)
suspendmanager 47 ms ( 10.71% of event type, 0.00% of elapsed)
framework 125 ms ( 28.47% of event type, 0.01% of elapsed)
all subtimers 314 ms ( 71.53% of event type, 0.02% of elapsed)

Event manager JOB_STARTED event per plugin

 framework 716 ms (100.00% of event type, 0.04% of elapsed)
all subtimers 0 ms ( 0.00% of event type, 0.00% of elapsed)

Event manager JOB_COMPLETED event per plugin

 framework 1013 ms (100.00% of event type, 0.06% of elapsed)
all subtimers 0 ms ( 0.00% of event type, 0.00% of elapsed)

Event manager ITEM_CREATED event per plugin

 eventful 46 ms ( 74.19% of event type, 0.00% of elapsed)
framework 16 ms ( 25.81% of event type, 0.00% of elapsed)
all subtimers 46 ms ( 74.19% of event type, 0.00% of elapsed)

Event manager UNIT_NEW_ACTIVE event per plugin

 eventful 31 ms ( 2.11% of event type, 0.00% of elapsed)
framework 1439 ms ( 97.89% of event type, 0.08% of elapsed)
all subtimers 31 ms ( 2.11% of event type, 0.00% of elapsed)

Update per plugin

 overlay 7680 ms ( 65.26% of update, 0.44% of elapsed)
autofarm 691 ms ( 5.87% of update, 0.04% of elapsed)
autochop 565 ms ( 4.80% of update, 0.03% of elapsed)
preserve-rooms 373 ms ( 3.17% of update, 0.02% of elapsed)
logistics 235 ms ( 2.00% of update, 0.01% of elapsed)
tailor 233 ms ( 1.98% of update, 0.01% of elapsed)
dwarfvet 189 ms ( 1.61% of update, 0.01% of elapsed)
nestboxes 110 ms ( 0.93% of update, 0.01% of elapsed)
3dveins 94 ms ( 0.80% of update, 0.01% of elapsed)
seedwatch 80 ms ( 0.68% of update, 0.00% of elapsed)
RemoteFortressReader 79 ms ( 0.67% of update, 0.00% of elapsed)
autobutcher 63 ms ( 0.54% of update, 0.00% of elapsed)
autolabor 48 ms ( 0.41% of update, 0.00% of elapsed)
eventful 48 ms ( 0.41% of update, 0.00% of elapsed)
pet-uncapper 48 ms ( 0.41% of update, 0.00% of elapsed)
buildingplan 47 ms ( 0.40% of update, 0.00% of elapsed)
autoclothing 47 ms ( 0.40% of update, 0.00% of elapsed)
design 32 ms ( 0.27% of update, 0.00% of elapsed)
add-spatter 32 ms ( 0.27% of update, 0.00% of elapsed)
tweak 31 ms ( 0.26% of update, 0.00% of elapsed)
suspendmanager 31 ms ( 0.26% of update, 0.00% of elapsed)
zone 31 ms ( 0.26% of update, 0.00% of elapsed)
autonestbox 30 ms ( 0.25% of update, 0.00% of elapsed)
fastdwarf 30 ms ( 0.25% of update, 0.00% of elapsed)
getplants 30 ms ( 0.25% of update, 0.00% of elapsed)
dig 30 ms ( 0.25% of update, 0.00% of elapsed)
prospector 16 ms ( 0.14% of update, 0.00% of elapsed)
burrow 16 ms ( 0.14% of update, 0.00% of elapsed)
stonesense 16 ms ( 0.14% of update, 0.00% of elapsed)
cxxrandom 16 ms ( 0.14% of update, 0.00% of elapsed)
liquids 16 ms ( 0.14% of update, 0.00% of elapsed)
cleanowned 16 ms ( 0.14% of update, 0.00% of elapsed)
faststart 16 ms ( 0.14% of update, 0.00% of elapsed)
lair 16 ms ( 0.14% of update, 0.00% of elapsed)
tiletypes 16 ms ( 0.14% of update, 0.00% of elapsed)
sort 16 ms ( 0.14% of update, 0.00% of elapsed)
stocks 16 ms ( 0.14% of update, 0.00% of elapsed)
probe 16 ms ( 0.14% of update, 0.00% of elapsed)
xlsxreader 15 ms ( 0.13% of update, 0.00% of elapsed)
strangemood 15 ms ( 0.13% of update, 0.00% of elapsed)
misery 15 ms ( 0.13% of update, 0.00% of elapsed)
framework 624 ms ( 5.30% of update, 0.04% of elapsed)
all subtimers 11144 ms ( 94.70% of update, 0.63% of elapsed)

State change per plugin

 framework 11768 ms (100.00% of update, 0.67% of elapsed)
all subtimers 0 ms ( 0.00% of update, 0.00% of elapsed)

Lua timer details

 control-panel/combine 1624 ms ( 31.82% of lua timers, 0.09% of elapsed)
control-panel/fix/ownership 856 ms ( 16.77% of lua timers, 0.05% of elapsed)
control-panel/fix/general-strike 547 ms ( 10.72% of lua timers, 0.03% of elapsed)
control-panel/fix/noexert-exhaustion 485 ms ( 9.50% of lua timers, 0.03% of elapsed)
autofish 408 ms ( 8.00% of lua timers, 0.02% of elapsed)
control-panel/fix/dry-buckets 405 ms ( 7.94% of lua timers, 0.02% of elapsed)
control-panel/fix/empty-wheelbarrows 235 ms ( 4.61% of lua timers, 0.01% of elapsed)
control-panel/fix/stuck-worship 112 ms ( 2.19% of lua timers, 0.01% of elapsed)
control-panel/fix/stuck-instruments 62 ms ( 1.21% of lua timers, 0.00% of elapsed)
control-panel/fix/engravings 60 ms ( 1.18% of lua timers, 0.00% of elapsed)
control-panel/orders-sort 16 ms ( 0.31% of lua timers, 0.00% of elapsed)
control-panel/fix/dead-units 16 ms ( 0.31% of lua timers, 0.00% of elapsed)
control-panel/automilk 16 ms ( 0.31% of lua timers, 0.00% of elapsed)
control-panel/autoshear 15 ms ( 0.29% of lua timers, 0.00% of elapsed)
framework 246 ms ( 4.82% of lua timers, 0.01% of elapsed)
all subtimers 4857 ms ( 95.18% of lua timers, 0.28% of elapsed)

Overlay details

 agitation-rebalance.monitor 17260 ms ( 19.48% of overlay, 0.98% of elapsed)
gui/civ-alert.big_red_button 11458 ms ( 12.93% of overlay, 0.65% of elapsed)
gui/notify.panel 10291 ms ( 11.62% of overlay, 0.59% of elapsed)
hotkeys.menu 3347 ms ( 3.78% of overlay, 0.19% of elapsed)
sort.slab 1735 ms ( 1.96% of overlay, 0.10% of elapsed)
suspendmanager.overlay 1714 ms ( 1.93% of overlay, 0.10% of elapsed)
sort.info 894 ms ( 1.01% of overlay, 0.05% of elapsed)
sort.places 611 ms ( 0.69% of overlay, 0.03% of elapsed)
sort.elevate_barony 587 ms ( 0.66% of overlay, 0.03% of elapsed)
sort.candidates 513 ms ( 0.58% of overlay, 0.03% of elapsed)
sort.location_selector 392 ms ( 0.44% of overlay, 0.02% of elapsed)
sort.world 361 ms ( 0.41% of overlay, 0.02% of elapsed)
framework 39432 ms ( 44.51% of overlay, 2.24% of elapsed)
all subtimers 49163 ms ( 55.49% of overlay, 2.80% of elapsed)

ZScreen details

 launcher 62 ms (100.00% of zscreen, 0.00% of elapsed)
framework 0 ms ( 0.00% of zscreen, 0.00% of elapsed)
all subtimers 62 ms (100.00% of zscreen, 0.00% of elapsed)

@Birkow

Copy link
Copy Markdown
ContributorAuthor

moved to DFHack/dfhack#4947

@BirkowBirkow closed this Sep 18, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

No open projects
Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

@Birkow@ab9rf@myk002