BaseTools: cache the defined Guid tool to improve the performance

Current GenFds Tool class GuidSection() is parsing the tools_def.txt for
every GUID'ed section that has a GUID defined tool, it cause a bad
performance. so this patch cache the defined Guid tool to improve the
performance.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Yonghong Zhu 2016-03-29 12:59:43 +08:00
parent 024bdafc68
commit 213ae07750
2 changed files with 8 additions and 3 deletions

View File

@ -1,7 +1,7 @@
## @file ## @file
# Global variables for GenFds # Global variables for GenFds
# #
# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
# #
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -68,6 +68,7 @@ class GenFdsGlobalVariable:
BuildRuleFamily = "MSFT" BuildRuleFamily = "MSFT"
ToolChainFamily = "MSFT" ToolChainFamily = "MSFT"
__BuildRuleDatabase = None __BuildRuleDatabase = None
GuidToolDefinition = {}
# #
# The list whose element are flags to indicate if large FFS or SECTION files exist in FV. # The list whose element are flags to indicate if large FFS or SECTION files exist in FV.

View File

@ -1,7 +1,7 @@
## @file ## @file
# process GUIDed section generation # process GUIDed section generation
# #
# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
# #
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -268,6 +268,10 @@ class GuidSection(GuidSectionClassObject) :
if Target + '_' + ToolChain + '_' + Arch not in self.KeyStringList: if Target + '_' + ToolChain + '_' + Arch not in self.KeyStringList:
self.KeyStringList.append(Target + '_' + ToolChain + '_' + Arch) self.KeyStringList.append(Target + '_' + ToolChain + '_' + Arch)
if GenFdsGlobalVariable.GuidToolDefinition:
if self.NameGuid in GenFdsGlobalVariable.GuidToolDefinition.keys():
return GenFdsGlobalVariable.GuidToolDefinition[self.NameGuid]
ToolDefinition = ToolDefClassObject.ToolDefDict(GenFdsGlobalVariable.ConfDir).ToolsDefTxtDictionary ToolDefinition = ToolDefClassObject.ToolDefDict(GenFdsGlobalVariable.ConfDir).ToolsDefTxtDictionary
ToolPathTmp = None ToolPathTmp = None
ToolOption = None ToolOption = None
@ -298,7 +302,7 @@ class GuidSection(GuidSectionClassObject) :
if ToolPathTmp != ToolPath: if ToolPathTmp != ToolPath:
EdkLogger.error("GenFds", GENFDS_ERROR, "Don't know which tool to use, %s or %s ?" % (ToolPathTmp, ToolPath)) EdkLogger.error("GenFds", GENFDS_ERROR, "Don't know which tool to use, %s or %s ?" % (ToolPathTmp, ToolPath))
GenFdsGlobalVariable.GuidToolDefinition[self.NameGuid] = (ToolPathTmp, ToolOption)
return ToolPathTmp, ToolOption return ToolPathTmp, ToolOption