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

Side by Side Diff: cc/resources/tile_task_worker_pool.cc

Issue 793693003: Tile Compression (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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 unified diff | Download patch
« no previous file with comments | « cc/resources/tile_manager_unittest.cc ('k') | cc/resources/tile_task_worker_pool_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/resources/tile_task_worker_pool.h" 5 #include "cc/resources/tile_task_worker_pool.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
11 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
12 #include "base/threading/simple_thread.h" 12 #include "base/threading/simple_thread.h"
13 #include "cc/base/scoped_ptr_deque.h" 13 #include "cc/base/scoped_ptr_deque.h"
14 #include "cc/resources/raster_source.h" 14 #include "cc/resources/raster_source.h"
15 #include "cc/resources/texture_compress/texture_compress.h"
15 #include "skia/ext/refptr.h" 16 #include "skia/ext/refptr.h"
16 #include "third_party/skia/include/core/SkCanvas.h" 17 #include "third_party/skia/include/core/SkCanvas.h"
17 #include "third_party/skia/include/core/SkSurface.h" 18 #include "third_party/skia/include/core/SkSurface.h"
18 19
19 namespace cc { 20 namespace cc {
20 namespace { 21 namespace {
21 22
22 class TileTaskGraphRunner : public TaskGraphRunner, 23 class TileTaskGraphRunner : public TaskGraphRunner,
23 public base::DelegateSimpleThread::Delegate { 24 public base::DelegateSimpleThread::Delegate {
24 public: 25 public:
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 InsertNodeForTask(graph, decode_task, priority, 0u); 189 InsertNodeForTask(graph, decode_task, priority, 0u);
189 190
190 graph->edges.push_back(TaskGraph::Edge(decode_task, raster_task)); 191 graph->edges.push_back(TaskGraph::Edge(decode_task, raster_task));
191 } 192 }
192 193
193 InsertNodeForTask(graph, raster_task, priority, dependencies); 194 InsertNodeForTask(graph, raster_task, priority, dependencies);
194 } 195 }
195 196
196 static bool IsSupportedPlaybackToMemoryFormat(ResourceFormat format) { 197 static bool IsSupportedPlaybackToMemoryFormat(ResourceFormat format) {
197 switch (format) { 198 switch (format) {
199 case ATC:
200 case ATC_IA:
201 case DXT1:
202 case DXT5:
203 case ETC1:
198 case RGBA_4444: 204 case RGBA_4444:
199 case RGBA_8888: 205 case RGBA_8888:
200 case BGRA_8888: 206 case BGRA_8888:
201 return true; 207 return true;
202 case ALPHA_8: 208 case ALPHA_8:
203 case LUMINANCE_8: 209 case LUMINANCE_8:
204 case RGB_565: 210 case RGB_565:
205 case ETC1:
206 case RED_8: 211 case RED_8:
207 return false; 212 return false;
208 } 213 }
209 NOTREACHED(); 214 NOTREACHED();
210 return false; 215 return false;
211 } 216 }
212 217
213 // static 218 // static
214 void TileTaskWorkerPool::PlaybackToMemory(void* memory, 219 void TileTaskWorkerPool::PlaybackToMemory(void* memory,
215 ResourceFormat format, 220 ResourceFormat format,
216 const gfx::Size& size, 221 const gfx::Size& size,
217 int stride, 222 int stride,
218 const RasterSource* raster_source, 223 const RasterSource* raster_source,
219 const gfx::Rect& rect, 224 const gfx::Rect& rect,
220 float scale) { 225 float scale) {
221 DCHECK(IsSupportedPlaybackToMemoryFormat(format)) << format; 226 DCHECK(IsSupportedPlaybackToMemoryFormat(format)) << format;
222 227
228 if (IsFormatCompressed(format)) {
229 SkBitmap bitmap;
230 bitmap.allocN32Pixels(size.width(), size.height());
231
232 SkCanvas canvas(bitmap);
233 raster_source->PlaybackToCanvas(&canvas, rect, scale);
234
235 switch (format) {
236 case ATC:
237 texture_compress::CompressATC(
238 reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
239 reinterpret_cast<uint8_t*>(memory), bitmap.width(),
240 bitmap.height());
241 break;
242 case ATC_IA:
243 texture_compress::CompressATCIA(
244 reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
245 reinterpret_cast<uint8_t*>(memory), bitmap.width(),
246 bitmap.height());
247 break;
248 case DXT1:
249 texture_compress::CompressDXT1(
250 reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
251 reinterpret_cast<uint8_t*>(memory), bitmap.width(),
252 bitmap.height());
253 break;
254 case DXT5:
255 texture_compress::CompressDXT5(
256 reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
257 reinterpret_cast<uint8_t*>(memory), bitmap.width(),
258 bitmap.height());
259 break;
260 case ETC1:
261 texture_compress::CompressETC1(
262 reinterpret_cast<const uint8_t*>(bitmap.getPixels()),
263 reinterpret_cast<uint8_t*>(memory), bitmap.width(),
264 bitmap.height());
265 break;
266 default:
267 NOTREACHED();
268 break;
269 }
270 return;
271 }
272
223 // Uses kPremul_SkAlphaType since the result is not known to be opaque. 273 // Uses kPremul_SkAlphaType since the result is not known to be opaque.
224 SkImageInfo info = 274 SkImageInfo info =
225 SkImageInfo::MakeN32(size.width(), size.height(), kPremul_SkAlphaType); 275 SkImageInfo::MakeN32(size.width(), size.height(), kPremul_SkAlphaType);
226 SkColorType buffer_color_type = ResourceFormatToSkColorType(format); 276 SkColorType buffer_color_type = ResourceFormatToSkColorType(format);
227 bool needs_copy = buffer_color_type != info.colorType(); 277 bool needs_copy = buffer_color_type != info.colorType();
228 278
229 // Use unknown pixel geometry to disable LCD text. 279 // Use unknown pixel geometry to disable LCD text.
230 SkSurfaceProps surface_props(0, kUnknown_SkPixelGeometry); 280 SkSurfaceProps surface_props(0, kUnknown_SkPixelGeometry);
231 if (raster_source->CanUseLCDText()) { 281 if (raster_source->CanUseLCDText()) {
232 // LegacyFontHost will get LCD text and skia figures out what type to use. 282 // LegacyFontHost will get LCD text and skia figures out what type to use.
(...skipping 21 matching lines...) Expand all
254 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the 304 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the
255 // bitmap data. There will be no need to call SkAlign4 once crbug.com/293728 305 // bitmap data. There will be no need to call SkAlign4 once crbug.com/293728
256 // is fixed. 306 // is fixed.
257 const size_t dst_row_bytes = SkAlign4(dst_info.minRowBytes()); 307 const size_t dst_row_bytes = SkAlign4(dst_info.minRowBytes());
258 DCHECK_EQ(0u, dst_row_bytes % 4); 308 DCHECK_EQ(0u, dst_row_bytes % 4);
259 bool success = canvas->readPixels(dst_info, memory, dst_row_bytes, 0, 0); 309 bool success = canvas->readPixels(dst_info, memory, dst_row_bytes, 0, 0);
260 DCHECK_EQ(true, success); 310 DCHECK_EQ(true, success);
261 } 311 }
262 312
263 } // namespace cc 313 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager_unittest.cc ('k') | cc/resources/tile_task_worker_pool_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698