#include "components/viz/test/fake_skia_output_surface.h"
#include <memory>
#include <string_view>
#include <utility>
#include "base/functional/bind.h"
#include "base/logging.h"
#include "base/not_fatal_until.h"
#include "base/task/bind_post_task.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner.h"
#include "build/build_config.h"
#include "components/viz/common/frame_sinks/copy_output_request.h"
#include "components/viz/common/frame_sinks/copy_output_util.h"
#include "components/viz/common/resources/shared_image_format_utils.h"
#include "components/viz/service/display/output_surface_client.h"
#include "components/viz/service/display/output_surface_frame.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "gpu/command_buffer/client/client_shared_image.h"
#include "gpu/command_buffer/common/mailbox_holder.h"
#include "gpu/command_buffer/common/shared_image_usage.h"
#include "gpu/command_buffer/common/swap_buffers_complete_params.h"
#include "gpu/command_buffer/service/shared_image/shared_image_format_service_utils.h"
#include "third_party/khronos/GLES2/gl2ext.h"
#include "third_party/skia/include/core/SkImage.h"
#include "third_party/skia/include/core/SkPixelRef.h"
#include "third_party/skia/include/gpu/GpuTypes.h"
#include "third_party/skia/include/gpu/GrBackendSurface.h"
#include "third_party/skia/include/gpu/GrDirectContext.h"
#include "third_party/skia/include/gpu/ganesh/SkImageGanesh.h"
#include "third_party/skia/include/gpu/ganesh/SkSurfaceGanesh.h"
#include "third_party/skia/include/gpu/ganesh/gl/GrGLBackendSurface.h"
#include "third_party/skia/include/gpu/gl/GrGLTypes.h"
#include "ui/gfx/gpu_fence_handle.h"
#include "ui/gfx/presentation_feedback.h"
#include "ui/gfx/swap_result.h"
#include "ui/gl/gl_utils.h"
namespace viz {
FakeSkiaOutputSurface::FakeSkiaOutputSurface(
scoped_refptr<ContextProvider> context_provider)
: … { … }
FakeSkiaOutputSurface::~FakeSkiaOutputSurface() { … }
void FakeSkiaOutputSurface::BindToClient(OutputSurfaceClient* client) { … }
void FakeSkiaOutputSurface::EnsureBackbuffer() { … }
void FakeSkiaOutputSurface::DiscardBackbuffer() { … }
void FakeSkiaOutputSurface::Reshape(const ReshapeParams& params) { … }
void FakeSkiaOutputSurface::SwapBuffers(OutputSurfaceFrame frame) { … }
void FakeSkiaOutputSurface::SetNeedsSwapSizeNotifications(
bool needs_swap_size_notifications) { … }
void FakeSkiaOutputSurface::SetUpdateVSyncParametersCallback(
UpdateVSyncParametersCallback callback) { … }
gfx::OverlayTransform FakeSkiaOutputSurface::GetDisplayTransform() { … }
SkCanvas* FakeSkiaOutputSurface::BeginPaintCurrentFrame() { … }
void FakeSkiaOutputSurface::MakePromiseSkImage(
ImageContext* image_context,
const gfx::ColorSpace& yuv_color_space,
bool force_rgbx) { … }
sk_sp<SkImage> FakeSkiaOutputSurface::MakePromiseSkImageFromYUV(
const std::vector<ImageContext*>& contexts,
sk_sp<SkColorSpace> image_color_space,
SkYUVAInfo::PlaneConfig plane_config,
SkYUVAInfo::Subsampling subsampling) { … }
gpu::SyncToken FakeSkiaOutputSurface::ReleaseImageContexts(
std::vector<std::unique_ptr<ImageContext>> image_contexts) { … }
std::unique_ptr<ExternalUseClient::ImageContext>
FakeSkiaOutputSurface::CreateImageContext(
const gpu::MailboxHolder& holder,
const gfx::Size& size,
SharedImageFormat format,
bool concurrent_reads,
const std::optional<gpu::VulkanYCbCrInfo>& ycbcr_info,
sk_sp<SkColorSpace> color_space,
bool raw_draw_if_possible) { … }
SkCanvas* FakeSkiaOutputSurface::BeginPaintRenderPass(
const AggregatedRenderPassId& id,
const gfx::Size& surface_size,
SharedImageFormat format,
RenderPassAlphaType alpha_type,
skgpu::Mipmapped,
bool scanout_dcomp_surface,
sk_sp<SkColorSpace> color_space,
bool is_overlay,
const gpu::Mailbox& mailbox) { … }
SkCanvas* FakeSkiaOutputSurface::RecordOverdrawForCurrentPaint() { … }
void FakeSkiaOutputSurface::EndPaint(
base::OnceClosure on_finished,
base::OnceCallback<void(gfx::GpuFenceHandle)> return_release_fence_cb,
const gfx::Rect& update_rect,
bool is_overlay) { … }
sk_sp<SkImage> FakeSkiaOutputSurface::MakePromiseSkImageFromRenderPass(
const AggregatedRenderPassId& id,
const gfx::Size& size,
SharedImageFormat format,
bool mipmap,
sk_sp<SkColorSpace> color_space,
const gpu::Mailbox& mailbox) { … }
void FakeSkiaOutputSurface::RemoveRenderPassResource(
std::vector<AggregatedRenderPassId> ids) { … }
void FakeSkiaOutputSurface::CopyOutput(
const copy_output::RenderPassGeometry& geometry,
const gfx::ColorSpace& color_space,
std::unique_ptr<CopyOutputRequest> request,
const gpu::Mailbox& mailbox) { … }
gpu::SharedImageInterface* FakeSkiaOutputSurface::GetSharedImageInterface() { … }
void FakeSkiaOutputSurface::AddContextLostObserver(
ContextLostObserver* observer) { … }
void FakeSkiaOutputSurface::RemoveContextLostObserver(
ContextLostObserver* observer) { … }
gpu::SyncToken FakeSkiaOutputSurface::Flush() { … }
void FakeSkiaOutputSurface::SetOutOfOrderCallbacks(
bool out_of_order_callbacks) { … }
gpu::SyncToken FakeSkiaOutputSurface::GenerateSyncToken() { … }
bool FakeSkiaOutputSurface::GetGrBackendTexture(
const ImageContext& image_context,
GrBackendTexture* backend_texture) { … }
void FakeSkiaOutputSurface::SwapBuffersAck() { … }
void FakeSkiaOutputSurface::DestroyCopyOutputTexture(
scoped_refptr<gpu::ClientSharedImage> shared_image,
const gpu::SyncToken& sync_token,
bool is_lost) { … }
void FakeSkiaOutputSurface::ScheduleGpuTaskForTesting(
base::OnceClosure callback,
std::vector<gpu::SyncToken> sync_tokens) { … }
void FakeSkiaOutputSurface::CheckAsyncWorkCompletionForTesting() { … }
void FakeSkiaOutputSurface::InitDelegatedInkPointRendererReceiver(
mojo::PendingReceiver<gfx::mojom::DelegatedInkPointRenderer>
pending_receiver) { … }
gpu::Mailbox FakeSkiaOutputSurface::CreateSharedImage(
SharedImageFormat format,
const gfx::Size& size,
const gfx::ColorSpace& color_space,
RenderPassAlphaType alpha_type,
gpu::SharedImageUsageSet usage,
std::string_view debug_label,
gpu::SurfaceHandle surface_handle) { … }
gpu::Mailbox FakeSkiaOutputSurface::CreateSolidColorSharedImage(
const SkColor4f& color,
const gfx::ColorSpace& color_space) { … }
void FakeSkiaOutputSurface::SetSharedImagePurgeable(const gpu::Mailbox& mailbox,
bool purgeable) { … }
bool FakeSkiaOutputSurface::SupportsBGRA() const { … }
}