| 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);
|
|
|