• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2021 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrThreadSafePipelineBuilder_Base_DEFINED
9 #define GrThreadSafePipelineBuilder_Base_DEFINED
10 
11 #include "include/core/SkRefCnt.h"
12 #include "include/gpu/GrConfig.h"
13 #include <atomic>
14 
15 #if GR_TEST_UTILS
16 #include "include/private/SkTArray.h"
17 class SkString;
18 #endif
19 
20 class GrThreadSafePipelineBuilder : public SkRefCnt {
21 public:
22     GrThreadSafePipelineBuilder() = default;
23 
24     class Stats {
25     public:
26         enum class ProgramCacheResult {
27             kHit,       // the program was found in the cache
28             kMiss,      // the program was not found in the cache (and was, thus, compiled)
29             kPartial,   // a precompiled version was found in the persistent cache
30 
31             kLast = kPartial
32         };
33 
34 #if GR_GPU_STATS
35         static const int kNumProgramCacheResults = (int)ProgramCacheResult::kLast + 1;
36 
37         Stats() = default;
38 
shaderCompilations()39         int shaderCompilations() const { return fShaderCompilations; }
incShaderCompilations()40         void incShaderCompilations() { fShaderCompilations++; }
41 
numInlineCompilationFailures()42         int numInlineCompilationFailures() const { return fNumInlineCompilationFailures; }
incNumInlineCompilationFailures()43         void incNumInlineCompilationFailures() { ++fNumInlineCompilationFailures; }
44 
numInlineProgramCacheResult(ProgramCacheResult stat)45         int numInlineProgramCacheResult(ProgramCacheResult stat) const {
46             return fInlineProgramCacheStats[(int) stat];
47         }
incNumInlineProgramCacheResult(ProgramCacheResult stat)48         void incNumInlineProgramCacheResult(ProgramCacheResult stat) {
49             ++fInlineProgramCacheStats[(int) stat];
50         }
51 
numPreCompilationFailures()52         int numPreCompilationFailures() const { return fNumPreCompilationFailures; }
incNumPreCompilationFailures()53         void incNumPreCompilationFailures() { ++fNumPreCompilationFailures; }
54 
numPreProgramCacheResult(ProgramCacheResult stat)55         int numPreProgramCacheResult(ProgramCacheResult stat) const {
56             return fPreProgramCacheStats[(int) stat];
57         }
incNumPreProgramCacheResult(ProgramCacheResult stat)58         void incNumPreProgramCacheResult(ProgramCacheResult stat) {
59             ++fPreProgramCacheStats[(int) stat];
60         }
61 
numCompilationFailures()62         int numCompilationFailures() const { return fNumCompilationFailures; }
incNumCompilationFailures()63         void incNumCompilationFailures() { ++fNumCompilationFailures; }
64 
numPartialCompilationSuccesses()65         int numPartialCompilationSuccesses() const { return fNumPartialCompilationSuccesses; }
incNumPartialCompilationSuccesses()66         void incNumPartialCompilationSuccesses() { ++fNumPartialCompilationSuccesses; }
67 
numCompilationSuccesses()68         int numCompilationSuccesses() const { return fNumCompilationSuccesses; }
incNumCompilationSuccesses()69         void incNumCompilationSuccesses() { ++fNumCompilationSuccesses; }
70 
71 #if GR_TEST_UTILS
72         void dump(SkString*);
73         void dumpKeyValuePairs(SkTArray<SkString>* keys, SkTArray<double>* values);
74 #endif
75 
76     private:
77         std::atomic<int> fShaderCompilations{0};
78 
79         std::atomic<int> fNumInlineCompilationFailures{0};
80         std::atomic<int> fInlineProgramCacheStats[kNumProgramCacheResults]{};
81 
82         std::atomic<int> fNumPreCompilationFailures{0};
83         std::atomic<int> fPreProgramCacheStats[kNumProgramCacheResults]{};
84 
85         std::atomic<int> fNumCompilationFailures{0};
86         std::atomic<int> fNumPartialCompilationSuccesses{0};
87         std::atomic<int> fNumCompilationSuccesses{0};
88 
89 #else
incShaderCompilations()90         void incShaderCompilations() {}
incNumInlineCompilationFailures()91         void incNumInlineCompilationFailures() {}
incNumInlineProgramCacheResult(ProgramCacheResult stat)92         void incNumInlineProgramCacheResult(ProgramCacheResult stat) {}
incNumPreCompilationFailures()93         void incNumPreCompilationFailures() {}
incNumPreProgramCacheResult(ProgramCacheResult stat)94         void incNumPreProgramCacheResult(ProgramCacheResult stat) {}
incNumCompilationFailures()95         void incNumCompilationFailures() {}
incNumPartialCompilationSuccesses()96         void incNumPartialCompilationSuccesses() {}
incNumCompilationSuccesses()97         void incNumCompilationSuccesses() {}
98 
99 #if GR_TEST_UTILS
dump(SkString *)100         void dump(SkString*) {}
dumpKeyValuePairs(SkTArray<SkString> *,SkTArray<double> *)101         void dumpKeyValuePairs(SkTArray<SkString>*, SkTArray<double>*) {}
102 #endif
103 
104 #endif // GR_GPU_STATS
105     };
106 
stats()107     Stats* stats() { return &fStats; }
108 
109 protected:
110     Stats fStats;
111 };
112 
113 #endif
114