Index: cc/raster/gpu_raster_buffer_provider.h |
diff --git a/cc/raster/gpu_raster_buffer_provider.h b/cc/raster/gpu_raster_buffer_provider.h |
index b6aea8341a2cef3b899a5e3cac373b79133a71b0..305a2d809838cf3b515b1c3d71ba5b4a7e983bf0 100644 |
--- a/cc/raster/gpu_raster_buffer_provider.h |
+++ b/cc/raster/gpu_raster_buffer_provider.h |
@@ -9,11 +9,11 @@ |
#include "base/macros.h" |
#include "cc/raster/raster_buffer_provider.h" |
+#include "cc/resources/resource_provider.h" |
+#include "gpu/command_buffer/common/sync_token.h" |
namespace cc { |
class ContextProvider; |
-class GpuRasterizer; |
-class ResourceProvider; |
class CC_EXPORT GpuRasterBufferProvider : public RasterBufferProvider { |
public: |
@@ -21,7 +21,8 @@ class CC_EXPORT GpuRasterBufferProvider : public RasterBufferProvider { |
ContextProvider* worker_context_provider, |
ResourceProvider* resource_provider, |
bool use_distance_field_text, |
- int gpu_rasterization_msaa_sample_count); |
+ int gpu_rasterization_msaa_sample_count, |
+ bool async_worker_context_enabled); |
~GpuRasterBufferProvider() override; |
// Overridden from RasterBufferProvider: |
@@ -30,14 +31,63 @@ class CC_EXPORT GpuRasterBufferProvider : 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; |
+ void PlaybackOnWorkerThread( |
+ ResourceProvider::ScopedWriteLockGL* resource_lock, |
+ const gpu::SyncToken& sync_token, |
+ bool resource_has_previous_content, |
+ 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); |
+ |
private: |
+ class RasterBufferImpl : public RasterBuffer { |
+ public: |
+ RasterBufferImpl(GpuRasterBufferProvider* client, |
+ ResourceProvider* resource_provider, |
+ ResourceId resource_id, |
+ bool async_worker_context_enabled, |
+ bool resource_has_previous_content); |
+ ~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: |
+ GpuRasterBufferProvider* const client_; |
+ ResourceProvider::ScopedWriteLockGL lock_; |
+ const bool resource_has_previous_content_; |
+ |
+ gpu::SyncToken sync_token_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); |
+ }; |
+ |
ContextProvider* const compositor_context_provider_; |
- std::unique_ptr<GpuRasterizer> rasterizer_; |
+ ContextProvider* const worker_context_provider_; |
+ ResourceProvider* const resource_provider_; |
+ const bool use_distance_field_text_; |
+ const int msaa_sample_count_; |
+ const bool async_worker_context_enabled_; |
+ |
+ std::set<RasterBufferImpl*> pending_raster_buffers_; |
DISALLOW_COPY_AND_ASSIGN(GpuRasterBufferProvider); |
}; |