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..44ceb7a744418e5ec398d4c8b78699ce467a02b2 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 @@ |
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: |
@@ -45,6 +47,7 @@ |
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 @@ |
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 @@ |
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,13 +111,17 @@ |
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); |
}; |