Merge pull request #3597 from RosettaCommons/roccomoretti/interactive_roscriptfilter_fix
Foldit: Speed up RoScriptScoreFilter, Symmetry
Symmetry in Foldit was slow because our resymmetrization used one-by-one xyz resets, rather than a batch one. (Thanks @vmullig for the pointer)
The RoScriptScoreFilter in Foldit was slow for two reasons.
1. There's a unnecessary pose copy in a pass-by-value call. (Probably 2/3rds of the time)
2. The get_representative_type_aa() call in can_design() was spending a bunch of time in apply_metapatches_recursively(). We probably don't need to check metapatches here, so we can add a facility to skip the check.
This PR Fixes both issues.
RELEASE NOTES: Fixed bugs which were slowing down symmetry puzzles.
Merge pull request #3580 from RosettaCommons/roccomoretti/interactive_lua_bonus_filter
Foldit: Fix issue with Lua scripting and Condition Filters
With the filter re-write, attempting to use on a filter which is not a BonusFilter will result in a crash of Foldit as a whole. Update things such that it just raises an error within Lua itself. Additionally, add a function which will allow scripts to tell if a given filter will raise such an error when passed to GetBonus().
Release Notes:
* Lua: Fix filter.GetBonus() to raise an error rather than crashing when passed the Exploration filter.
* Lua: Add a filter.HasBonus() which returns true if filter.GetBonus() returns a value, false otherwise.
Merge pull request #3518 from RosettaCommons/roccomoretti/interactive_thread_fixes
Foldit: Fix threading issues found with Clang Thread Sanitizer
Using the Thread Sanitizer from Clang 7, I identified a number of locations where we had potential deadlock issues, as well as some locations where the Thread Sanitizer reported potential data races. This PR doesn't fix all the issues identified by the Thread Sanitizer (there are still some potential race conditions with the sound and the graphics subsystems, and with logging file output, as well as potential issues where I wasn't testing).
Release Note: Fixed latent multithreading bug which resulted in Foldit sometimes hanging.