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

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

Issue 14417014: cc: Add tile-free software compositing mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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
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/layers/picture_layer_impl.h" 5 #include "cc/layers/picture_layer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "cc/base/math_util.h" 10 #include "cc/base/math_util.h"
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 150
151 // Keep track of the tilings that were used so that tilings that are 151 // Keep track of the tilings that were used so that tilings that are
152 // unused can be considered for removal. 152 // unused can be considered for removal.
153 std::vector<PictureLayerTiling*> seen_tilings; 153 std::vector<PictureLayerTiling*> seen_tilings;
154 154
155 for (PictureLayerTilingSet::CoverageIterator iter( 155 for (PictureLayerTilingSet::CoverageIterator iter(
156 tilings_.get(), contents_scale_x(), rect, ideal_contents_scale_); 156 tilings_.get(), contents_scale_x(), rect, ideal_contents_scale_);
157 iter; 157 iter;
158 ++iter) { 158 ++iter) {
159 gfx::Rect geometry_rect = iter.geometry_rect(); 159 gfx::Rect geometry_rect = iter.geometry_rect();
160 if (!*iter || !iter->drawing_info().IsReadyToDraw()) { 160 if (!*iter || (!iter->drawing_info().IsReadyToDraw() &&
161 !append_quads_data->cannot_append_tile_draw_quads)) {
161 if (DrawCheckerboardForMissingTiles()) { 162 if (DrawCheckerboardForMissingTiles()) {
162 // TODO(enne): Figure out how to show debug "invalidated checker" color 163 // TODO(enne): Figure out how to show debug "invalidated checker" color
163 scoped_ptr<CheckerboardDrawQuad> quad = CheckerboardDrawQuad::Create(); 164 scoped_ptr<CheckerboardDrawQuad> quad = CheckerboardDrawQuad::Create();
164 SkColor color = DebugColors::DefaultCheckerboardColor(); 165 SkColor color = DebugColors::DefaultCheckerboardColor();
165 quad->SetNew(shared_quad_state, geometry_rect, color); 166 quad->SetNew(shared_quad_state, geometry_rect, color);
166 if (quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data)) 167 if (quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data))
167 append_quads_data->num_missing_tiles++; 168 append_quads_data->num_missing_tiles++;
168 } else { 169 } else {
169 SkColor color = background_color(); 170 SkColor color = background_color();
170 // TODO(wangxianzhu): Change the next |if| condition once we support 171 // TODO(wangxianzhu): Change the next |if| condition once we support
(...skipping 16 matching lines...) Expand all
187 quad->SetNew(shared_quad_state, geometry_rect, color); 188 quad->SetNew(shared_quad_state, geometry_rect, color);
188 if (quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data)) 189 if (quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data))
189 append_quads_data->num_missing_tiles++; 190 append_quads_data->num_missing_tiles++;
190 } 191 }
191 192
192 append_quads_data->had_incomplete_tile = true; 193 append_quads_data->had_incomplete_tile = true;
193 continue; 194 continue;
194 } 195 }
195 196
196 const ManagedTileState::DrawingInfo& drawing_info = iter->drawing_info(); 197 const ManagedTileState::DrawingInfo& drawing_info = iter->drawing_info();
197 switch (drawing_info.mode()) { 198 ManagedTileState::DrawingInfo::Mode mode = iter->drawing_info().mode();
199 if (append_quads_data->cannot_append_tile_draw_quads &&
enne (OOO) 2013/04/28 22:42:27 I think you should not append one picture quad per
aelias_OOO_until_Jul13 2013/04/30 07:28:20 Agreed, although cut-and-pasting that snippet resu
200 mode == ManagedTileState::DrawingInfo::RESOURCE_MODE)
201 mode = ManagedTileState::DrawingInfo::PICTURE_PILE_MODE;
202 switch (mode) {
198 case ManagedTileState::DrawingInfo::RESOURCE_MODE: { 203 case ManagedTileState::DrawingInfo::RESOURCE_MODE: {
199 gfx::RectF texture_rect = iter.texture_rect(); 204 gfx::RectF texture_rect = iter.texture_rect();
200 gfx::Rect opaque_rect = iter->opaque_rect(); 205 gfx::Rect opaque_rect = iter->opaque_rect();
201 opaque_rect.Intersect(content_rect); 206 opaque_rect.Intersect(content_rect);
202 207
203 if (iter->contents_scale() != ideal_contents_scale_) 208 if (iter->contents_scale() != ideal_contents_scale_)
204 append_quads_data->had_incomplete_tile = true; 209 append_quads_data->had_incomplete_tile = true;
205 210
206 scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create(); 211 scoped_ptr<TileDrawQuad> quad = TileDrawQuad::Create();
207 quad->SetNew(shared_quad_state, 212 quad->SetNew(shared_quad_state,
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 return 0; 545 return 0;
541 return iter->drawing_info().get_resource_id(); 546 return iter->drawing_info().get_resource_id();
542 } 547 }
543 return 0; 548 return 0;
544 } 549 }
545 550
546 bool PictureLayerImpl::AreVisibleResourcesReady() const { 551 bool PictureLayerImpl::AreVisibleResourcesReady() const {
547 DCHECK(layer_tree_impl()->IsPendingTree()); 552 DCHECK(layer_tree_impl()->IsPendingTree());
548 DCHECK(ideal_contents_scale_); 553 DCHECK(ideal_contents_scale_);
549 554
555 if (layer_tree_impl()->settings().tile_free_software_compositing)
enne (OOO) 2013/04/28 22:42:27 Settings are considered to be immutable. I'm not
aelias_OOO_until_Jul13 2013/04/30 07:28:20 I deleted this, it was a workaround for the issue
556 return true;
557
550 if (!tilings_->num_tilings()) 558 if (!tilings_->num_tilings())
551 return true; 559 return true;
552 560
553 gfx::Rect rect(visible_content_rect()); 561 gfx::Rect rect(visible_content_rect());
554 562
555 float min_acceptable_scale = 563 float min_acceptable_scale =
556 std::min(raster_contents_scale_, ideal_contents_scale_); 564 std::min(raster_contents_scale_, ideal_contents_scale_);
557 565
558 TreePriority tree_priority = 566 TreePriority tree_priority =
559 layer_tree_impl()->tile_manager()->GlobalState().tree_priority; 567 layer_tree_impl()->tile_manager()->GlobalState().tree_priority;
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
916 scoped_ptr<base::Value> PictureLayerImpl::AsValue() const { 924 scoped_ptr<base::Value> PictureLayerImpl::AsValue() const {
917 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); 925 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
918 LayerImpl::AsValueInto(state.get()); 926 LayerImpl::AsValueInto(state.get());
919 927
920 state->SetDouble("ideal_contents_scale", ideal_contents_scale_); 928 state->SetDouble("ideal_contents_scale", ideal_contents_scale_);
921 state->Set("tilings", tilings_->AsValue().release()); 929 state->Set("tilings", tilings_->AsValue().release());
922 return state.PassAs<base::Value>(); 930 return state.PassAs<base::Value>();
923 } 931 }
924 932
925 } // namespace cc 933 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698