diff options
author | Etienne Cordonnier <ecordonnier@snap.com> | 2023-02-01 15:19:00 +0100 |
---|---|---|
committer | Steve Sakoman <steve@sakoman.com> | 2023-02-06 04:34:02 -1000 |
commit | 592ee222a1c6da42925fb56801f226884b6724ec (patch) | |
tree | 6718aa09d05269256bde2e3579c79d912afb4407 /LICENSE | |
parent | a40fc6a3f774bcb28cf72701ac146ceb7ae8061a (diff) | |
download | bitbake-yocto-4.1.3.tar.gz |
siggen: Fix inefficient string concatenationyocto-4.1.32022-10.3-langdale2.2.3
As discussed in https://stackoverflow.com/a/4435752/1710392 , CPython
has an optimization for statements in the form "a = a + b" or "a += b".
It seems that this line does not get optimized, because it has a form a = a + b + c:
data = data + "./" + f.split("/./")[1]
For that reason, it does a copy of data for each iteration, potentially copying megabytes
of data for each iteration.
Changing this line causes SignatureGeneratorBasic::get_taskhash to take 0.06 seconds
instead of 45 seconds on my test setup where SRC_URI points to a big directory.
Note that PEP8 recommends explicitely not to use this optimization which is specific to CPython:
"do not rely on CPython’s efficient implementation of in-place string concatenation for statements in the form a += b or a = a + b"
However, the PEP8 recommended form using "join()" also does not avoid the copy and takes 45 seconds in my test setup:
data = ''.join((data, "./", f.split("/./")[1]))
I have changed the other lines to also use += for consistency only, however those were in the form a = a + b
and were optimized already.
Co-authored-by: JJ Robertson <jrobertson@snap.com>
Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 195750f2ca355e29d51219c58ecb2c1d83692717)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Diffstat (limited to 'LICENSE')
0 files changed, 0 insertions, 0 deletions