| /* |
| * Copyright 2023 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "include/core/SkColorSpace.h" |
| #include "include/core/SkColorType.h" |
| #include "include/core/SkImageInfo.h" |
| #include "include/core/SkSurface.h" |
| #include "include/private/base/SkAssert.h" |
| #include "tools/testrunners/common/surface_manager/SurfaceManager.h" |
| |
| #include <string> |
| |
| class RasterSurfaceManager : public SurfaceManager { |
| public: |
| RasterSurfaceManager(sk_sp<SkSurface> surface, std::string config, SkColorInfo colorInfo) |
| : SurfaceManager(config, colorInfo, CpuOrGpu::kCPU), fSurface(surface) {} |
| |
| sk_sp<SkSurface> getSurface() override { return fSurface; } |
| |
| private: |
| sk_sp<SkSurface> fSurface; |
| }; |
| |
| std::unique_ptr<SurfaceManager> SurfaceManager::FromConfig(std::string config, |
| SurfaceOptions surfaceOptions) { |
| // This config is based on nanobench's "nonrendering" config: |
| // https://skia.googlesource.com/skia/+/a063eaeaf1e09e4d6f42e0f44a5723622a46d21c/bench/nanobench.cpp#663. |
| // It is placed here because RasterSurfaceManager is the SurfaceManager implementation used |
| // when no GPU backend is specified via Bazel's --config flag, which should be the case for all |
| // nonrendering benchmarks. |
| if (config == "nonrendering") { |
| // The surface and color info are never used by nonrendering benchmarks, so their values do |
| // not matter. |
| return std::make_unique<RasterSurfaceManager>(nullptr, config, SkColorInfo()); |
| } |
| |
| // These configs are based on the RasterSink configs here: |
| // https://skia.googlesource.com/skia/+/faaa8393a68b518ec1f204a60c7c3393e1da2fa2/dm/DM.cpp#1046. |
| if (config == "8888") { |
| SkColorInfo colorInfo(kN32_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeSRGB()); |
| sk_sp<SkSurface> surface = SkSurfaces::Raster( |
| SkImageInfo::Make({surfaceOptions.width, surfaceOptions.height}, colorInfo)); |
| SkASSERT_RELEASE(surface); |
| return std::make_unique<RasterSurfaceManager>(surface, config, colorInfo); |
| } |
| if (config == "565") { |
| SkColorInfo colorInfo(kRGB_565_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeSRGB()); |
| sk_sp<SkSurface> surface = SkSurfaces::Raster( |
| SkImageInfo::Make({surfaceOptions.width, surfaceOptions.height}, colorInfo)); |
| SkASSERT_RELEASE(surface); |
| return std::make_unique<RasterSurfaceManager>(surface, config, colorInfo); |
| } |
| return nullptr; |
| } |