Index: gpu/command_buffer/service/shader_translator.cc |
diff --git a/gpu/command_buffer/service/shader_translator.cc b/gpu/command_buffer/service/shader_translator.cc |
index abf4c3e71b021a736c75d74e914a3348441f5b09..53157de8ed571f2b7d5bf8abc6d8845cd77ff969 100644 |
--- a/gpu/command_buffer/service/shader_translator.cc |
+++ b/gpu/command_buffer/service/shader_translator.cc |
@@ -9,6 +9,7 @@ |
#include "base/at_exit.h" |
#include "base/debug/trace_event.h" |
+#include "base/lazy_instance.h" |
#include "base/logging.h" |
#include "base/strings/string_number_conversions.h" |
@@ -16,23 +17,21 @@ namespace { |
using gpu::gles2::ShaderTranslator; |
-bool g_translator_initialized = false; |
- |
-void FinalizeShaderTranslator(void* /* dummy */) { |
- TRACE_EVENT0("gpu", "ShFinalize"); |
- ShFinalize(); |
- g_translator_initialized = false; |
-} |
- |
-bool InitializeShaderTranslator() { |
- if (!g_translator_initialized) { |
+class ShaderTranslatorInitializer { |
+ public: |
+ ShaderTranslatorInitializer() { |
TRACE_EVENT0("gpu", "ShInitialize"); |
CHECK(ShInitialize()); |
- base::AtExitManager::RegisterCallback(&FinalizeShaderTranslator, NULL); |
- g_translator_initialized = true; |
} |
- return g_translator_initialized; |
-} |
+ |
+ ~ShaderTranslatorInitializer() { |
+ TRACE_EVENT0("gpu", "ShFinalize"); |
+ ShFinalize(); |
+ } |
+}; |
+ |
+base::LazyInstance<ShaderTranslatorInitializer> g_translator_initializer = |
+ LAZY_INSTANCE_INITIALIZER; |
#if !defined(ANGLE_SH_VERSION) || ANGLE_SH_VERSION < 108 |
typedef int ANGLEGetInfoType; |
@@ -135,8 +134,7 @@ bool ShaderTranslator::Init( |
DCHECK(shader_spec == SH_GLES2_SPEC || shader_spec == SH_WEBGL_SPEC); |
DCHECK(resources != NULL); |
- if (!InitializeShaderTranslator()) |
- return false; |
+ g_translator_initializer.Get(); |
ShShaderOutput shader_output = |
(glsl_implementation_type == kGlslES ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT); |