| Index: cc/resources/tile_task_worker_pool.cc
|
| diff --git a/cc/resources/tile_task_worker_pool.cc b/cc/resources/tile_task_worker_pool.cc
|
| index 1c0d6b980edfb273cbaa0bb28d0e87edd8edf309..2e308477a2f35ba783ee20938810ef753a45eeff 100644
|
| --- a/cc/resources/tile_task_worker_pool.cc
|
| +++ b/cc/resources/tile_task_worker_pool.cc
|
| @@ -12,6 +12,7 @@
|
| #include "base/threading/simple_thread.h"
|
| #include "cc/base/scoped_ptr_deque.h"
|
| #include "cc/resources/raster_source.h"
|
| +#include "cc/resources/texture_compress/texture_compress.h"
|
| #include "skia/ext/refptr.h"
|
| #include "third_party/skia/include/core/SkCanvas.h"
|
| #include "third_party/skia/include/core/SkSurface.h"
|
| @@ -195,6 +196,11 @@ void TileTaskWorkerPool::InsertNodesForRasterTask(
|
|
|
| static bool IsSupportedPlaybackToMemoryFormat(ResourceFormat format) {
|
| switch (format) {
|
| + case ATC:
|
| + case ATC_IA:
|
| + case DXT1:
|
| + case DXT5:
|
| + case ETC1:
|
| case RGBA_4444:
|
| case RGBA_8888:
|
| case BGRA_8888:
|
| @@ -202,7 +208,6 @@ static bool IsSupportedPlaybackToMemoryFormat(ResourceFormat format) {
|
| case ALPHA_8:
|
| case LUMINANCE_8:
|
| case RGB_565:
|
| - case ETC1:
|
| case RED_8:
|
| return false;
|
| }
|
| @@ -220,6 +225,51 @@ void TileTaskWorkerPool::PlaybackToMemory(void* memory,
|
| float scale) {
|
| DCHECK(IsSupportedPlaybackToMemoryFormat(format)) << format;
|
|
|
| + if (IsFormatCompressed(format)) {
|
| + SkBitmap bitmap;
|
| + bitmap.allocN32Pixels(size.width(), size.height());
|
| +
|
| + SkCanvas canvas(bitmap);
|
| + raster_source->PlaybackToCanvas(&canvas, rect, scale);
|
| +
|
| + switch (format) {
|
| + case ATC:
|
| + texture_compress::CompressATC(
|
| + reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
|
| + reinterpret_cast<uint8_t*>(memory), bitmap.width(),
|
| + bitmap.height());
|
| + break;
|
| + case ATC_IA:
|
| + texture_compress::CompressATCIA(
|
| + reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
|
| + reinterpret_cast<uint8_t*>(memory), bitmap.width(),
|
| + bitmap.height());
|
| + break;
|
| + case DXT1:
|
| + texture_compress::CompressDXT1(
|
| + reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
|
| + reinterpret_cast<uint8_t*>(memory), bitmap.width(),
|
| + bitmap.height());
|
| + break;
|
| + case DXT5:
|
| + texture_compress::CompressDXT5(
|
| + reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
|
| + reinterpret_cast<uint8_t*>(memory), bitmap.width(),
|
| + bitmap.height());
|
| + break;
|
| + case ETC1:
|
| + texture_compress::CompressETC1(
|
| + reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
|
| + reinterpret_cast<uint8_t*>(memory), bitmap.width(),
|
| + bitmap.height());
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + return;
|
| + }
|
| +
|
| // Uses kPremul_SkAlphaType since the result is not known to be opaque.
|
| SkImageInfo info =
|
| SkImageInfo::MakeN32(size.width(), size.height(), kPremul_SkAlphaType);
|
|
|