summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc')
-rw-r--r--cc/raster/bitmap_tile_task_worker_pool.cc7
-rw-r--r--cc/raster/bitmap_tile_task_worker_pool.h3
-rw-r--r--cc/raster/gpu_tile_task_worker_pool.cc9
-rw-r--r--cc/raster/gpu_tile_task_worker_pool.h3
-rw-r--r--cc/raster/one_copy_tile_task_worker_pool.cc7
-rw-r--r--cc/raster/one_copy_tile_task_worker_pool.h3
-rw-r--r--cc/raster/pixel_buffer_tile_task_worker_pool.cc7
-rw-r--r--cc/raster/pixel_buffer_tile_task_worker_pool.h3
-rw-r--r--cc/raster/tile_task_runner.h5
-rw-r--r--cc/raster/zero_copy_tile_task_worker_pool.cc7
-rw-r--r--cc/raster/zero_copy_tile_task_worker_pool.h3
-rw-r--r--cc/resources/resource_provider.cc4
-rw-r--r--cc/resources/resource_provider.h4
-rw-r--r--cc/test/fake_tile_manager.cc5
-rw-r--r--cc/tiles/tile_draw_info.cc4
-rw-r--r--cc/tiles/tile_draw_info.h6
-rw-r--r--cc/tiles/tile_manager.cc3
-rw-r--r--cc/tiles/tile_manager_perftest.cc5
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: