Use std::unordered_map in ResourceManager.
The hashed query performs significantly faster than std::map.
This improves performance in applications which use Bind* often.
Also use the same scheme for the Context-managed resources.
BUG=angleproject:1333
Change-Id: I8a1f25d80e060c62dab1f86005e1bc4df1c06dba
Reviewed-on: https://chromium-review.googlesource.com/331387
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/ResourceManager.cpp b/src/libANGLE/ResourceManager.cpp
index db2c55f..3872d39 100644
--- a/src/libANGLE/ResourceManager.cpp
+++ b/src/libANGLE/ResourceManager.cpp
@@ -82,7 +82,7 @@
{
GLuint handle = mBufferHandleAllocator.allocate();
- mBufferMap[handle] = NULL;
+ mBufferMap[handle] = nullptr;
return handle;
}
@@ -116,7 +116,7 @@
{
GLuint handle = mTextureHandleAllocator.allocate();
- mTextureMap[handle] = NULL;
+ mTextureMap[handle] = nullptr;
return handle;
}
@@ -126,7 +126,7 @@
{
GLuint handle = mRenderbufferHandleAllocator.allocate();
- mRenderbufferMap[handle] = NULL;
+ mRenderbufferMap[handle] = nullptr;
return handle;
}
@@ -136,7 +136,7 @@
{
GLuint handle = mSamplerHandleAllocator.allocate();
- mSamplerMap[handle] = NULL;
+ mSamplerMap[handle] = nullptr;
return handle;
}
@@ -155,7 +155,7 @@
void ResourceManager::deleteBuffer(GLuint buffer)
{
- BufferMap::iterator bufferObject = mBufferMap.find(buffer);
+ auto bufferObject = mBufferMap.find(buffer);
if (bufferObject != mBufferMap.end())
{
@@ -167,7 +167,7 @@
void ResourceManager::deleteShader(GLuint shader)
{
- ShaderMap::iterator shaderObject = mShaderMap.find(shader);
+ auto shaderObject = mShaderMap.find(shader);
if (shaderObject != mShaderMap.end())
{
@@ -186,7 +186,7 @@
void ResourceManager::deleteProgram(GLuint program)
{
- ProgramMap::iterator programObject = mProgramMap.find(program);
+ auto programObject = mProgramMap.find(program);
if (programObject != mProgramMap.end())
{
@@ -205,7 +205,7 @@
void ResourceManager::deleteTexture(GLuint texture)
{
- TextureMap::iterator textureObject = mTextureMap.find(texture);
+ auto textureObject = mTextureMap.find(texture);
if (textureObject != mTextureMap.end())
{
@@ -217,7 +217,7 @@
void ResourceManager::deleteRenderbuffer(GLuint renderbuffer)
{
- RenderbufferMap::iterator renderbufferObject = mRenderbufferMap.find(renderbuffer);
+ auto renderbufferObject = mRenderbufferMap.find(renderbuffer);
if (renderbufferObject != mRenderbufferMap.end())
{
@@ -253,11 +253,11 @@
Buffer *ResourceManager::getBuffer(unsigned int handle)
{
- BufferMap::iterator buffer = mBufferMap.find(handle);
+ auto buffer = mBufferMap.find(handle);
if (buffer == mBufferMap.end())
{
- return NULL;
+ return nullptr;
}
else
{
@@ -267,11 +267,11 @@
Shader *ResourceManager::getShader(unsigned int handle)
{
- ShaderMap::iterator shader = mShaderMap.find(handle);
+ auto shader = mShaderMap.find(handle);
if (shader == mShaderMap.end())
{
- return NULL;
+ return nullptr;
}
else
{
@@ -281,13 +281,14 @@
Texture *ResourceManager::getTexture(unsigned int handle)
{
- if (handle == 0) return NULL;
+ if (handle == 0)
+ return nullptr;
- TextureMap::iterator texture = mTextureMap.find(handle);
+ auto texture = mTextureMap.find(handle);
if (texture == mTextureMap.end())
{
- return NULL;
+ return nullptr;
}
else
{
@@ -297,11 +298,11 @@
Program *ResourceManager::getProgram(unsigned int handle) const
{
- ProgramMap::const_iterator program = mProgramMap.find(handle);
+ auto program = mProgramMap.find(handle);
if (program == mProgramMap.end())
{
- return NULL;
+ return nullptr;
}
else
{
@@ -311,11 +312,11 @@
Renderbuffer *ResourceManager::getRenderbuffer(unsigned int handle)
{
- RenderbufferMap::iterator renderbuffer = mRenderbufferMap.find(handle);
+ auto renderbuffer = mRenderbufferMap.find(handle);
if (renderbuffer == mRenderbufferMap.end())
{
- return NULL;
+ return nullptr;
}
else
{
@@ -329,7 +330,7 @@
if (sampler == mSamplerMap.end())
{
- return NULL;
+ return nullptr;
}
else
{
@@ -343,7 +344,7 @@
if (fenceObjectIt == mFenceSyncMap.end())
{
- return NULL;
+ return nullptr;
}
else
{