• 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 <array>
14 #include <atomic>
15 
16 #if GR_TEST_UTILS
17 #include "include/private/SkTArray.h"
18 class SkString;
19 #endif
20 
21 class GrThreadSafePipelineBuilder : public SkRefCnt {
22 public:
23     GrThreadSafePipelineBuilder() = default;
24 
25     class Stats {
26     public:
27         enum class ProgramCacheResult {
28             kHit,       // the program was found in the cache
29             kMiss,      // the program was not found in the cache (and was, thus, compiled)
30             kPartial,   // a precompiled version was found in the persistent cache
31 
32             kLast = kPartial
33         };
34 
35 #if GR_GPU_STATS
36         static const int kNumProgramCacheResults = (int)ProgramCacheResult::kLast + 1;
37 
38         Stats() = default;
39 
shaderCompilations()40         int shaderCompilations() const { return fShaderCompilations; }
incShaderCompilations()41         void incShaderCompilations() { fShaderCompilations++; }
42 
numInlineCompilationFailures()43         int numInlineCompilationFailures() const { return fNumInlineCompilationFailures; }
incNumInlineCompilationFailures()44         void incNumInlineCompilationFailures() { ++fNumInlineCompilationFailures; }
45 
46 #ifdef SKIA_DFX_FOR_OHOS
updatePipelineCount(int count)47         void updatePipelineCount(int count) { fPipelineCount = count; }
setPipelineCountMax(int max)48         void setPipelineCountMax(int max) { fPipelineCountMax = max; }
49 #endif
50 
numInlineProgramCacheResult(ProgramCacheResult stat)51         int numInlineProgramCacheResult(ProgramCacheResult stat) const {
52             return fInlineProgramCacheStats[(int) stat];
53         }
incNumInlineProgramCacheResult(ProgramCacheResult stat)54         void incNumInlineProgramCacheResult(ProgramCacheResult stat) {
55             ++fInlineProgramCacheStats[(int) stat];
56         }
57 
numPreCompilationFailures()58         int numPreCompilationFailures() const { return fNumPreCompilationFailures; }
incNumPreCompilationFailures()59         void incNumPreCompilationFailures() { ++fNumPreCompilationFailures; }
60 
numPreProgramCacheResult(ProgramCacheResult stat)61         int numPreProgramCacheResult(ProgramCacheResult stat) const {
62             return fPreProgramCacheStats[(int) stat];
63         }
incNumPreProgramCacheResult(ProgramCacheResult stat)64         void incNumPreProgramCacheResult(ProgramCacheResult stat) {
65             ++fPreProgramCacheStats[(int) stat];
66         }
67 
numCompilationFailures()68         int numCompilationFailures() const { return fNumCompilationFailures; }
incNumCompilationFailures()69         void incNumCompilationFailures() { ++fNumCompilationFailures; }
70 
numPartialCompilationSuccesses()71         int numPartialCompilationSuccesses() const { return fNumPartialCompilationSuccesses; }
incNumPartialCompilationSuccesses()72         void incNumPartialCompilationSuccesses() { ++fNumPartialCompilationSuccesses; }
73 
numCompilationSuccesses()74         int numCompilationSuccesses() const { return fNumCompilationSuccesses; }
incNumCompilationSuccesses()75         void incNumCompilationSuccesses() { ++fNumCompilationSuccesses; }
76 
77 #if GR_TEST_UTILS
78         void dump(SkString*);
79         void dumpKeyValuePairs(SkTArray<SkString>* keys, SkTArray<double>* values);
80 #endif
81 
82     private:
83         std::atomic<int> fShaderCompilations{0};
84 #ifdef SKIA_DFX_FOR_OHOS
85         std::atomic<int> fPipelineCount{0};
86         std::atomic<int> fPipelineCountMax{0};
87 #endif
88         std::atomic<int> fNumInlineCompilationFailures{0};
89         std::array<std::atomic<int>, kNumProgramCacheResults> fInlineProgramCacheStats = {};
90 
91         std::atomic<int> fNumPreCompilationFailures{0};
92         std::array<std::atomic<int>, kNumProgramCacheResults> fPreProgramCacheStats = {};
93 
94         std::atomic<int> fNumCompilationFailures{0};
95         std::atomic<int> fNumPartialCompilationSuccesses{0};
96         std::atomic<int> fNumCompilationSuccesses{0};
97 
98 #else
incShaderCompilations()99         void incShaderCompilations() {}
incNumInlineCompilationFailures()100         void incNumInlineCompilationFailures() {}
incNumInlineProgramCacheResult(ProgramCacheResult stat)101         void incNumInlineProgramCacheResult(ProgramCacheResult stat) {}
incNumPreCompilationFailures()102         void incNumPreCompilationFailures() {}
incNumPreProgramCacheResult(ProgramCacheResult stat)103         void incNumPreProgramCacheResult(ProgramCacheResult stat) {}
incNumCompilationFailures()104         void incNumCompilationFailures() {}
incNumPartialCompilationSuccesses()105         void incNumPartialCompilationSuccesses() {}
incNumCompilationSuccesses()106         void incNumCompilationSuccesses() {}
107 
108 #if GR_TEST_UTILS
dump(SkString *)109         void dump(SkString*) {}
dumpKeyValuePairs(SkTArray<SkString> *,SkTArray<double> *)110         void dumpKeyValuePairs(SkTArray<SkString>*, SkTArray<double>*) {}
111 #endif
112 
113 #endif // GR_GPU_STATS
114     };
115 
stats()116     Stats* stats() { return &fStats; }
117 
118 protected:
119     Stats fStats;
120 };
121 
122 #endif
123