Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(843)

Unified Diff: cc/raster/one_copy_raster_buffer_provider.h

Issue 1951193002: cc: Add mailbox support to ResourceProvider write locks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@worker_context_stream
Patch Set: ericrk's review Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698