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

Side by Side Diff: cc/raster/raster_buffer_provider.cc

Issue 2175553002: Raster PictureLayerTiling with fractional translation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Raster PictureLayerTiling with fractional translation Created 4 years, 5 months 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
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/raster/raster_buffer_provider.h" 5 #include "cc/raster/raster_buffer_provider.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 #include "cc/playback/raster_source.h" 10 #include "cc/playback/raster_source.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 // static 45 // static
46 void RasterBufferProvider::PlaybackToMemory( 46 void RasterBufferProvider::PlaybackToMemory(
47 void* memory, 47 void* memory,
48 ResourceFormat format, 48 ResourceFormat format,
49 const gfx::Size& size, 49 const gfx::Size& size,
50 size_t stride, 50 size_t stride,
51 const RasterSource* raster_source, 51 const RasterSource* raster_source,
52 const gfx::Rect& canvas_bitmap_rect, 52 const gfx::Rect& canvas_bitmap_rect,
53 const gfx::Rect& canvas_playback_rect, 53 const gfx::Rect& canvas_playback_rect,
54 float scale, 54 float scale,
55 const gfx::Vector2dF& translation,
55 const RasterSource::PlaybackSettings& playback_settings) { 56 const RasterSource::PlaybackSettings& playback_settings) {
56 TRACE_EVENT0("disabled-by-default-cc.debug", 57 TRACE_EVENT0("disabled-by-default-cc.debug",
57 "RasterBufferProvider::PlaybackToMemory"); 58 "RasterBufferProvider::PlaybackToMemory");
58 59
59 DCHECK(IsSupportedPlaybackToMemoryFormat(format)) << format; 60 DCHECK(IsSupportedPlaybackToMemoryFormat(format)) << format;
60 61
61 // Uses kPremul_SkAlphaType since the result is not known to be opaque. 62 // Uses kPremul_SkAlphaType since the result is not known to be opaque.
62 SkImageInfo info = 63 SkImageInfo info =
63 SkImageInfo::MakeN32(size.width(), size.height(), kPremul_SkAlphaType); 64 SkImageInfo::MakeN32(size.width(), size.height(), kPremul_SkAlphaType);
64 65
65 // Use unknown pixel geometry to disable LCD text. 66 // Use unknown pixel geometry to disable LCD text.
66 SkSurfaceProps surface_props(0, kUnknown_SkPixelGeometry); 67 SkSurfaceProps surface_props(0, kUnknown_SkPixelGeometry);
67 if (raster_source->CanUseLCDText()) { 68 if (raster_source->CanUseLCDText()) {
68 // LegacyFontHost will get LCD text and skia figures out what type to use. 69 // LegacyFontHost will get LCD text and skia figures out what type to use.
69 surface_props = SkSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType); 70 surface_props = SkSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType);
70 } 71 }
71 72
72 if (!stride) 73 if (!stride)
73 stride = info.minRowBytes(); 74 stride = info.minRowBytes();
74 DCHECK_GT(stride, 0u); 75 DCHECK_GT(stride, 0u);
75 76
76 switch (format) { 77 switch (format) {
77 case RGBA_8888: 78 case RGBA_8888:
78 case BGRA_8888: { 79 case BGRA_8888: {
79 sk_sp<SkSurface> surface = 80 sk_sp<SkSurface> surface =
80 SkSurface::MakeRasterDirect(info, memory, stride, &surface_props); 81 SkSurface::MakeRasterDirect(info, memory, stride, &surface_props);
81 raster_source->PlaybackToCanvas(surface->getCanvas(), canvas_bitmap_rect, 82 SkCanvas* canvas = surface->getCanvas();
82 canvas_playback_rect, scale, 83 canvas->translate(-canvas_bitmap_rect.x(), -canvas_bitmap_rect.y());
83 playback_settings); 84 canvas->clipRect(gfx::RectToSkRect(canvas_playback_rect));
85 canvas->translate(translation.x(), translation.y());
86 canvas->scale(scale, scale);
87 raster_source->PlaybackToCanvas(surface->getCanvas(), playback_settings);
84 return; 88 return;
85 } 89 }
86 case RGBA_4444: 90 case RGBA_4444:
87 case ETC1: { 91 case ETC1: {
88 sk_sp<SkSurface> surface = SkSurface::MakeRaster(info, &surface_props); 92 sk_sp<SkSurface> surface = SkSurface::MakeRaster(info, &surface_props);
93 SkCanvas* canvas = surface->getCanvas();
94 canvas->translate(-canvas_bitmap_rect.x(), -canvas_bitmap_rect.y());
89 // TODO(reveman): Improve partial raster support by reducing the size of 95 // TODO(reveman): Improve partial raster support by reducing the size of
90 // playback rect passed to PlaybackToCanvas. crbug.com/519070 96 // the clip rect here. crbug.com/519070
91 raster_source->PlaybackToCanvas(surface->getCanvas(), canvas_bitmap_rect, 97 canvas->clipRect(gfx::RectToSkRect(canvas_bitmap_rect));
92 canvas_bitmap_rect, scale, 98 canvas->translate(translation.x(), translation.y());
93 playback_settings); 99 canvas->scale(scale, scale);
100 raster_source->PlaybackToCanvas(surface->getCanvas(), playback_settings);
94 101
95 if (format == ETC1) { 102 if (format == ETC1) {
96 TRACE_EVENT0("cc", 103 TRACE_EVENT0("cc",
97 "RasterBufferProvider::PlaybackToMemory::CompressETC1"); 104 "RasterBufferProvider::PlaybackToMemory::CompressETC1");
98 DCHECK_EQ(size.width() % 4, 0); 105 DCHECK_EQ(size.width() % 4, 0);
99 DCHECK_EQ(size.height() % 4, 0); 106 DCHECK_EQ(size.height() % 4, 0);
100 std::unique_ptr<TextureCompressor> texture_compressor = 107 std::unique_ptr<TextureCompressor> texture_compressor =
101 TextureCompressor::Create(TextureCompressor::kFormatETC1); 108 TextureCompressor::Create(TextureCompressor::kFormatETC1);
102 SkPixmap pixmap; 109 SkPixmap pixmap;
103 surface->peekPixels(&pixmap); 110 surface->peekPixels(&pixmap);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 case RGB_565: 149 case RGB_565:
143 case RED_8: 150 case RED_8:
144 case LUMINANCE_F16: 151 case LUMINANCE_F16:
145 return false; 152 return false;
146 } 153 }
147 NOTREACHED(); 154 NOTREACHED();
148 return false; 155 return false;
149 } 156 }
150 157
151 } // namespace cc 158 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698