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

Side by Side Diff: cc/picture_layer_impl.cc

Issue 12353003: cc: Refactored Tile::GetResourceId (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: compile fix Created 7 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « cc/managed_tile_state.cc ('k') | cc/picture_layer_tiling.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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/picture_layer_impl.h" 5 #include "cc/picture_layer_impl.h"
6 6
7 #include "base/time.h" 7 #include "base/time.h"
8 #include "cc/append_quads_data.h" 8 #include "cc/append_quads_data.h"
9 #include "cc/checkerboard_draw_quad.h" 9 #include "cc/checkerboard_draw_quad.h"
10 #include "cc/debug_border_draw_quad.h" 10 #include "cc/debug_border_draw_quad.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 if (ShowDebugBorders()) { 108 if (ShowDebugBorders()) {
109 for (PictureLayerTilingSet::Iterator iter(tilings_.get(), 109 for (PictureLayerTilingSet::Iterator iter(tilings_.get(),
110 contents_scale_x(), 110 contents_scale_x(),
111 rect, 111 rect,
112 ideal_contents_scale_, 112 ideal_contents_scale_,
113 layerDeviceAlignment); 113 layerDeviceAlignment);
114 iter; 114 iter;
115 ++iter) { 115 ++iter) {
116 SkColor color; 116 SkColor color;
117 float width; 117 float width;
118 if (*iter && iter->IsReadyToDraw()) { 118 if (*iter && iter->drawing_info().IsReadyToDraw()) {
119 if (iter->is_solid_color() || iter->is_transparent()) { 119 ManagedTileState::DrawingInfo::Mode mode = iter->drawing_info().mode();
120 if (mode == ManagedTileState::DrawingInfo::SOLID_COLOR_MODE ||
121 mode == ManagedTileState::DrawingInfo::TRANSPARENT_MODE) {
120 color = DebugColors::SolidColorTileBorderColor(); 122 color = DebugColors::SolidColorTileBorderColor();
121 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); 123 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl());
122 } else if (iter->priority(ACTIVE_TREE).resolution == HIGH_RESOLUTION) { 124 } else if (iter->priority(ACTIVE_TREE).resolution == HIGH_RESOLUTION) {
123 color = DebugColors::HighResTileBorderColor(); 125 color = DebugColors::HighResTileBorderColor();
124 width = DebugColors::HighResTileBorderWidth(layer_tree_impl()); 126 width = DebugColors::HighResTileBorderWidth(layer_tree_impl());
125 } else if (iter->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) { 127 } else if (iter->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) {
126 color = DebugColors::LowResTileBorderColor(); 128 color = DebugColors::LowResTileBorderColor();
127 width = DebugColors::LowResTileBorderWidth(layer_tree_impl()); 129 width = DebugColors::LowResTileBorderWidth(layer_tree_impl());
128 } else if (iter->contents_scale() > contents_scale_x()) { 130 } else if (iter->contents_scale() > contents_scale_x()) {
129 color = DebugColors::ExtraHighResTileBorderColor(); 131 color = DebugColors::ExtraHighResTileBorderColor();
(...skipping 22 matching lines...) Expand all
152 for (PictureLayerTilingSet::Iterator iter(tilings_.get(), 154 for (PictureLayerTilingSet::Iterator iter(tilings_.get(),
153 contents_scale_x(), 155 contents_scale_x(),
154 rect, 156 rect,
155 ideal_contents_scale_, 157 ideal_contents_scale_,
156 layerDeviceAlignment); 158 layerDeviceAlignment);
157 iter; 159 iter;
158 ++iter) { 160 ++iter) {
159 161
160 gfx::Rect geometry_rect = iter.geometry_rect(); 162 gfx::Rect geometry_rect = iter.geometry_rect();
161 ResourceProvider::ResourceId resource = 0; 163 ResourceProvider::ResourceId resource = 0;
162 if (*iter) { 164 if (!*iter || !iter->drawing_info().IsReadyToDraw()) {
163 if (iter->is_solid_color()) {
164 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
165 quad->SetNew(sharedQuadState, geometry_rect, iter->solid_color());
166 quadSink->append(quad.PassAs<DrawQuad>(), appendQuadsData);
167
168 if (!seen_tilings.size() || seen_tilings.back() != iter.CurrentTiling())
169 seen_tilings.push_back(iter.CurrentTiling());
170 continue;
171 } else if (iter->is_transparent()) {
172 continue;
173 }
174 resource = iter->GetResourceId();
175 }
176 if (!resource) {
177 if (DrawCheckerboardForMissingTiles()) { 165 if (DrawCheckerboardForMissingTiles()) {
178 // TODO(enne): Figure out how to show debug "invalidated checker" color 166 // TODO(enne): Figure out how to show debug "invalidated checker" color
179 scoped_ptr<CheckerboardDrawQuad> quad = CheckerboardDrawQuad::Create(); 167 scoped_ptr<CheckerboardDrawQuad> quad = CheckerboardDrawQuad::Create();
180 SkColor color = DebugColors::DefaultCheckerboardColor(); 168 SkColor color = DebugColors::DefaultCheckerboardColor();
181 quad->SetNew(sharedQuadState, geometry_rect, color); 169 quad->SetNew(sharedQuadState, geometry_rect, color);
182 if (quadSink->append(quad.PassAs<DrawQuad>(), appendQuadsData)) 170 if (quadSink->append(quad.PassAs<DrawQuad>(), appendQuadsData))
183 appendQuadsData->numMissingTiles++; 171 appendQuadsData->numMissingTiles++;
184 } else { 172 } else {
185 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); 173 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
186 quad->SetNew(sharedQuadState, geometry_rect, background_color()); 174 quad->SetNew(sharedQuadState, geometry_rect, background_color());
187 if (quadSink->append(quad.PassAs<DrawQuad>(), appendQuadsData)) 175 if (quadSink->append(quad.PassAs<DrawQuad>(), appendQuadsData))
188 appendQuadsData->numMissingTiles++; 176 appendQuadsData->numMissingTiles++;
189 } 177 }
190 178
191 appendQuadsData->hadIncompleteTile = true; 179 appendQuadsData->hadIncompleteTile = true;
192 continue; 180 continue;
193 } 181 }
194 182
195 if (iter->contents_scale() != ideal_contents_scale_) 183 const ManagedTileState::DrawingInfo& drawing_info = iter->drawing_info();
196 appendQuadsData->hadIncompleteTile = true; 184 switch (drawing_info.mode()) {
185 case ManagedTileState::DrawingInfo::TEXTURE_MODE: {
186 if (iter->contents_scale() != ideal_contents_scale_)
187 appendQuadsData->hadIncompleteTile = true;
197 188
198 gfx::RectF texture_rect = iter.texture_rect(); 189 gfx::RectF texture_rect = iter.texture_rect();
199 gfx::Rect opaque_rect = iter->opaque_rect(); 190 gfx::Rect opaque_rect = iter->opaque_rect();
200 opaque_rect.Intersect(content_rect); 191 opaque_rect.Intersect(content_rect);
201 192
202 scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create(); 193 scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create();
203 quad->SetNew(sharedQuadState, 194 quad->SetNew(sharedQuadState,
204 geometry_rect, 195 geometry_rect,
205 opaque_rect, 196 opaque_rect,
206 resource, 197 drawing_info.get_resource_id(),
207 texture_rect, 198 texture_rect,
208 iter.texture_size(), 199 iter.texture_size(),
209 iter->contents_swizzled()); 200 drawing_info.contents_swizzled());
210 quadSink->append(quad.PassAs<DrawQuad>(), appendQuadsData); 201 quadSink->append(quad.PassAs<DrawQuad>(), appendQuadsData);
202 break;
203 }
204 case ManagedTileState::DrawingInfo::SOLID_COLOR_MODE: {
205 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
206 quad->SetNew(sharedQuadState,
207 geometry_rect,
208 drawing_info.get_solid_color());
209 quadSink->append(quad.PassAs<DrawQuad>(), appendQuadsData);
210 break;
211 }
212 case ManagedTileState::DrawingInfo::TRANSPARENT_MODE:
213 break;
214 case ManagedTileState::DrawingInfo::PICTURE_PILE_MODE:
215 // TODO: crbug.com/173011 would fill this part in.
216 default:
217 NOTREACHED();
218 }
211 219
212 if (!seen_tilings.size() || seen_tilings.back() != iter.CurrentTiling()) 220 if (!seen_tilings.size() || seen_tilings.back() != iter.CurrentTiling())
213 seen_tilings.push_back(iter.CurrentTiling()); 221 seen_tilings.push_back(iter.CurrentTiling());
214 } 222 }
215 223
216 // Aggressively remove any tilings that are not seen to save memory. Note 224 // Aggressively remove any tilings that are not seen to save memory. Note
217 // that this is at the expense of doing cause more frequent re-painting. A 225 // that this is at the expense of doing cause more frequent re-painting. A
218 // better scheme would be to maintain a tighter visibleContentRect for the 226 // better scheme would be to maintain a tighter visibleContentRect for the
219 // finer tilings. 227 // finer tilings.
220 CleanUpTilingsOnActiveLayer(seen_tilings); 228 CleanUpTilingsOnActiveLayer(seen_tilings);
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 gfx::Rect content_rect(content_bounds()); 475 gfx::Rect content_rect(content_bounds());
468 float scale = contents_scale_x(); 476 float scale = contents_scale_x();
469 for (PictureLayerTilingSet::Iterator iter(tilings_.get(), 477 for (PictureLayerTilingSet::Iterator iter(tilings_.get(),
470 scale, 478 scale,
471 content_rect, 479 content_rect,
472 ideal_contents_scale_, 480 ideal_contents_scale_,
473 PictureLayerTiling::LayerDeviceAlign mentUnknown); 481 PictureLayerTiling::LayerDeviceAlign mentUnknown);
474 iter; 482 iter;
475 ++iter) { 483 ++iter) {
476 // Mask resource not ready yet. 484 // Mask resource not ready yet.
477 if (!*iter || !iter->GetResourceId()) 485 if (!*iter ||
486 iter->drawing_info().mode() !=
487 ManagedTileState::DrawingInfo::TEXTURE_MODE ||
488 !iter->drawing_info().IsReadyToDraw())
478 return 0; 489 return 0;
479 // Masks only supported if they fit on exactly one tile. 490 // Masks only supported if they fit on exactly one tile.
480 if (iter.geometry_rect() != content_rect) 491 if (iter.geometry_rect() != content_rect)
481 return 0; 492 return 0;
482 return iter->GetResourceId(); 493 return iter->drawing_info().get_resource_id();
483 } 494 }
484 return 0; 495 return 0;
485 } 496 }
486 497
487 bool PictureLayerImpl::AreVisibleResourcesReady() const { 498 bool PictureLayerImpl::AreVisibleResourcesReady() const {
488 DCHECK(layer_tree_impl()->IsPendingTree()); 499 DCHECK(layer_tree_impl()->IsPendingTree());
489 DCHECK(ideal_contents_scale_); 500 DCHECK(ideal_contents_scale_);
490 501
491 const gfx::Rect& rect = visible_content_rect(); 502 const gfx::Rect& rect = visible_content_rect();
492 503
(...skipping 23 matching lines...) Expand all
516 if (tiling->contents_scale() < min_acceptable_scale) 527 if (tiling->contents_scale() < min_acceptable_scale)
517 continue; 528 continue;
518 529
519 for (PictureLayerTiling::Iterator iter(tiling, 530 for (PictureLayerTiling::Iterator iter(tiling,
520 contents_scale_x(), 531 contents_scale_x(),
521 rect, 532 rect,
522 PictureLayerTiling::LayerDeviceAlignm entUnknown); 533 PictureLayerTiling::LayerDeviceAlignm entUnknown);
523 iter; 534 iter;
524 ++iter) { 535 ++iter) {
525 // A null tile (i.e. no recording) is considered "ready". 536 // A null tile (i.e. no recording) is considered "ready".
526 if (!*iter || iter->IsReadyToDraw()) 537 if (!*iter || iter->drawing_info().IsReadyToDraw())
527 missing_region.Subtract(iter.geometry_rect()); 538 missing_region.Subtract(iter.geometry_rect());
528 } 539 }
529 } 540 }
530 541
531 return missing_region.IsEmpty(); 542 return missing_region.IsEmpty();
532 } 543 }
533 544
534 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) { 545 PictureLayerTiling* PictureLayerImpl::AddTiling(float contents_scale) {
535 DCHECK(contents_scale >= MinimumContentsScale()); 546 DCHECK(contents_scale >= MinimumContentsScale());
536 547
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 scoped_ptr<base::Value> PictureLayerImpl::AsValue() const { 805 scoped_ptr<base::Value> PictureLayerImpl::AsValue() const {
795 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); 806 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
796 LayerImpl::AsValueInto(state.get()); 807 LayerImpl::AsValueInto(state.get());
797 808
798 state->SetDouble("ideal_contents_scale", ideal_contents_scale_); 809 state->SetDouble("ideal_contents_scale", ideal_contents_scale_);
799 state->Set("tilings", tilings_->AsValue().release()); 810 state->Set("tilings", tilings_->AsValue().release());
800 return state.PassAs<base::Value>(); 811 return state.PassAs<base::Value>();
801 } 812 }
802 813
803 } // namespace cc 814 } // namespace cc
OLDNEW
« no previous file with comments | « cc/managed_tile_state.cc ('k') | cc/picture_layer_tiling.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698