diff options
Diffstat (limited to 'cc')
-rw-r--r-- | cc/raster/bitmap_tile_task_worker_pool.cc | 7 | ||||
-rw-r--r-- | cc/raster/bitmap_tile_task_worker_pool.h | 3 | ||||
-rw-r--r-- | cc/raster/gpu_tile_task_worker_pool.cc | 9 | ||||
-rw-r--r-- | cc/raster/gpu_tile_task_worker_pool.h | 3 | ||||
-rw-r--r-- | cc/raster/one_copy_tile_task_worker_pool.cc | 7 | ||||
-rw-r--r-- | cc/raster/one_copy_tile_task_worker_pool.h | 3 | ||||
-rw-r--r-- | cc/raster/pixel_buffer_tile_task_worker_pool.cc | 7 | ||||
-rw-r--r-- | cc/raster/pixel_buffer_tile_task_worker_pool.h | 3 | ||||
-rw-r--r-- | cc/raster/tile_task_runner.h | 5 | ||||
-rw-r--r-- | cc/raster/zero_copy_tile_task_worker_pool.cc | 7 | ||||
-rw-r--r-- | cc/raster/zero_copy_tile_task_worker_pool.h | 3 | ||||
-rw-r--r-- | cc/resources/resource_provider.cc | 4 | ||||
-rw-r--r-- | cc/resources/resource_provider.h | 4 | ||||
-rw-r--r-- | cc/test/fake_tile_manager.cc | 5 | ||||
-rw-r--r-- | cc/tiles/tile_draw_info.cc | 4 | ||||
-rw-r--r-- | cc/tiles/tile_draw_info.h | 6 | ||||
-rw-r--r-- | cc/tiles/tile_manager.cc | 3 | ||||
-rw-r--r-- | cc/tiles/tile_manager_perftest.cc | 5 |
18 files changed, 67 insertions, 21 deletions
diff --git a/cc/raster/bitmap_tile_task_worker_pool.cc b/cc/raster/bitmap_tile_task_worker_pool.cc index 586b9a9..bd6af35 100644 --- a/cc/raster/bitmap_tile_task_worker_pool.cc +++ b/cc/raster/bitmap_tile_task_worker_pool.cc @@ -12,6 +12,7 @@ #include "cc/debug/traced_value.h" #include "cc/playback/raster_source.h" #include "cc/raster/raster_buffer.h" +#include "cc/resources/platform_color.h" #include "cc/resources/resource.h" namespace cc { @@ -178,10 +179,14 @@ void BitmapTileTaskWorkerPool::CheckForCompletedTasks() { completed_tasks_.clear(); } -ResourceFormat BitmapTileTaskWorkerPool::GetResourceFormat() { +ResourceFormat BitmapTileTaskWorkerPool::GetResourceFormat() const { return resource_provider_->best_texture_format(); } +bool BitmapTileTaskWorkerPool::GetResourceRequiresSwizzle() const { + return !PlatformColor::SameComponentOrder(GetResourceFormat()); +} + scoped_ptr<RasterBuffer> BitmapTileTaskWorkerPool::AcquireBufferForRaster( const Resource* resource, uint64_t resource_content_id, diff --git a/cc/raster/bitmap_tile_task_worker_pool.h b/cc/raster/bitmap_tile_task_worker_pool.h index 21b8cf5..3df206a 100644 --- a/cc/raster/bitmap_tile_task_worker_pool.h +++ b/cc/raster/bitmap_tile_task_worker_pool.h @@ -38,7 +38,8 @@ class CC_EXPORT BitmapTileTaskWorkerPool : public TileTaskWorkerPool, void Shutdown() override; void ScheduleTasks(TileTaskQueue* queue) override; void CheckForCompletedTasks() override; - ResourceFormat GetResourceFormat() override; + ResourceFormat GetResourceFormat() const override; + bool GetResourceRequiresSwizzle() const override; // Overridden from TileTaskClient: scoped_ptr<RasterBuffer> AcquireBufferForRaster( diff --git a/cc/raster/gpu_tile_task_worker_pool.cc b/cc/raster/gpu_tile_task_worker_pool.cc index a79b880..f2806c4 100644 --- a/cc/raster/gpu_tile_task_worker_pool.cc +++ b/cc/raster/gpu_tile_task_worker_pool.cc @@ -207,8 +207,13 @@ void GpuTileTaskWorkerPool::CheckForCompletedTasks() { completed_tasks_.clear(); } -ResourceFormat GpuTileTaskWorkerPool::GetResourceFormat() { - return rasterizer_->resource_provider()->best_texture_format(); +ResourceFormat GpuTileTaskWorkerPool::GetResourceFormat() const { + return rasterizer_->resource_provider()->best_render_buffer_format(); +} + +bool GpuTileTaskWorkerPool::GetResourceRequiresSwizzle() const { + // This doesn't require a swizzle because we rasterize to the correct format. + return false; } void GpuTileTaskWorkerPool::CompleteTasks(const Task::Vector& tasks) { diff --git a/cc/raster/gpu_tile_task_worker_pool.h b/cc/raster/gpu_tile_task_worker_pool.h index 54c8620..32a9d23 100644 --- a/cc/raster/gpu_tile_task_worker_pool.h +++ b/cc/raster/gpu_tile_task_worker_pool.h @@ -36,7 +36,8 @@ class CC_EXPORT GpuTileTaskWorkerPool : public TileTaskWorkerPool, void Shutdown() override; void ScheduleTasks(TileTaskQueue* queue) override; void CheckForCompletedTasks() override; - ResourceFormat GetResourceFormat() override; + ResourceFormat GetResourceFormat() const override; + bool GetResourceRequiresSwizzle() const override; // Overridden from TileTaskClient: scoped_ptr<RasterBuffer> AcquireBufferForRaster( diff --git a/cc/raster/one_copy_tile_task_worker_pool.cc b/cc/raster/one_copy_tile_task_worker_pool.cc index e3d1df5..78e6b10 100644 --- a/cc/raster/one_copy_tile_task_worker_pool.cc +++ b/cc/raster/one_copy_tile_task_worker_pool.cc @@ -13,6 +13,7 @@ #include "cc/base/math_util.h" #include "cc/debug/traced_value.h" #include "cc/raster/raster_buffer.h" +#include "cc/resources/platform_color.h" #include "cc/resources/resource_pool.h" #include "cc/resources/scoped_resource.h" #include "gpu/command_buffer/client/gles2_interface.h" @@ -295,10 +296,14 @@ void OneCopyTileTaskWorkerPool::CheckForCompletedTasks() { completed_tasks_.clear(); } -ResourceFormat OneCopyTileTaskWorkerPool::GetResourceFormat() { +ResourceFormat OneCopyTileTaskWorkerPool::GetResourceFormat() const { return resource_provider_->best_texture_format(); } +bool OneCopyTileTaskWorkerPool::GetResourceRequiresSwizzle() const { + return !PlatformColor::SameComponentOrder(GetResourceFormat()); +} + scoped_ptr<RasterBuffer> OneCopyTileTaskWorkerPool::AcquireBufferForRaster( const Resource* resource, uint64_t resource_content_id, diff --git a/cc/raster/one_copy_tile_task_worker_pool.h b/cc/raster/one_copy_tile_task_worker_pool.h index f627193..518aaa2d 100644 --- a/cc/raster/one_copy_tile_task_worker_pool.h +++ b/cc/raster/one_copy_tile_task_worker_pool.h @@ -50,7 +50,8 @@ class CC_EXPORT OneCopyTileTaskWorkerPool : public TileTaskWorkerPool, void Shutdown() override; void ScheduleTasks(TileTaskQueue* queue) override; void CheckForCompletedTasks() override; - ResourceFormat GetResourceFormat() override; + ResourceFormat GetResourceFormat() const override; + bool GetResourceRequiresSwizzle() const override; // Overridden from TileTaskClient: scoped_ptr<RasterBuffer> AcquireBufferForRaster( diff --git a/cc/raster/pixel_buffer_tile_task_worker_pool.cc b/cc/raster/pixel_buffer_tile_task_worker_pool.cc index 14b6ee2..df79519 100644 --- a/cc/raster/pixel_buffer_tile_task_worker_pool.cc +++ b/cc/raster/pixel_buffer_tile_task_worker_pool.cc @@ -12,6 +12,7 @@ #include "base/trace_event/trace_event_argument.h" #include "cc/debug/traced_value.h" #include "cc/raster/raster_buffer.h" +#include "cc/resources/platform_color.h" #include "cc/resources/resource.h" #include "gpu/command_buffer/client/gles2_interface.h" @@ -312,10 +313,14 @@ void PixelBufferTileTaskWorkerPool::CheckForCompletedTasks() { completed_raster_tasks_.clear(); } -ResourceFormat PixelBufferTileTaskWorkerPool::GetResourceFormat() { +ResourceFormat PixelBufferTileTaskWorkerPool::GetResourceFormat() const { return resource_provider_->memory_efficient_texture_format(); } +bool PixelBufferTileTaskWorkerPool::GetResourceRequiresSwizzle() const { + return !PlatformColor::SameComponentOrder(GetResourceFormat()); +} + scoped_ptr<RasterBuffer> PixelBufferTileTaskWorkerPool::AcquireBufferForRaster( const Resource* resource, uint64_t resource_content_id, diff --git a/cc/raster/pixel_buffer_tile_task_worker_pool.h b/cc/raster/pixel_buffer_tile_task_worker_pool.h index 01618a6..2c6aeb9 100644 --- a/cc/raster/pixel_buffer_tile_task_worker_pool.h +++ b/cc/raster/pixel_buffer_tile_task_worker_pool.h @@ -46,7 +46,8 @@ class CC_EXPORT PixelBufferTileTaskWorkerPool : public TileTaskWorkerPool, void Shutdown() override; void ScheduleTasks(TileTaskQueue* queue) override; void CheckForCompletedTasks() override; - ResourceFormat GetResourceFormat() override; + ResourceFormat GetResourceFormat() const override; + bool GetResourceRequiresSwizzle() const override; // Overridden from TileTaskClient: scoped_ptr<RasterBuffer> AcquireBufferForRaster( diff --git a/cc/raster/tile_task_runner.h b/cc/raster/tile_task_runner.h index a4c7d88..9dffee4 100644 --- a/cc/raster/tile_task_runner.h +++ b/cc/raster/tile_task_runner.h @@ -163,7 +163,10 @@ class CC_EXPORT TileTaskRunner { virtual void CheckForCompletedTasks() = 0; // Returns the format to use for the tiles. - virtual ResourceFormat GetResourceFormat() = 0; + virtual ResourceFormat GetResourceFormat() const = 0; + + // Determine if the resource requires swizzling. + virtual bool GetResourceRequiresSwizzle() const = 0; protected: virtual ~TileTaskRunner() {} diff --git a/cc/raster/zero_copy_tile_task_worker_pool.cc b/cc/raster/zero_copy_tile_task_worker_pool.cc index d42570a..64fc5f4 100644 --- a/cc/raster/zero_copy_tile_task_worker_pool.cc +++ b/cc/raster/zero_copy_tile_task_worker_pool.cc @@ -11,6 +11,7 @@ #include "base/trace_event/trace_event_argument.h" #include "cc/debug/traced_value.h" #include "cc/raster/raster_buffer.h" +#include "cc/resources/platform_color.h" #include "cc/resources/resource.h" #include "ui/gfx/gpu_memory_buffer.h" @@ -176,10 +177,14 @@ void ZeroCopyTileTaskWorkerPool::CheckForCompletedTasks() { completed_tasks_.clear(); } -ResourceFormat ZeroCopyTileTaskWorkerPool::GetResourceFormat() { +ResourceFormat ZeroCopyTileTaskWorkerPool::GetResourceFormat() const { return resource_provider_->best_texture_format(); } +bool ZeroCopyTileTaskWorkerPool::GetResourceRequiresSwizzle() const { + return !PlatformColor::SameComponentOrder(GetResourceFormat()); +} + scoped_ptr<RasterBuffer> ZeroCopyTileTaskWorkerPool::AcquireBufferForRaster( const Resource* resource, uint64_t resource_content_id, diff --git a/cc/raster/zero_copy_tile_task_worker_pool.h b/cc/raster/zero_copy_tile_task_worker_pool.h index 9714119..7dcdff0a 100644 --- a/cc/raster/zero_copy_tile_task_worker_pool.h +++ b/cc/raster/zero_copy_tile_task_worker_pool.h @@ -38,7 +38,8 @@ class CC_EXPORT ZeroCopyTileTaskWorkerPool : public TileTaskWorkerPool, void Shutdown() override; void ScheduleTasks(TileTaskQueue* queue) override; void CheckForCompletedTasks() override; - ResourceFormat GetResourceFormat() override; + ResourceFormat GetResourceFormat() const override; + bool GetResourceRequiresSwizzle() const override; // Overridden from TileTaskClient: scoped_ptr<RasterBuffer> AcquireBufferForRaster( diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index ec18d40..848c59f 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc @@ -1098,6 +1098,7 @@ ResourceProvider::ResourceProvider( yuv_resource_format_(LUMINANCE_8), max_texture_size_(0), best_texture_format_(RGBA_8888), + best_render_buffer_format_(RGBA_8888), use_rgba_4444_texture_format_(use_rgba_4444_texture_format), id_allocation_chunk_size_(id_allocation_chunk_size), use_sync_query_(false), @@ -1138,6 +1139,9 @@ void ResourceProvider::Initialize() { best_texture_format_ = PlatformColor::BestTextureFormat(use_texture_format_bgra_); + best_render_buffer_format_ = + PlatformColor::BestTextureFormat(caps.gpu.render_buffer_format_bgra8888); + texture_id_allocator_.reset( new TextureIdAllocator(gl, id_allocation_chunk_size_)); buffer_id_allocator_.reset( diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h index 0d30f60..d5b5712 100644 --- a/cc/resources/resource_provider.h +++ b/cc/resources/resource_provider.h @@ -95,6 +95,9 @@ class CC_EXPORT ResourceProvider { return use_rgba_4444_texture_format_ ? RGBA_4444 : best_texture_format_; } ResourceFormat best_texture_format() const { return best_texture_format_; } + ResourceFormat best_render_buffer_format() const { + return best_render_buffer_format_; + } ResourceFormat yuv_resource_format() const { return yuv_resource_format_; } bool use_sync_query() const { return use_sync_query_; } bool use_persistent_map_for_gpu_memory_buffers() const { @@ -585,6 +588,7 @@ class CC_EXPORT ResourceProvider { ResourceFormat yuv_resource_format_; int max_texture_size_; ResourceFormat best_texture_format_; + ResourceFormat best_render_buffer_format_; base::ThreadChecker thread_checker_; diff --git a/cc/test/fake_tile_manager.cc b/cc/test/fake_tile_manager.cc index 53f88da..146da37 100644 --- a/cc/test/fake_tile_manager.cc +++ b/cc/test/fake_tile_manager.cc @@ -47,7 +47,10 @@ class FakeTileTaskRunnerImpl : public TileTaskRunner, public TileTaskClient { } completed_tasks_.clear(); } - ResourceFormat GetResourceFormat() override { return RGBA_8888; } + ResourceFormat GetResourceFormat() const override { return RGBA_8888; } + bool GetResourceRequiresSwizzle() const override { + return !PlatformColor::SameComponentOrder(GetResourceFormat()); + } // Overridden from TileTaskClient: scoped_ptr<RasterBuffer> AcquireBufferForRaster( diff --git a/cc/tiles/tile_draw_info.cc b/cc/tiles/tile_draw_info.cc index e523079..1713703 100644 --- a/cc/tiles/tile_draw_info.cc +++ b/cc/tiles/tile_draw_info.cc @@ -9,7 +9,9 @@ namespace cc { TileDrawInfo::TileDrawInfo() - : mode_(RESOURCE_MODE), solid_color_(SK_ColorWHITE) { + : mode_(RESOURCE_MODE), + solid_color_(SK_ColorWHITE), + contents_swizzled_(false) { } TileDrawInfo::~TileDrawInfo() { diff --git a/cc/tiles/tile_draw_info.h b/cc/tiles/tile_draw_info.h index 9ba8f24..e11da9c 100644 --- a/cc/tiles/tile_draw_info.h +++ b/cc/tiles/tile_draw_info.h @@ -65,10 +65,7 @@ class CC_EXPORT TileDrawInfo { return solid_color_; } - bool contents_swizzled() const { - DCHECK(resource_); - return !PlatformColor::SameComponentOrder(resource_->format()); - } + bool contents_swizzled() const { return contents_swizzled_; } bool requires_resource() const { return mode_ == RESOURCE_MODE || mode_ == OOM_MODE; @@ -99,6 +96,7 @@ class CC_EXPORT TileDrawInfo { Mode mode_; SkColor solid_color_; scoped_ptr<ScopedResource> resource_; + bool contents_swizzled_; }; } // namespace cc diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc index 77622c2..ba60908 100644 --- a/cc/tiles/tile_manager.cc +++ b/cc/tiles/tile_manager.cc @@ -791,8 +791,9 @@ void TileManager::UpdateTileDrawInfo( DCHECK(resource); draw_info.set_use_resource(); draw_info.resource_ = resource.Pass(); + draw_info.contents_swizzled_ = + tile_task_runner_->GetResourceRequiresSwizzle(); } - client_->NotifyTileStateChanged(tile); } diff --git a/cc/tiles/tile_manager_perftest.cc b/cc/tiles/tile_manager_perftest.cc index 5fdecd2..d9b340d 100644 --- a/cc/tiles/tile_manager_perftest.cc +++ b/cc/tiles/tile_manager_perftest.cc @@ -64,8 +64,9 @@ class FakeTileTaskRunnerImpl : public TileTaskRunner, public TileTaskClient { } completed_tasks_.clear(); } - ResourceFormat GetResourceFormat() override { - return RGBA_8888; + ResourceFormat GetResourceFormat() const override { return RGBA_8888; } + bool GetResourceRequiresSwizzle() const override { + return !PlatformColor::SameComponentOrder(GetResourceFormat()); } // Overridden from TileTaskClient: |