#include "cc/raster/one_copy_raster_buffer_provider.h"
#include <stdint.h>
#include <algorithm>
#include <limits>
#include <utility>
#include "base/debug/alias.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/histogram_macros.h"
#include "base/task/sequenced_task_runner.h"
#include "base/trace_event/process_memory_dump.h"
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "cc/base/features.h"
#include "cc/base/histograms.h"
#include "cc/base/math_util.h"
#include "components/viz/common/gpu/raster_context_provider.h"
#include "components/viz/common/resources/platform_color.h"
#include "components/viz/common/resources/resource_sizes.h"
#include "components/viz/common/resources/shared_image_format.h"
#include "components/viz/common/resources/shared_image_format_utils.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "gpu/command_buffer/client/client_shared_image.h"
#include "gpu/command_buffer/client/context_support.h"
#include "gpu/command_buffer/client/raster_interface.h"
#include "gpu/command_buffer/client/shared_image_interface.h"
#include "gpu/command_buffer/common/shared_image_trace_utils.h"
#include "gpu/command_buffer/common/shared_image_usage.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gl/trace_util.h"
namespace cc {
namespace {
const int kMaxBytesPerCopyOperation = …;
}
class OneCopyRasterBufferProvider::OneCopyGpuBacking
: public ResourcePool::GpuBacking { … };
OneCopyRasterBufferProvider::RasterBufferImpl::RasterBufferImpl(
OneCopyRasterBufferProvider* client,
const ResourcePool::InUsePoolResource& in_use_resource,
OneCopyGpuBacking* backing,
uint64_t previous_content_id)
: … { … }
OneCopyRasterBufferProvider::RasterBufferImpl::~RasterBufferImpl() { … }
void OneCopyRasterBufferProvider::RasterBufferImpl::Playback(
const RasterSource* raster_source,
const gfx::Rect& raster_full_rect,
const gfx::Rect& raster_dirty_rect,
uint64_t new_content_id,
const gfx::AxisTransform2d& transform,
const RasterSource::PlaybackSettings& playback_settings,
const GURL& url) { … }
bool OneCopyRasterBufferProvider::RasterBufferImpl::
SupportsBackgroundThreadPriority() const { … }
OneCopyRasterBufferProvider::OneCopyRasterBufferProvider(
scoped_refptr<base::SequencedTaskRunner> task_runner,
viz::RasterContextProvider* compositor_context_provider,
viz::RasterContextProvider* worker_context_provider,
int max_copy_texture_chromium_size,
bool use_partial_raster,
int max_staging_buffer_usage_in_bytes,
const RasterCapabilities& raster_caps)
: … { … }
OneCopyRasterBufferProvider::~OneCopyRasterBufferProvider() = default;
std::unique_ptr<RasterBuffer>
OneCopyRasterBufferProvider::AcquireBufferForRaster(
const ResourcePool::InUsePoolResource& resource,
uint64_t resource_content_id,
uint64_t previous_content_id,
bool depends_on_at_raster_decodes,
bool depends_on_hardware_accelerated_jpeg_candidates,
bool depends_on_hardware_accelerated_webp_candidates) { … }
void OneCopyRasterBufferProvider::Flush() { … }
viz::SharedImageFormat OneCopyRasterBufferProvider::GetFormat() const { … }
bool OneCopyRasterBufferProvider::IsResourcePremultiplied() const { … }
bool OneCopyRasterBufferProvider::CanPartialRasterIntoProvidedResource() const { … }
bool OneCopyRasterBufferProvider::IsResourceReadyToDraw(
const ResourcePool::InUsePoolResource& resource) { … }
uint64_t OneCopyRasterBufferProvider::SetReadyToDrawCallback(
const std::vector<const ResourcePool::InUsePoolResource*>& resources,
base::OnceClosure callback,
uint64_t pending_callback_id) { … }
void OneCopyRasterBufferProvider::SetShutdownEvent(
base::WaitableEvent* shutdown_event) { … }
void OneCopyRasterBufferProvider::Shutdown() { … }
gpu::SyncToken OneCopyRasterBufferProvider::PlaybackAndCopyOnWorkerThread(
scoped_refptr<gpu::ClientSharedImage>& shared_image,
bool mailbox_texture_is_overlay_candidate,
const gpu::SyncToken& sync_token,
const RasterSource* raster_source,
const gfx::Rect& raster_full_rect,
const gfx::Rect& raster_dirty_rect,
const gfx::AxisTransform2d& transform,
const gfx::Size& resource_size,
viz::SharedImageFormat format,
const gfx::ColorSpace& color_space,
const RasterSource::PlaybackSettings& playback_settings,
uint64_t previous_content_id,
uint64_t new_content_id,
bool& should_destroy_shared_image) { … }
bool OneCopyRasterBufferProvider::PlaybackToStagingBuffer(
StagingBuffer* staging_buffer,
const RasterSource* raster_source,
const gfx::Rect& raster_full_rect,
const gfx::Rect& raster_dirty_rect,
const gfx::AxisTransform2d& transform,
viz::SharedImageFormat format,
const gfx::ColorSpace& dst_color_space,
const RasterSource::PlaybackSettings& playback_settings,
uint64_t previous_content_id,
uint64_t new_content_id) { … }
gpu::SyncToken OneCopyRasterBufferProvider::CopyOnWorkerThread(
StagingBuffer* staging_buffer,
const RasterSource* raster_source,
const gfx::Rect& rect_to_copy,
viz::SharedImageFormat format,
const gfx::Size& resource_size,
scoped_refptr<gpu::ClientSharedImage>& shared_image,
bool mailbox_texture_is_overlay_candidate,
const gpu::SyncToken& sync_token,
const gfx::ColorSpace& color_space) { … }
}