Support for alternate backends
Opened this issue · 5 comments
Over on ros-planning/navigation2 we've been encountering some recent heavy performance regressions in processing our code coverage reports. From what previously took about 3m, to now what recently takes up to +30m. We tried swapping to colcon lcov-result
, as noted by a commit in the PR below, but the time performance improvements was only marginal. For further details:
ros-navigation/navigation2#2391
We are not yet sure what the original root cause for the performance regression was, but we found a nice alternative to mediate the issue by swapping out our original calls to lcov and making use of fastcov
instead to speed up nav2 CI:
https://github.com/RPGillespie6/fastcov
What took about 30 minutes now only takes about 30 seconds! I figured this kind of improvement would be advantageous for other colcon build tool users. Also, by opening this ticket with folks more familiar with lcov, perhaps we could get to the bottom of the current performance regression.
CC: @SteveMacenski @nuclearsandwich @RPGillespie6 @christophebedard
Weird! I'll look at my CI logs/try manually and see if I see the same performance issue.
Support for alternate backends
Is this something you would be interested in contributing? E.g. a --fastcov
option to use that as the backend.
Also, there is an open issue on https://github.com/colcon/colcon-core about writing a "colcon universal coverage result tool" which is kind of relevant: colcon/colcon-core#359
As far as I can tell from a quick look at docs, fastcov is just lcov but parallelized for the files to speed things up. I don't actually see much, if any, reason to not simply replace it to use fastcov in general
As far as I can tell from a quick look at docs, fastcov is just lcov but parallelized for the files to speed things up. I don't actually see much, if any, reason to not simply replace it to use fastcov in general
Good point.
I was going to say that lcov is available through apt
while fastcov is only available through PyPI, but colcon-lcov-result
doesn't even declare a dependency on lcov.
However, I guess we can assume it's probably installed whereas fastcov would need to be installed manually. I think it's not a huge blocker though.
Is this something you would be interested in contributing? E.g. a --fastcov option to use that as the backend.
If I manage to get a seperate coverage issue resolved, then I could spare some time to help.
but colcon-lcov-result doesn't even declare a dependency on lcov.
I think it's using gcov:
which must come with build-essential
or something by default in apt, as we don't explicitly install it in our Dockerfile.