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

Side by Side Diff: cc/layers/tiled_layer_impl.cc

Issue 308193003: Removed QuadSink and MockQuadCuller (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@plumLayerImpl
Patch Set: rebase Created 6 years, 6 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
« no previous file with comments | « cc/layers/tiled_layer_impl.h ('k') | cc/layers/tiled_layer_impl_unittest.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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/layers/tiled_layer_impl.h" 5 #include "cc/layers/tiled_layer_impl.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "cc/base/math_util.h" 9 #include "cc/base/math_util.h"
10 #include "cc/debug/debug_colors.h" 10 #include "cc/debug/debug_colors.h"
11 #include "cc/layers/append_quads_data.h" 11 #include "cc/layers/append_quads_data.h"
12 #include "cc/layers/quad_sink.h"
13 #include "cc/quads/checkerboard_draw_quad.h" 12 #include "cc/quads/checkerboard_draw_quad.h"
14 #include "cc/quads/debug_border_draw_quad.h" 13 #include "cc/quads/debug_border_draw_quad.h"
15 #include "cc/quads/solid_color_draw_quad.h" 14 #include "cc/quads/solid_color_draw_quad.h"
16 #include "cc/quads/tile_draw_quad.h" 15 #include "cc/quads/tile_draw_quad.h"
17 #include "cc/resources/layer_tiling_data.h" 16 #include "cc/resources/layer_tiling_data.h"
17 #include "cc/trees/occlusion_tracker.h"
18 #include "third_party/khronos/GLES2/gl2.h" 18 #include "third_party/khronos/GLES2/gl2.h"
19 #include "third_party/skia/include/core/SkColor.h" 19 #include "third_party/skia/include/core/SkColor.h"
20 #include "ui/gfx/quad_f.h" 20 #include "ui/gfx/quad_f.h"
21 21
22 namespace cc { 22 namespace cc {
23 23
24 class DrawableTile : public LayerTilingData::Tile { 24 class DrawableTile : public LayerTilingData::Tile {
25 public: 25 public:
26 static scoped_ptr<DrawableTile> Create() { 26 static scoped_ptr<DrawableTile> Create() {
27 return make_scoped_ptr(new DrawableTile()); 27 return make_scoped_ptr(new DrawableTile());
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 144
145 bool TiledLayerImpl::WillDraw(DrawMode draw_mode, 145 bool TiledLayerImpl::WillDraw(DrawMode draw_mode,
146 ResourceProvider* resource_provider) { 146 ResourceProvider* resource_provider) {
147 if (!tiler_ || tiler_->has_empty_bounds() || 147 if (!tiler_ || tiler_->has_empty_bounds() ||
148 visible_content_rect().IsEmpty() || 148 visible_content_rect().IsEmpty() ||
149 draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE) 149 draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE)
150 return false; 150 return false;
151 return LayerImpl::WillDraw(draw_mode, resource_provider); 151 return LayerImpl::WillDraw(draw_mode, resource_provider);
152 } 152 }
153 153
154 void TiledLayerImpl::AppendQuads(QuadSink* quad_sink, 154 void TiledLayerImpl::AppendQuads(
155 AppendQuadsData* append_quads_data) { 155 RenderPass* render_pass,
156 const OcclusionTracker<LayerImpl>& occlusion_tracker,
157 AppendQuadsData* append_quads_data) {
156 DCHECK(tiler_); 158 DCHECK(tiler_);
157 DCHECK(!tiler_->has_empty_bounds()); 159 DCHECK(!tiler_->has_empty_bounds());
158 DCHECK(!visible_content_rect().IsEmpty()); 160 DCHECK(!visible_content_rect().IsEmpty());
159 161
160 gfx::Rect content_rect = visible_content_rect(); 162 gfx::Rect content_rect = visible_content_rect();
161 SharedQuadState* shared_quad_state = quad_sink->CreateSharedQuadState(); 163 SharedQuadState* shared_quad_state =
164 render_pass->CreateAndAppendSharedQuadState();
162 PopulateSharedQuadState(shared_quad_state); 165 PopulateSharedQuadState(shared_quad_state);
163 166
164 AppendDebugBorderQuad( 167 AppendDebugBorderQuad(
165 quad_sink, content_bounds(), shared_quad_state, append_quads_data); 168 render_pass, content_bounds(), shared_quad_state, append_quads_data);
166 169
167 int left, top, right, bottom; 170 int left, top, right, bottom;
168 tiler_->ContentRectToTileIndices(content_rect, &left, &top, &right, &bottom); 171 tiler_->ContentRectToTileIndices(content_rect, &left, &top, &right, &bottom);
169 172
170 if (ShowDebugBorders()) { 173 if (ShowDebugBorders()) {
171 for (int j = top; j <= bottom; ++j) { 174 for (int j = top; j <= bottom; ++j) {
172 for (int i = left; i <= right; ++i) { 175 for (int i = left; i <= right; ++i) {
173 DrawableTile* tile = TileAt(i, j); 176 DrawableTile* tile = TileAt(i, j);
174 gfx::Rect tile_rect = tiler_->tile_bounds(i, j); 177 gfx::Rect tile_rect = tiler_->tile_bounds(i, j);
175 gfx::Rect visible_tile_rect = tile_rect; 178 gfx::Rect visible_tile_rect = tile_rect;
176 SkColor border_color; 179 SkColor border_color;
177 float border_width; 180 float border_width;
178 181
179 if (skips_draw_ || !tile || !tile->resource_id()) { 182 if (skips_draw_ || !tile || !tile->resource_id()) {
180 border_color = DebugColors::MissingTileBorderColor(); 183 border_color = DebugColors::MissingTileBorderColor();
181 border_width = DebugColors::MissingTileBorderWidth(layer_tree_impl()); 184 border_width = DebugColors::MissingTileBorderWidth(layer_tree_impl());
182 } else { 185 } else {
183 border_color = DebugColors::HighResTileBorderColor(); 186 border_color = DebugColors::HighResTileBorderColor();
184 border_width = DebugColors::HighResTileBorderWidth(layer_tree_impl()); 187 border_width = DebugColors::HighResTileBorderWidth(layer_tree_impl());
185 } 188 }
186 scoped_ptr<DebugBorderDrawQuad> debug_border_quad = 189 scoped_ptr<DebugBorderDrawQuad> debug_border_quad =
187 DebugBorderDrawQuad::Create(); 190 DebugBorderDrawQuad::Create();
188 debug_border_quad->SetNew(shared_quad_state, 191 debug_border_quad->SetNew(shared_quad_state,
189 tile_rect, 192 tile_rect,
190 visible_tile_rect, 193 visible_tile_rect,
191 border_color, 194 border_color,
192 border_width); 195 border_width);
193 quad_sink->Append(debug_border_quad.PassAs<DrawQuad>()); 196 render_pass->AppendDrawQuad(debug_border_quad.PassAs<DrawQuad>());
194 } 197 }
195 } 198 }
196 } 199 }
197 200
198 if (skips_draw_) 201 if (skips_draw_)
199 return; 202 return;
200 203
201 for (int j = top; j <= bottom; ++j) { 204 for (int j = top; j <= bottom; ++j) {
202 for (int i = left; i <= right; ++i) { 205 for (int i = left; i <= right; ++i) {
203 DrawableTile* tile = TileAt(i, j); 206 DrawableTile* tile = TileAt(i, j);
204 gfx::Rect tile_rect = tiler_->tile_bounds(i, j); 207 gfx::Rect tile_rect = tiler_->tile_bounds(i, j);
205 gfx::Rect display_rect = tile_rect; 208 gfx::Rect display_rect = tile_rect;
206 tile_rect.Intersect(content_rect); 209 tile_rect.Intersect(content_rect);
207 210
208 // Skip empty tiles. 211 // Skip empty tiles.
209 if (tile_rect.IsEmpty()) 212 if (tile_rect.IsEmpty())
210 continue; 213 continue;
211 214
212 gfx::Rect visible_tile_rect = 215 gfx::Rect visible_tile_rect =
213 quad_sink->UnoccludedContentRect(tile_rect, draw_transform()); 216 occlusion_tracker.UnoccludedContentRect(tile_rect, draw_transform());
214 if (visible_tile_rect.IsEmpty()) 217 if (visible_tile_rect.IsEmpty())
215 continue; 218 continue;
216 219
217 if (!tile || !tile->resource_id()) { 220 if (!tile || !tile->resource_id()) {
218 SkColor checker_color; 221 SkColor checker_color;
219 if (ShowDebugBorders()) { 222 if (ShowDebugBorders()) {
220 checker_color = 223 checker_color =
221 tile ? DebugColors::InvalidatedTileCheckerboardColor() 224 tile ? DebugColors::InvalidatedTileCheckerboardColor()
222 : DebugColors::EvictedTileCheckerboardColor(); 225 : DebugColors::EvictedTileCheckerboardColor();
223 } else { 226 } else {
224 checker_color = DebugColors::DefaultCheckerboardColor(); 227 checker_color = DebugColors::DefaultCheckerboardColor();
225 } 228 }
226 229
227 scoped_ptr<CheckerboardDrawQuad> checkerboard_quad = 230 scoped_ptr<CheckerboardDrawQuad> checkerboard_quad =
228 CheckerboardDrawQuad::Create(); 231 CheckerboardDrawQuad::Create();
229 checkerboard_quad->SetNew( 232 checkerboard_quad->SetNew(
230 shared_quad_state, tile_rect, visible_tile_rect, checker_color); 233 shared_quad_state, tile_rect, visible_tile_rect, checker_color);
231 quad_sink->Append(checkerboard_quad.PassAs<DrawQuad>()); 234 render_pass->AppendDrawQuad(checkerboard_quad.PassAs<DrawQuad>());
232 append_quads_data->num_missing_tiles++; 235 append_quads_data->num_missing_tiles++;
233 continue; 236 continue;
234 } 237 }
235 238
236 gfx::Rect tile_opaque_rect = 239 gfx::Rect tile_opaque_rect =
237 contents_opaque() ? tile_rect : gfx::IntersectRects( 240 contents_opaque() ? tile_rect : gfx::IntersectRects(
238 tile->opaque_rect(), tile_rect); 241 tile->opaque_rect(), tile_rect);
239 242
240 // Keep track of how the top left has moved, so the texture can be 243 // Keep track of how the top left has moved, so the texture can be
241 // offset the same amount. 244 // offset the same amount.
242 gfx::Vector2d display_offset = tile_rect.origin() - display_rect.origin(); 245 gfx::Vector2d display_offset = tile_rect.origin() - display_rect.origin();
243 gfx::Vector2d texture_offset = 246 gfx::Vector2d texture_offset =
244 tiler_->texture_offset(i, j) + display_offset; 247 tiler_->texture_offset(i, j) + display_offset;
245 gfx::RectF tex_coord_rect = gfx::RectF(tile_rect.size()) + texture_offset; 248 gfx::RectF tex_coord_rect = gfx::RectF(tile_rect.size()) + texture_offset;
246 249
247 float tile_width = static_cast<float>(tiler_->tile_size().width()); 250 float tile_width = static_cast<float>(tiler_->tile_size().width());
248 float tile_height = static_cast<float>(tiler_->tile_size().height()); 251 float tile_height = static_cast<float>(tiler_->tile_size().height());
249 gfx::Size texture_size(tile_width, tile_height); 252 gfx::Size texture_size(tile_width, tile_height);
250 253
251 scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create(); 254 scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create();
252 quad->SetNew(shared_quad_state, 255 quad->SetNew(shared_quad_state,
253 tile_rect, 256 tile_rect,
254 tile_opaque_rect, 257 tile_opaque_rect,
255 visible_tile_rect, 258 visible_tile_rect,
256 tile->resource_id(), 259 tile->resource_id(),
257 tex_coord_rect, 260 tex_coord_rect,
258 texture_size, 261 texture_size,
259 tile->contents_swizzled()); 262 tile->contents_swizzled());
260 quad_sink->Append(quad.PassAs<DrawQuad>()); 263 render_pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
261 } 264 }
262 } 265 }
263 } 266 }
264 267
265 void TiledLayerImpl::SetTilingData(const LayerTilingData& tiler) { 268 void TiledLayerImpl::SetTilingData(const LayerTilingData& tiler) {
266 if (tiler_) { 269 if (tiler_) {
267 tiler_->reset(); 270 tiler_->reset();
268 } else { 271 } else {
269 tiler_ = LayerTilingData::Create(tiler.tile_size(), 272 tiler_ = LayerTilingData::Create(tiler.tile_size(),
270 tiler.has_border_texels() 273 tiler.has_border_texels()
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 310
308 void TiledLayerImpl::ReleaseResources() { 311 void TiledLayerImpl::ReleaseResources() {
309 tiler_->reset(); 312 tiler_->reset();
310 } 313 }
311 314
312 const char* TiledLayerImpl::LayerTypeAsString() const { 315 const char* TiledLayerImpl::LayerTypeAsString() const {
313 return "cc::TiledLayerImpl"; 316 return "cc::TiledLayerImpl";
314 } 317 }
315 318
316 } // namespace cc 319 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/tiled_layer_impl.h ('k') | cc/layers/tiled_layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698