Index: cc/resources/raster_worker_pool.cc |
diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc |
index aced03fcec6c8eb3c5e413d5213f8b635e3b756a..11228895c28419b586e5658fdee6a9ef61a9f717 100644 |
--- a/cc/resources/raster_worker_pool.cc |
+++ b/cc/resources/raster_worker_pool.cc |
@@ -48,7 +48,8 @@ class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
int source_frame_number, |
RenderingStatsInstrumentation* rendering_stats, |
const RasterWorkerPool::RasterTask::Reply& reply, |
- TaskVector* dependencies) |
+ TaskVector* dependencies, |
+ bool use_16bit_tiles) |
: internal::RasterWorkerPoolTask(resource, dependencies), |
picture_pile_(picture_pile), |
content_rect_(content_rect), |
@@ -60,7 +61,8 @@ class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
tile_id_(tile_id), |
source_frame_number_(source_frame_number), |
rendering_stats_(rendering_stats), |
- reply_(reply) {} |
+ reply_(reply), |
+ use_16bit_tiles_(use_16bit_tiles) {} |
void RunAnalysisOnThread(unsigned thread_index) { |
TRACE_EVENT1("cc", |
@@ -89,7 +91,8 @@ class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
analysis_.is_solid_color &= kUseColorEstimator; |
} |
- bool RunRasterOnThread(SkDevice* device, unsigned thread_index) { |
+ bool RunRasterOnThread(unsigned thread_index, |
+ void* buffer, gfx::Size size) { |
TRACE_EVENT2( |
benchmark_instrumentation::kCategory, |
benchmark_instrumentation::kRunRasterOnThread, |
@@ -102,7 +105,6 @@ class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
devtools_instrumentation::kRasterTask, layer_id_); |
DCHECK(picture_pile_.get()); |
- DCHECK(device); |
if (analysis_.is_solid_color) |
return false; |
@@ -110,8 +112,14 @@ class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
PicturePileImpl* picture_clone = |
picture_pile_->GetCloneForDrawingOnThread(thread_index); |
- SkCanvas canvas(device); |
+ SkBitmap bitmap_32; |
+ bitmap_32.setConfig(SkBitmap::kARGB_8888_Config, |
+ size.width(), |
+ size.height()); |
+ bitmap_32.allocPixels(); |
+ SkDevice device_32(bitmap_32); |
+ SkCanvas canvas(&device_32); |
skia::RefPtr<SkDrawFilter> draw_filter; |
switch (raster_mode_) { |
case LOW_QUALITY_RASTER_MODE: |
@@ -149,14 +157,23 @@ class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
picture_clone->RasterToBitmap( |
&canvas, content_rect_, contents_scale_, NULL); |
} |
+ |
+ if (use_16bit_tiles_) { |
+ LOG(ERROR) << "KAANB: copying over to 16-bits"; |
+ SkBitmap bitmap_16; |
+ bitmap_16.setPixels(buffer); |
+ bitmap_32.copyTo(&bitmap_16, SkBitmap::kARGB_4444_Config); |
+ } |
+ |
return true; |
} |
// Overridden from internal::RasterWorkerPoolTask: |
- virtual bool RunOnWorkerThread(SkDevice* device, unsigned thread_index) |
+ virtual bool RunOnWorkerThread(unsigned thread_index, |
+ void* buffer, gfx::Size size) |
OVERRIDE { |
RunAnalysisOnThread(thread_index); |
- return RunRasterOnThread(device, thread_index); |
+ return RunRasterOnThread(thread_index, buffer, size); |
} |
virtual void CompleteOnOriginThread() OVERRIDE { |
reply_.Run(analysis_, !HasFinishedRunning() || WasCanceled()); |
@@ -189,6 +206,7 @@ class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
int source_frame_number_; |
RenderingStatsInstrumentation* rendering_stats_; |
const RasterWorkerPool::RasterTask::Reply reply_; |
+ bool use_16bit_tiles_; |
DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl); |
}; |
@@ -379,7 +397,8 @@ RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( |
int source_frame_number, |
RenderingStatsInstrumentation* rendering_stats, |
const RasterTask::Reply& reply, |
- Task::Set* dependencies) { |
+ Task::Set* dependencies, |
+ bool use_16bit_tiles) { |
return RasterTask( |
new RasterWorkerPoolTaskImpl(resource, |
picture_pile, |
@@ -393,7 +412,8 @@ RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( |
source_frame_number, |
rendering_stats, |
reply, |
- &dependencies->tasks_)); |
+ &dependencies->tasks_, |
+ use_16bit_tiles)); |
} |
// static |