1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef skiatest_graphite_ContextFactory_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skiatest_graphite_ContextFactory_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/ContextOptions.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/GraphiteTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTArray.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "tools/gpu/ContextType.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "tools/graphite/GraphiteTestContext.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "tools/graphite/TestOptions.h" 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 20*c8dee2aaSAndroid Build Coastguard Worker class Context; 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker namespace skiatest::graphite { 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker struct ContextInfo { 26*c8dee2aaSAndroid Build Coastguard Worker GraphiteTestContext* fTestContext = nullptr; 27*c8dee2aaSAndroid Build Coastguard Worker skgpu::graphite::Context* fContext = nullptr; 28*c8dee2aaSAndroid Build Coastguard Worker }; 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker class ContextFactory { 31*c8dee2aaSAndroid Build Coastguard Worker public: 32*c8dee2aaSAndroid Build Coastguard Worker explicit ContextFactory(const TestOptions&); 33*c8dee2aaSAndroid Build Coastguard Worker ContextFactory() = default; 34*c8dee2aaSAndroid Build Coastguard Worker ContextFactory(const ContextFactory&) = delete; 35*c8dee2aaSAndroid Build Coastguard Worker ContextFactory& operator=(const ContextFactory&) = delete; 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker ~ContextFactory() = default; 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker ContextInfo getContextInfo(skgpu::ContextType); 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker private: 42*c8dee2aaSAndroid Build Coastguard Worker struct OwnedContextInfo { 43*c8dee2aaSAndroid Build Coastguard Worker OwnedContextInfo(); 44*c8dee2aaSAndroid Build Coastguard Worker OwnedContextInfo(skgpu::ContextType, 45*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<GraphiteTestContext>, 46*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<skgpu::graphite::Context>); 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker ~OwnedContextInfo(); 49*c8dee2aaSAndroid Build Coastguard Worker OwnedContextInfo(OwnedContextInfo&&); 50*c8dee2aaSAndroid Build Coastguard Worker OwnedContextInfo& operator=(OwnedContextInfo&&); 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker // This holds the same data as ContextInfo, but uses unique_ptr to maintain ownership. 53*c8dee2aaSAndroid Build Coastguard Worker skgpu::ContextType fType = skgpu::ContextType::kMock; 54*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<GraphiteTestContext> fTestContext; 55*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<skgpu::graphite::Context> fContext; 56*c8dee2aaSAndroid Build Coastguard Worker }; 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker static ContextInfo AsContextInfo(const OwnedContextInfo& ctx); 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<OwnedContextInfo> fContexts; 61*c8dee2aaSAndroid Build Coastguard Worker const TestOptions fOptions = {}; 62*c8dee2aaSAndroid Build Coastguard Worker }; 63*c8dee2aaSAndroid Build Coastguard Worker 64*c8dee2aaSAndroid Build Coastguard Worker } // namespace skiatest::graphite 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker #endif // skiatest_graphite_ContextFactory_DEFINED 67