#include "ui/ozone/platform/headless/headless_surface_factory.h"
#include <memory>
#include "base/files/file_util.h"
#include "base/functional/bind.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "base/task/thread_pool.h"
#include "build/build_config.h"
#include "skia/ext/legacy_display_globals.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkImageInfo.h"
#include "third_party/skia/include/core/SkPixmap.h"
#include "third_party/skia/include/core/SkRefCnt.h"
#include "third_party/skia/include/core/SkSurface.h"
#include "third_party/skia/include/core/SkSurfaceProps.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/codec/png_codec.h"
#include "ui/gfx/geometry/skia_conversions.h"
#include "ui/gfx/native_pixmap.h"
#include "ui/gfx/vsync_provider.h"
#include "ui/gl/gl_surface_egl.h"
#include "ui/ozone/common/egl_util.h"
#include "ui/ozone/common/gl_ozone_egl.h"
#include "ui/ozone/common/gl_surface_egl_readback.h"
#include "ui/ozone/platform/headless/headless_window.h"
#include "ui/ozone/platform/headless/headless_window_manager.h"
#include "ui/ozone/public/surface_ozone_canvas.h"
#if BUILDFLAG(ENABLE_VULKAN) && (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_FUCHSIA))
#include "ui/ozone/platform/headless/vulkan_implementation_headless.h"
#endif
namespace ui {
namespace {
const base::FilePath::CharType kDevNull[] = …);
base::FilePath GetPathForWidget(const base::FilePath& base_path,
gfx::AcceleratedWidget widget) { … }
void WriteDataToFile(const base::FilePath& location, const SkBitmap& bitmap) { … }
class FileSurface : public SurfaceOzoneCanvas { … };
class FileGLSurface : public GLSurfaceEglReadback { … };
class TestPixmap : public gfx::NativePixmap { … };
class GLOzoneEGLHeadless : public GLOzoneEGL { … };
}
HeadlessSurfaceFactory::HeadlessSurfaceFactory(base::FilePath base_path)
: … { … }
HeadlessSurfaceFactory::~HeadlessSurfaceFactory() = default;
std::vector<gl::GLImplementationParts>
HeadlessSurfaceFactory::GetAllowedGLImplementations() { … }
GLOzone* HeadlessSurfaceFactory::GetGLOzone(
const gl::GLImplementationParts& implementation) { … }
std::unique_ptr<SurfaceOzoneCanvas>
HeadlessSurfaceFactory::CreateCanvasForWidget(gfx::AcceleratedWidget widget) { … }
scoped_refptr<gfx::NativePixmap> HeadlessSurfaceFactory::CreateNativePixmap(
gfx::AcceleratedWidget widget,
gpu::VulkanDeviceQueue* device_queue,
gfx::Size size,
gfx::BufferFormat format,
gfx::BufferUsage usage,
std::optional<gfx::Size> framebuffer_size) { … }
void HeadlessSurfaceFactory::CheckBasePath() const { … }
#if BUILDFLAG(ENABLE_VULKAN)
std::unique_ptr<gpu::VulkanImplementation>
HeadlessSurfaceFactory::CreateVulkanImplementation(
bool use_swiftshader,
bool allow_protected_memory) { … }
#endif
}