Index: cc/raster/one_copy_raster_buffer_provider.h |
diff --git a/cc/raster/one_copy_raster_buffer_provider.h b/cc/raster/one_copy_raster_buffer_provider.h |
index d30c3b59a6f8dc472305745898bcb8c32163630a..80394cd4799e160f4f3fec44b5e19b2ea9bf4f7c 100644 |
--- a/cc/raster/one_copy_raster_buffer_provider.h |
+++ b/cc/raster/one_copy_raster_buffer_provider.h |
@@ -12,6 +12,7 @@ |
#include "cc/raster/raster_buffer_provider.h" |
#include "cc/raster/staging_buffer_pool.h" |
#include "cc/resources/resource_provider.h" |
+#include "gpu/command_buffer/common/sync_token.h" |
namespace cc { |
struct StagingBuffer; |
@@ -27,7 +28,8 @@ class CC_EXPORT OneCopyRasterBufferProvider : public RasterBufferProvider { |
int max_copy_texture_chromium_size, |
bool use_partial_raster, |
int max_staging_buffer_usage_in_bytes, |
- ResourceFormat preferred_tile_format); |
+ ResourceFormat preferred_tile_format, |
+ bool async_worker_context_enabled); |
~OneCopyRasterBufferProvider() override; |
// Overridden from RasterBufferProvider: |
@@ -36,7 +38,7 @@ class CC_EXPORT OneCopyRasterBufferProvider : public RasterBufferProvider { |
uint64_t resource_content_id, |
uint64_t previous_content_id) override; |
void ReleaseBufferForRaster(std::unique_ptr<RasterBuffer> buffer) override; |
- void OrderingBarrier() override; |
+ bool OrderingBarrier() override; |
ResourceFormat GetResourceFormat(bool must_support_alpha) const override; |
bool GetResourceRequiresSwizzle(bool must_support_alpha) const override; |
void Shutdown() override; |
@@ -45,6 +47,7 @@ class CC_EXPORT OneCopyRasterBufferProvider : public RasterBufferProvider { |
void PlaybackAndCopyOnWorkerThread( |
const Resource* resource, |
ResourceProvider::ScopedWriteLockGL* resource_lock, |
+ const gpu::SyncToken& sync_token, |
const RasterSource* raster_source, |
const gfx::Rect& raster_full_rect, |
const gfx::Rect& raster_dirty_rect, |
@@ -54,6 +57,39 @@ class CC_EXPORT OneCopyRasterBufferProvider : public RasterBufferProvider { |
uint64_t new_content_id); |
private: |
+ class RasterBufferImpl : public RasterBuffer { |
+ public: |
+ RasterBufferImpl(OneCopyRasterBufferProvider* client, |
+ ResourceProvider* resource_provider, |
+ const Resource* resource, |
+ uint64_t previous_content_id, |
+ bool async_worker_context_enabled); |
+ ~RasterBufferImpl() override; |
+ |
+ // Overridden from RasterBuffer: |
+ void Playback( |
+ const RasterSource* raster_source, |
+ const gfx::Rect& raster_full_rect, |
+ const gfx::Rect& raster_dirty_rect, |
+ uint64_t new_content_id, |
+ float scale, |
+ const RasterSource::PlaybackSettings& playback_settings) override; |
+ |
+ void set_sync_token(const gpu::SyncToken& sync_token) { |
+ sync_token_ = sync_token; |
+ } |
+ |
+ private: |
+ OneCopyRasterBufferProvider* client_; |
+ const Resource* resource_; |
+ ResourceProvider::ScopedWriteLockGL lock_; |
+ uint64_t previous_content_id_; |
+ |
+ gpu::SyncToken sync_token_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); |
+ }; |
+ |
void PlaybackToStagingBuffer( |
StagingBuffer* staging_buffer, |
const Resource* resource, |
@@ -65,8 +101,8 @@ class CC_EXPORT OneCopyRasterBufferProvider : public RasterBufferProvider { |
uint64_t previous_content_id, |
uint64_t new_content_id); |
void CopyOnWorkerThread(StagingBuffer* staging_buffer, |
- const Resource* resource, |
ResourceProvider::ScopedWriteLockGL* resource_lock, |
+ const gpu::SyncToken& sync_token, |
const RasterSource* raster_source, |
uint64_t previous_content_id, |
uint64_t new_content_id); |
@@ -75,14 +111,18 @@ class CC_EXPORT OneCopyRasterBufferProvider : public RasterBufferProvider { |
ContextProvider* const worker_context_provider_; |
ResourceProvider* const resource_provider_; |
const int max_bytes_per_copy_operation_; |
- bool use_partial_raster_; |
+ const bool use_partial_raster_; |
// Context lock must be acquired when accessing this member. |
int bytes_scheduled_since_last_flush_; |
- ResourceFormat preferred_tile_format_; |
+ const ResourceFormat preferred_tile_format_; |
StagingBufferPool staging_pool_; |
+ const bool async_worker_context_enabled_; |
+ |
+ std::set<RasterBufferImpl*> pending_raster_buffers_; |
+ |
DISALLOW_COPY_AND_ASSIGN(OneCopyRasterBufferProvider); |
}; |