Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch TLV::Tag to being a struct #13219

Merged
merged 2 commits into from
Dec 23, 2021

Conversation

bzbarsky-apple
Copy link
Contributor

Problem

People keep mixing up tags and tag numbers.

Change overview

Make Tag a struct with constexpr constructor.

There are some changes to replace const static members with constexpr functions (which are smaller codesize-wise than static constexpr members), and to replace AnonymousTag with a constexpr function, also because this reduces codesize compared to it being a static constexpr variable.

Without those various changes the codesize increase was close to 1KB instead of ~200 bytes.

I've left the methods that operate on Tag instances as free functions for now, but as a followup we can make them be class members.

Testing

Tree compiles. No behavior changes intended.

The changes to the static TLV tags in groups code are to reduce
codesize: constexpr functions get compiled smaller than static
constexpr variables.
This leads to smaller compiled code.  We might be able to get the same
with an inline constexpr variable, but those are C++17.

This diff waas mostly generated with:

  git grep -l AnonymousTag | xargs perl -pi -e 's/AnonymousTag/AnonymousTag()/g'
@github-actions
Copy link

github-actions bot commented Dec 22, 2021

PR #13219: Size comparison from fcbcac2 to ea56438

Increases above 0.2%:

platform target config section fcbcac2 ea56438 change % change
linux chip-tool-ipv6only arm64 (read only) 6997268 7018732 21464 0.3
.text 5920004 5941460 21456 0.4
thermostat-no-ble arm64 (read only) 2011508 2021852 10344 0.5
.text 1670512 1680848 10336 0.6
Increases (14 builds for efr32, esp32, k32w, linux, mbed, nrfconnect, p6, qpg, telink)
platform target config section fcbcac2 ea56438 change % change
efr32 lighting-app BRD4161A (read only) 828908 828924 16 0.0
.text 828900 828916 16 0.0
esp32 all-clusters-app m5stack (read only) 942807 943027 220 0.0
.flash.text 937423 937643 220 0.0
k32w lock k32w061+release (read/write) 632248 632264 16 0.0
.text 548692 548708 16 0.0
linux chip-tool-ipv6only arm64 (read only) 6997268 7018732 21464 0.3
.rodata 383884 383892 8 0.0
.text 5920004 5941460 21456 0.4
thermostat-no-ble arm64 (read only) 2011508 2021852 10344 0.5
.rodata 128468 128476 8 0.0
.text 1670512 1680848 10336 0.6
mbed lock-app CY8CPROTO_062_4343W+release (read/write) 2302192 2302200 8 0.0
.text 1264792 1264800 8 0.0
nrfconnect lock-app nrf52840dk_nrf52840 (read/write) 907491 907507 16 0.0
text 609448 609460 12 0.0
nrf5340dk_nrf5340_cpuapp (read/write) 831406 831422 16 0.0
text 536924 536940 16 0.0
pump-controller-app nrf52840dk_nrf52840 (read/write) 905571 905587 16 0.0
text 608196 608208 12 0.0
p6 all-clusters-app default (read/write) 2390792 2390808 16 0.0
.text 1349056 1349072 16 0.0
light-app default (read/write) 2323648 2323680 32 0.0
.text 1281912 1281944 32 0.0
lock-app default (read/write) 2295864 2295880 16 0.0
.text 1254128 1254144 16 0.0
qpg lock-app qpg6105+debug (read only) 502860 502876 16 0.0
.text 497540 497556 16 0.0
telink lighting-app tlsr9518adk80d (read/write) 831682 831754 72 0.0
text 580162 580232 70 0.0
Decreases (9 builds for esp32, k32w, mbed, nrfconnect, qpg)
platform target config section fcbcac2 ea56438 change % change
esp32 all-clusters-app c3devkit (read only) 882588 882558 -30 -0.0
.flash.text 882588 882558 -30 -0.0
k32w light k32w061+release (read/write) 647520 647440 -80 -0.0
.text 563632 563552 -80 -0.0
mbed all-clusters-app CY8CPROTO_062_4343W+release (read/write) 2338880 2338696 -184 -0.0
.text 1301456 1301272 -184 -0.0
lighting-app CY8CPROTO_062_4343W+release (read/write) 2329160 2329040 -120 -0.0
.text 1291760 1291640 -120 -0.0
nrfconnect lighting-app nrf52840dk_nrf52840 (read/write) 935343 935247 -96 -0.0
text 631620 631528 -92 -0.0
nrf52840dk_nrf52840+rpc (read/write) 921747 921651 -96 -0.0
text 626932 626840 -92 -0.0
nrf5340dk_nrf5340_cpuapp (read/write) 859110 859014 -96 -0.0
text 559060 558964 -96 -0.0
pump-app nrf52840dk_nrf52840 (read/write) 908755 908739 -16 -0.0
text 610684 610676 -8 -0.0
qpg lighting-app qpg6105+debug (read only) 531192 531096 -96 -0.0
.text 525872 525776 -96 -0.0
Full report (31 builds for efr32, esp32, k32w, linux, mbed, nrfconnect, p6, qpg, telink)
platform target config section fcbcac2 ea56438 change % change
efr32 lighting-app BRD4161A (read only) 828908 828924 16 0.0
(read/write) 127052 127052 0 0.0
.bss 125176 125176 0 0.0
.data 1876 1876 0 0.0
.text 828900 828916 16 0.0
BRD4161A+rpc (read only) 816552 816552 0 0.0
(read/write) 143720 143720 0 0.0
.bss 141744 141744 0 0.0
.data 1976 1976 0 0.0
.text 816544 816544 0 0.0
window-app BRD4161A (read only) 802372 802372 0 0.0
(read/write) 125992 125992 0 0.0
.bss 124160 124160 0 0.0
.data 1832 1832 0 0.0
.text 802364 802364 0 0.0
esp32 all-clusters-app c3devkit (read only) 882588 882558 -30 -0.0
(read/write) 1312402 1312402 0 0.0
.dram0.bss 69072 69072 0 0.0
.dram0.data 14220 14220 0 0.0
.flash.rodata 176056 176056 0 0.0
.flash.text 882588 882558 -30 -0.0
.iram0.text 62254 62254 0 0.0
m5stack (read only) 942807 943027 220 0.0
(read/write) 441512 441512 0 0.0
.dram0.bss 73568 73568 0 0.0
.dram0.data 34056 34056 0 0.0
.flash.rodata 202880 202880 0 0.0
.flash.text 937423 937643 220 0.0
.iram0.text 122671 122671 0 0.0
k32w light k32w061+release (read/write) 647520 647440 -80 -0.0
.bss 76184 76184 0 0.0
.data 1904 1904 0 0.0
.text 563632 563552 -80 -0.0
lock k32w061+release (read/write) 632248 632264 16 0.0
.bss 75896 75896 0 0.0
.data 1860 1860 0 0.0
.text 548692 548708 16 0.0
linux chip-tool-ipv6only arm64 (read only) 6997268 7018732 21464 0.3
(read/write) 325841 325841 0 0.0
.bss 54209 54209 0 0.0
.data 1096 1096 0 0.0
.data.rel.ro 210056 210056 0 0.0
.dynamic 560 560 0 0.0
.got 56776 56776 0 0.0
.init 24 24 0 0.0
.init_array 168 168 0 0.0
.rodata 383884 383892 8 0.0
.text 5920004 5941460 21456 0.4
thermostat-no-ble arm64 (read only) 2011508 2021852 10344 0.5
(read/write) 143937 143937 0 0.0
.bss 63985 63985 0 0.0
.data 880 880 0 0.0
.data.rel.ro 72200 72200 0 0.0
.dynamic 560 560 0 0.0
.got 3936 3936 0 0.0
.init 24 24 0 0.0
.init_array 296 296 0 0.0
.rodata 128468 128476 8 0.0
.text 1670512 1680848 10336 0.6
mbed all-clusters-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2338880 2338696 -184 -0.0
.bss 188332 188332 0 0.0
.data 5272 5272 0 0.0
.text 1301456 1301272 -184 -0.0
lighting-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2329160 2329040 -120 -0.0
.bss 180608 180608 0 0.0
.data 5552 5552 0 0.0
.text 1291760 1291640 -120 -0.0
lock-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2302192 2302200 8 0.0
.bss 179656 179656 0 0.0
.data 5544 5544 0 0.0
.text 1264792 1264800 8 0.0
pigweed-app CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 1140008 1140008 0 0.0
.bss 11756 11756 0 0.0
.data 4368 4368 0 0.0
.text 103392 103392 0 0.0
shell CY8CPROTO_062_4343W+release (read only) 6224 6224 0 0.0
(read/write) 2053888 2053888 0 0.0
.bss 156972 156972 0 0.0
.data 4864 4864 0 0.0
.text 1016488 1016488 0 0.0
nrfconnect lighting-app nrf52840dk_nrf52840 (read/write) 935343 935247 -96 -0.0
bss 118172 118172 0 0.0
rodata 107996 107996 0 0.0
text 631620 631528 -92 -0.0
nrf52840dk_nrf52840+rpc (read/write) 921747 921651 -96 -0.0
bss 115216 115216 0 0.0
rodata 101416 101416 0 0.0
text 626932 626840 -92 -0.0
nrf5340dk_nrf5340_cpuapp (read/write) 859110 859014 -96 -0.0
bss 116456 116456 0 0.0
rodata 102924 102924 0 0.0
text 559060 558964 -96 -0.0
lock-app nrf52840dk_nrf52840 (read/write) 907491 907507 16 0.0
bss 117360 117360 0 0.0
rodata 103304 103304 0 0.0
text 609448 609460 12 0.0
nrf5340dk_nrf5340_cpuapp (read/write) 831406 831422 16 0.0
bss 115672 115672 0 0.0
rodata 98268 98268 0 0.0
text 536924 536940 16 0.0
pigweed-app nrf52840dk_nrf52840 (read/write) 542351 542351 0 0.0
bss 52588 52588 0 0.0
rodata 50668 50668 0 0.0
text 376892 376892 0 0.0
pump-app nrf52840dk_nrf52840 (read/write) 908755 908739 -16 -0.0
bss 117120 117120 0 0.0
rodata 103520 103520 0 0.0
text 610684 610676 -8 -0.0
pump-controller-app nrf52840dk_nrf52840 (read/write) 905571 905587 16 0.0
bss 117148 117148 0 0.0
rodata 102776 102776 0 0.0
text 608196 608208 12 0.0
shell nrf52840dk_nrf52840 (read/write) 796871 796871 0 0.0
bss 109536 109536 0 0.0
rodata 78200 78200 0 0.0
text 532680 532680 0 0.0
nrf5340dk_nrf5340_cpuapp (read/write) 709502 709502 0 0.0
bss 107424 107424 0 0.0
rodata 72500 72500 0 0.0
text 450172 450172 0 0.0
p6 all-clusters-app default (read/write) 2390792 2390808 16 0.0
.bss 116532 116532 0 0.0
.data 2552 2552 0 0.0
.text 1349056 1349072 16 0.0
light-app default (read/write) 2323648 2323680 32 0.0
.bss 105856 105856 0 0.0
.data 2384 2384 0 0.0
.text 1281912 1281944 32 0.0
lock-app default (read/write) 2295864 2295880 16 0.0
.bss 104736 104736 0 0.0
.data 2336 2336 0 0.0
.text 1254128 1254144 16 0.0
qpg lighting-app qpg6105+debug (read only) 531192 531096 -96 -0.0
(read/write) 146936 146936 0 0.0
.bss 86656 86656 0 0.0
.data 1004 1004 0 0.0
.text 525872 525776 -96 -0.0
lock-app qpg6105+debug (read only) 502860 502876 16 0.0
(read/write) 146940 146940 0 0.0
.bss 85792 85792 0 0.0
.data 952 952 0 0.0
.text 497540 497556 16 0.0
persistent-storage-app qpg6105+debug (read only) 106448 106448 0 0.0
(read/write) 146938 146938 0 0.0
.bss 36146 36146 0 0.0
.data 288 288 0 0.0
.text 101128 101128 0 0.0
telink lighting-app tlsr9518adk80d (read/write) 831682 831754 72 0.0
bss 86840 86840 0 0.0
noinit 37160 37160 0 0.0
text 580162 580232 70 0.0

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

Successfully merging this pull request may close these issues.

4 participants