Skip to content

BaseTools: Optimize GenerateByteArrayValue and CollectPlatformGuids APIs - #5356

Merged
mergify[bot] merged 1 commit into
tianocore:masterfrom
mdkinney:Bug_xxx_BaseToolsOptimizeGenerateByteArrayValue
Feb 8, 2024
Merged

mergify[bot] merged 1 commit into
tianocore:masterfrom
mdkinney:Bug_xxx_BaseToolsOptimizeGenerateByteArrayValue

Conversation

@mdkinney

@mdkinney mdkinney commented Feb 8, 2024

Copy link
Copy Markdown
Member

During the Incremental build GenerateByteArrayValue used to generate the ByteArrayValue even when there is no change in the PCD/VPDs. which is time consuming API based on the number of PCD/VPDs and SKU IDs.

The optimization is that GenerateByteArrayValue is used to store the StructuredPcdsData in a JSON file for each of the arch. and during the Incremental build this API will check, if there is any change in the Structured PCD/VPDs then rest of the flow remains the same. if there is no change then it will return the provious build data.

Flow:
during the 1st build StructuredPcdsData.json is not exists, StructuredPcdsData will be dumped to json file. and it will copy the output.txt as well.
Note: as the output.txt are different for different Arch, so it will be stored in the Arch folder.
During the Incremental build check if there is any change in Structured PCD/VPD. if there is a change in Structured VPD/PCD then recreate the StructuredPcdsData.json, and rest of the flow remains same. if there is no change in VPD/PCD read the output.txt and return the data

Unit Test:
Test1: Modified the Structured Pcds default from DEC file. current flow is executing.
Test2: Override the default value of the PCD from DEC file. current flow is executing.
Test3: Modified/Override the PCD from DSC file. current flow executing Test4: Modified/Override the FDF from DSC file. current flow executing Test5: update the default value from Command Line.current flow executing Test6: Build without change in PCD in DSC, FDF, DEC and Command Line the proposed changes will be executing, and the return data remains the same with and without the changes.
Test7: Build with and without modified the include headers of Structured PCDs. if there is any change in those Structured PCD header then current flow will be executed.

With these changes it's helping to save around ~2.5min to ~3.5min of Incremental build time in my build environment.

Sample PR: tianocore/edk2-basetools#113

Cc: Yuwei Chen yuwei.chen@intel.com
Cc: Rebecca Cran rebecca@bsdio.com
Cc: Liming Gao gaoliming@byosoft.com.cn
Cc: Bob Feng bob.c.feng@intel.com
Cc: Amy Chan amy.chan@intel.com
Cc: Sai Chaganty rangasai.v.chaganty@intel.com
Cc: Digant H Solanki digant.h.solanki@intel.com

Reviewed-by: Yuwei Chen yuwei.chen@intel.com

During the Incremental build GenerateByteArrayValue used to generate the
ByteArrayValue even when there is no change in the PCD/VPDs. which is
time consuming API based on the number of PCD/VPDs and SKU IDs.

The optimization is that GenerateByteArrayValue is used to store the
StructuredPcdsData in a JSON file for each of the arch. and during the
Incremental build this API will check, if there is any change in the
Structured PCD/VPDs then rest of the flow remains the same.
if there is no change then it will return the provious build data.

Flow:
during the 1st build StructuredPcdsData.json is not exists,
StructuredPcdsData will be dumped to json file. and it will copy the
output.txt as well.
Note: as the output.txt are different for different Arch, so it will be
stored in the Arch folder.
During the Incremental build check if there is any change in Structured
PCD/VPD. if there is a change in Structured VPD/PCD then recreate the
StructuredPcdsData.json, and rest of the flow remains same.
if there is no change in VPD/PCD read the output.txt and return the data

Unit Test:
Test1: Modified the Structured Pcds default from DEC file. current flow
is executing.
Test2: Override the default value of the PCD from DEC file. current flow
is executing.
Test3: Modified/Override the PCD from DSC file. current flow executing
Test4: Modified/Override the FDF from DSC file. current flow executing
Test5: update the default value from Command Line.current flow executing
Test6: Build without change in PCD in DSC, FDF, DEC and Command Line the
proposed changes will be executing, and the return data remains the same
with and without the changes.
Test7: Build with and without modified the include headers of Structured
PCDs. if there is any change in those Structured PCD header then
current flow will be executed.

With these changes it's helping to save around ~2.5min to ~3.5min of
Incremental build time in my build environment.

Sample PR: tianocore/edk2-basetools#113

Cc: Yuwei Chen <yuwei.chen@intel.com>
Cc: Rebecca Cran <rebecca@bsdio.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Amy Chan <amy.chan@intel.com>
Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
Cc: Digant H Solanki <digant.h.solanki@intel.com>
Signed-off-by: Ashraf Ali S <ashraf.ali.s@intel.com>
Reviewed-by: Yuwei Chen <yuwei.chen@intel.com>
@mdkinney mdkinney added the push Auto push patch series in PR if all checks pass label Feb 8, 2024
@mergify
mergify Bot merged commit 8f316e9 into tianocore:master Feb 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

push Auto push patch series in PR if all checks pass

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant