summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/shader_translator.cc
diff options
context:
space:
mode:
authorbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-13 22:28:04 +0000
committerbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-13 22:28:04 +0000
commit87fb6ab83f9ec419bfc820c375da244353b39f77 (patch)
tree801eaef2cea32267f9c4ed09c922d8144ba5c88d /gpu/command_buffer/service/shader_translator.cc
parent8d98f03466b775772739b89192e502c5dcf994ee (diff)
downloadchromium_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.cc21
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();