// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_RASTER_RASTER_BUFFER_PROVIDER_H_ #define CC_RASTER_RASTER_BUFFER_PROVIDER_H_ #include #include "cc/raster/raster_buffer.h" #include "cc/raster/raster_source.h" #include "cc/raster/task_graph_runner.h" #include "cc/raster/tile_task.h" #include "cc/resources/resource_pool.h" #include "components/viz/common/resources/resource_format.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" namespace cc { class Resource; class CC_EXPORT RasterBufferProvider { public: RasterBufferProvider(); virtual ~RasterBufferProvider(); // Utility function that will create a temporary bitmap and copy pixels to // |memory| when necessary. The |canvas_bitmap_rect| is the rect of the bitmap // being played back in the pixel space of the source, ie a rect in the source // that will cover the resulting |memory|. The |canvas_playback_rect| can be a // smaller contained rect inside the |canvas_bitmap_rect| if the |memory| is // already partially complete, and only the subrect needs to be played back. // Set |gpu_compositing| to true if the compositor is using gpu, as we respect // the format more accurately, vs in software compositing where the format is // a placeholder for the skia native format. static void PlaybackToMemory( void* memory, viz::ResourceFormat format, const gfx::Size& size, size_t stride, const RasterSource* raster_source, const gfx::Rect& canvas_bitmap_rect, const gfx::Rect& canvas_playback_rect, const gfx::AxisTransform2d& transform, const gfx::ColorSpace& target_color_space, bool gpu_compositing, const RasterSource::PlaybackSettings& playback_settings); // Acquire raster buffer. virtual std::unique_ptr 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) = 0; // Flush pending work from writing the content of the RasterBuffer, so that // queries to tell if the backing is ready to draw from will get the right // answer. This should be done before calling IsResourceReadyToDraw() or // SetReadyToDrawCallback(). virtual void Flush() = 0; // Returns the format to use for the tiles. virtual viz::ResourceFormat GetResourceFormat() const = 0; // Determines if the resource is premultiplied. virtual bool IsResourcePremultiplied() const = 0; // Determine if the RasterBufferProvider can handle partial raster into // the Resource provided in AcquireBufferForRaster. virtual bool CanPartialRasterIntoProvidedResource() const = 0; // Returns true if the indicated resource is ready to draw. virtual bool IsResourceReadyToDraw( const ResourcePool::InUsePoolResource& resource) const = 0; // Calls the provided |callback| when the provided |resources| are ready to // draw. Returns a callback ID which can be used to track this callback. // Will return 0 if no callback is needed (resources are already ready to // draw). The caller may optionally pass the ID of a pending callback to // avoid creating a new callback unnecessarily. If the caller does not // have a pending callback, 0 should be passed for |pending_callback_id|. virtual uint64_t SetReadyToDrawCallback( const std::vector& resources, base::OnceClosure callback, uint64_t pending_callback_id) const = 0; // Shutdown for doing cleanup. virtual void Shutdown() = 0; // Checks whether GPU side queries issued for previous raster work have been // finished. Note that this will acquire the worker context lock so it can be // used from any thread. But usage from the compositor thread should be // avoided to prevent contention with worker threads. // Returns true if there are pending queries that could not be completed in // this check. virtual bool CheckRasterFinishedQueries() = 0; }; } // namespace cc #endif // CC_RASTER_RASTER_BUFFER_PROVIDER_H_