blob: 6e58b99e405e178cca4bd04ea7efc4d331a77d91 [file] [log] [blame]
/*
* Copyright 2021 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skiatest_graphite_ContextFactory_DEFINED
#define skiatest_graphite_ContextFactory_DEFINED
#include "include/core/SkRefCnt.h"
#include "include/gpu/graphite/ContextOptions.h"
#include "include/gpu/graphite/GraphiteTypes.h"
#include "include/private/base/SkTArray.h"
#include "tools/gpu/ContextType.h"
#include "tools/graphite/GraphiteTestContext.h"
#include "tools/graphite/TestOptions.h"
namespace skgpu::graphite {
class Context;
}
namespace skiatest::graphite {
struct ContextInfo {
GraphiteTestContext* fTestContext = nullptr;
skgpu::graphite::Context* fContext = nullptr;
};
class ContextFactory {
public:
explicit ContextFactory(const TestOptions&);
ContextFactory() = default;
ContextFactory(const ContextFactory&) = delete;
ContextFactory& operator=(const ContextFactory&) = delete;
~ContextFactory() = default;
ContextInfo getContextInfo(skgpu::ContextType);
private:
struct OwnedContextInfo {
OwnedContextInfo();
OwnedContextInfo(skgpu::ContextType,
std::unique_ptr<GraphiteTestContext>,
std::unique_ptr<skgpu::graphite::Context>);
~OwnedContextInfo();
OwnedContextInfo(OwnedContextInfo&&);
OwnedContextInfo& operator=(OwnedContextInfo&&);
// This holds the same data as ContextInfo, but uses unique_ptr to maintain ownership.
skgpu::ContextType fType = skgpu::ContextType::kMock;
std::unique_ptr<GraphiteTestContext> fTestContext;
std::unique_ptr<skgpu::graphite::Context> fContext;
};
static ContextInfo AsContextInfo(const OwnedContextInfo& ctx);
skia_private::TArray<OwnedContextInfo> fContexts;
const TestOptions fOptions = {};
};
} // namespace skiatest::graphite
#endif // skiatest_graphite_ContextFactory_DEFINED