1 // Copyright (c) 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ui/gl/shader_tracking.h"
6 
7 #include "base/check.h"
8 #include "ui/gl/gl_switches.h"
9 
10 namespace gl {
11 
12 // static
GetInstance()13 ShaderTracking* ShaderTracking::GetInstance() {
14 #if defined(OS_WIN)
15   // Shaders can only be reliably retrieved with ANGLE backend. Therefore,
16   // limit to Windows platform only.
17   static bool enabled =
18       base::FeatureList::IsEnabled(features::kTrackCurrentShaders);
19   if (enabled) {
20     static base::NoDestructor<ShaderTracking> instance;
21     return instance.get();
22   }
23 #endif  // OS_WIN
24   return nullptr;
25 }
26 
GetShaders(std::string * shader0,std::string * shader1)27 void ShaderTracking::GetShaders(std::string* shader0, std::string* shader1) {
28   DCHECK(shader0 && shader1);
29   base::AutoLock auto_lock(lock_);
30   *shader0 = shaders_[0];
31   *shader1 = shaders_[1];
32 }
33 
SetShaders(const char * shader0,const char * shader1)34 void ShaderTracking::SetShaders(const char* shader0, const char* shader1) {
35   base::AutoLock auto_lock(lock_);
36   shaders_[0] = shader0 ? shader0 : "";
37   shaders_[1] = shader1 ? shader1 : "";
38 }
39 
40 }  // namespace gl
41