diff options
author | backer@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-13 22:28:04 +0000 |
---|---|---|
committer | backer@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-13 22:28:04 +0000 |
commit | 87fb6ab83f9ec419bfc820c375da244353b39f77 (patch) | |
tree | 801eaef2cea32267f9c4ed09c922d8144ba5c88d /gpu/command_buffer/service/shader_translator.cc | |
parent | 8d98f03466b775772739b89192e502c5dcf994ee (diff) | |
download | chromium_src-87fb6ab83f9ec419bfc820c375da244353b39f77.zip chromium_src-87fb6ab83f9ec419bfc820c375da244353b39f77.tar.gz chromium_src-87fb6ab83f9ec419bfc820c375da244353b39f77.tar.bz2 |
Cache shader translators.
Each shader translator takes about 700 KB of memory in the GPU proces in Release. There are typically between 2-4 of these per tab with --force-compositing-mode. This CL introduces a cache, so that tabs share shader translators whenever possible.
BUG=132426
TEST=none
Review URL: https://chromiumcodereview.appspot.com/10535128
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142002 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/shader_translator.cc')
-rw-r--r-- | gpu/command_buffer/service/shader_translator.cc | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gpu/command_buffer/service/shader_translator.cc b/gpu/command_buffer/service/shader_translator.cc index 63f1457..6839736 100644 --- a/gpu/command_buffer/service/shader_translator.cc +++ b/gpu/command_buffer/service/shader_translator.cc @@ -5,6 +5,7 @@ #include "gpu/command_buffer/service/shader_translator.h" #include <string.h> +#include <algorithm> #include "base/at_exit.h" #include "base/logging.h" @@ -76,6 +77,12 @@ void GetVariableInfo(ShHandle compiler, ShShaderInfo var_type, namespace gpu { namespace gles2 { +ShaderTranslator::DestructionObserver::DestructionObserver() { +} + +ShaderTranslator::DestructionObserver::~DestructionObserver() { +} + ShaderTranslator::ShaderTranslator() : compiler_(NULL), implementation_is_glsl_es_(false), @@ -83,6 +90,10 @@ ShaderTranslator::ShaderTranslator() } ShaderTranslator::~ShaderTranslator() { + FOR_EACH_OBSERVER(DestructionObserver, + destruction_observers_, + OnDestruct(this)); + if (compiler_ != NULL) ShDestruct(compiler_); } @@ -170,6 +181,16 @@ ShaderTranslator::uniform_map() const { return uniform_map_; } +void ShaderTranslator::AddDestructionObserver( + DestructionObserver* observer) { + destruction_observers_.AddObserver(observer); +} + +void ShaderTranslator::RemoveDestructionObserver( + DestructionObserver* observer) { + destruction_observers_.RemoveObserver(observer); +} + void ShaderTranslator::ClearResults() { translated_shader_.reset(); info_log_.reset(); |