Commit 342b83d4 by Olli Etuaho Committed by Commit Bot

Don't copy unmangled built-in names

This optimizes memory and CPU use of symbol table initialization. This was measured to make a debug build of angle_unittests run around 10% faster on Windows. BUG=angleproject:2267 TEST=angle_unittests Change-Id: Icd5272c6cfc0d5122550c403621bfa5944c92a83 Reviewed-on: https://chromium-review.googlesource.com/859958Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent a08d410d
...@@ -55,6 +55,16 @@ TSymbol *TSymbolTableLevel::find(const TString &name) const ...@@ -55,6 +55,16 @@ TSymbol *TSymbolTableLevel::find(const TString &name) const
return (*it).second; return (*it).second;
} }
void TSymbolTableLevel::insertUnmangledBuiltInName(const char *name)
{
mUnmangledBuiltInNames.insert(name);
}
bool TSymbolTableLevel::hasUnmangledBuiltIn(const char *name) const
{
return mUnmangledBuiltInNames.count(name) > 0;
}
TSymbol *TSymbolTable::find(const TString &name, TSymbol *TSymbolTable::find(const TString &name,
int shaderVersion, int shaderVersion,
bool *builtIn, bool *builtIn,
...@@ -519,13 +529,13 @@ void TSymbolTable::insertUnmangledBuiltInName(const char *name, ESymbolLevel lev ...@@ -519,13 +529,13 @@ void TSymbolTable::insertUnmangledBuiltInName(const char *name, ESymbolLevel lev
{ {
ASSERT(level >= 0 && level < static_cast<ESymbolLevel>(table.size())); ASSERT(level >= 0 && level < static_cast<ESymbolLevel>(table.size()));
ASSERT(mUserDefinedUniqueIdsStart == -1); ASSERT(mUserDefinedUniqueIdsStart == -1);
table[level]->insertUnmangledBuiltInName(std::string(name)); table[level]->insertUnmangledBuiltInName(name);
} }
bool TSymbolTable::hasUnmangledBuiltInAtLevel(const char *name, ESymbolLevel level) bool TSymbolTable::hasUnmangledBuiltInAtLevel(const char *name, ESymbolLevel level)
{ {
ASSERT(level >= 0 && level < static_cast<ESymbolLevel>(table.size())); ASSERT(level >= 0 && level < static_cast<ESymbolLevel>(table.size()));
return table[level]->hasUnmangledBuiltIn(std::string(name)); return table[level]->hasUnmangledBuiltIn(name);
} }
bool TSymbolTable::hasUnmangledBuiltInForShaderVersion(const char *name, int shaderVersion) bool TSymbolTable::hasUnmangledBuiltInForShaderVersion(const char *name, int shaderVersion)
......
...@@ -71,15 +71,8 @@ class TSymbolTableLevel ...@@ -71,15 +71,8 @@ class TSymbolTableLevel
void setGlobalInvariant(bool invariant) { mGlobalInvariant = invariant; } void setGlobalInvariant(bool invariant) { mGlobalInvariant = invariant; }
void insertUnmangledBuiltInName(const std::string &name) void insertUnmangledBuiltInName(const char *name);
{ bool hasUnmangledBuiltIn(const char *name) const;
mUnmangledBuiltInNames.insert(name);
}
bool hasUnmangledBuiltIn(const std::string &name)
{
return mUnmangledBuiltInNames.count(name) > 0;
}
protected: protected:
tLevel level; tLevel level;
...@@ -87,7 +80,11 @@ class TSymbolTableLevel ...@@ -87,7 +80,11 @@ class TSymbolTableLevel
bool mGlobalInvariant; bool mGlobalInvariant;
private: private:
std::set<std::string> mUnmangledBuiltInNames; struct CharArrayComparator
{
bool operator()(const char *a, const char *b) const { return strcmp(a, b) < 0; }
};
std::set<const char *, CharArrayComparator> mUnmangledBuiltInNames;
}; };
// Define ESymbolLevel as int rather than an enum since level can go // Define ESymbolLevel as int rather than an enum since level can go
...@@ -165,6 +162,8 @@ class TSymbolTable : angle::NonCopyable ...@@ -165,6 +162,8 @@ class TSymbolTable : angle::NonCopyable
template <TPrecision precision> template <TPrecision precision>
bool insertConstIvec3(ESymbolLevel level, const char *name, const std::array<int, 3> &values); bool insertConstIvec3(ESymbolLevel level, const char *name, const std::array<int, 3> &values);
// Note that for inserted built-in functions the const char *name needs to remain valid for the
// lifetime of the SymbolTable. SymbolTable does not allocate a copy of it.
void insertBuiltIn(ESymbolLevel level, void insertBuiltIn(ESymbolLevel level,
TOperator op, TOperator op,
TExtension ext, TExtension ext,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment