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

Side by Side Diff: cc/picture_layer_impl.cc

Issue 12220133: cc: Stretch textures by .5 texels to prevent out of bounds sampling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix cc_unittests Created 7 years, 10 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 | « no previous file | cc/picture_layer_impl_unittest.cc » ('j') | cc/picture_layer_tiling.cc » ('J')
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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData); 89 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData);
90 90
91 bool clipped = false; 91 bool clipped = false;
92 gfx::QuadF target_quad = MathUtil::mapQuad( 92 gfx::QuadF target_quad = MathUtil::mapQuad(
93 drawTransform(), 93 drawTransform(),
94 gfx::QuadF(rect), 94 gfx::QuadF(rect),
95 clipped); 95 clipped);
96 bool isAxisAlignedInTarget = !clipped && target_quad.IsRectilinear(); 96 bool isAxisAlignedInTarget = !clipped && target_quad.IsRectilinear();
97 bool useAA = !isAxisAlignedInTarget; 97 bool useAA = !isAxisAlignedInTarget;
98 98
99 bool isPixelAligned = isAxisAlignedInTarget && drawTransform().IsIdentityOrInt egerTranslation();
brianderson 2013/02/13 00:10:19 Note: the logic here reflects the logic used to de
100 PictureLayerTiling::LayerDeviceAlignment layerDeviceAlignment =
101 isPixelAligned ? PictureLayerTiling::LayerAlignedToDevice
102 : PictureLayerTiling::LayerNotAlignedToDevice;
103
99 if (showDebugBorders()) { 104 if (showDebugBorders()) {
100 for (PictureLayerTilingSet::Iterator iter(tilings_.get(), 105 for (PictureLayerTilingSet::Iterator iter(tilings_.get(),
101 contentsScaleX(), 106 contentsScaleX(),
102 rect, 107 rect,
103 ideal_contents_scale_); 108 ideal_contents_scale_,
109 layerDeviceAlignment);
104 iter; 110 iter;
105 ++iter) { 111 ++iter) {
106 SkColor color; 112 SkColor color;
107 float width; 113 float width;
108 if (*iter && iter->GetResourceId()) { 114 if (*iter && iter->GetResourceId()) {
109 if (iter->priority(ACTIVE_TREE).resolution == HIGH_RESOLUTION) { 115 if (iter->priority(ACTIVE_TREE).resolution == HIGH_RESOLUTION) {
110 color = DebugColors::HighResTileBorderColor(); 116 color = DebugColors::HighResTileBorderColor();
111 width = DebugColors::HighResTileBorderWidth(layerTreeImpl()); 117 width = DebugColors::HighResTileBorderWidth(layerTreeImpl());
112 } else if (iter->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) { 118 } else if (iter->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) {
113 color = DebugColors::LowResTileBorderColor(); 119 color = DebugColors::LowResTileBorderColor();
(...skipping 18 matching lines...) Expand all
132 } 138 }
133 } 139 }
134 140
135 // Keep track of the tilings that were used so that tilings that are 141 // Keep track of the tilings that were used so that tilings that are
136 // unused can be considered for removal. 142 // unused can be considered for removal.
137 std::vector<PictureLayerTiling*> seen_tilings; 143 std::vector<PictureLayerTiling*> seen_tilings;
138 144
139 for (PictureLayerTilingSet::Iterator iter(tilings_.get(), 145 for (PictureLayerTilingSet::Iterator iter(tilings_.get(),
140 contentsScaleX(), 146 contentsScaleX(),
141 rect, 147 rect,
142 ideal_contents_scale_); 148 ideal_contents_scale_,
149 layerDeviceAlignment);
143 iter; 150 iter;
144 ++iter) { 151 ++iter) {
145 ResourceProvider::ResourceId resource = 0; 152 ResourceProvider::ResourceId resource = 0;
146 if (*iter) 153 if (*iter)
147 resource = iter->GetResourceId(); 154 resource = iter->GetResourceId();
148 155
149 gfx::Rect geometry_rect = iter.geometry_rect(); 156 gfx::Rect geometry_rect = iter.geometry_rect();
150 157
151 if (!resource) { 158 if (!resource) {
152 if (drawCheckerboardForMissingTiles()) { 159 if (drawCheckerboardForMissingTiles()) {
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 if (tilings_) 426 if (tilings_)
420 tilings_->RemoveAllTiles(); 427 tilings_->RemoveAllTiles();
421 } 428 }
422 429
423 ResourceProvider::ResourceId PictureLayerImpl::contentsResourceId() const { 430 ResourceProvider::ResourceId PictureLayerImpl::contentsResourceId() const {
424 gfx::Rect content_rect(gfx::Point(), contentBounds()); 431 gfx::Rect content_rect(gfx::Point(), contentBounds());
425 float scale = contentsScaleX(); 432 float scale = contentsScaleX();
426 for (PictureLayerTilingSet::Iterator iter(tilings_.get(), 433 for (PictureLayerTilingSet::Iterator iter(tilings_.get(),
427 scale, 434 scale,
428 content_rect, 435 content_rect,
429 ideal_contents_scale_); 436 ideal_contents_scale_,
437 PictureLayerTiling::LayerDeviceAlign mentUnknown);
430 iter; 438 iter;
431 ++iter) { 439 ++iter) {
432 // Mask resource not ready yet. 440 // Mask resource not ready yet.
433 if (!*iter || !iter->GetResourceId()) 441 if (!*iter || !iter->GetResourceId())
434 return 0; 442 return 0;
435 // Masks only supported if they fit on exactly one tile. 443 // Masks only supported if they fit on exactly one tile.
436 if (iter.geometry_rect() != content_rect) 444 if (iter.geometry_rect() != content_rect)
437 return 0; 445 return 0;
438 return iter->GetResourceId(); 446 return iter->GetResourceId();
439 } 447 }
(...skipping 27 matching lines...) Expand all
467 475
468 Region missing_region = rect; 476 Region missing_region = rect;
469 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 477 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
470 PictureLayerTiling* tiling = tilings_->tiling_at(i); 478 PictureLayerTiling* tiling = tilings_->tiling_at(i);
471 479
472 if (tiling->contents_scale() < min_acceptable_scale) 480 if (tiling->contents_scale() < min_acceptable_scale)
473 continue; 481 continue;
474 482
475 for (PictureLayerTiling::Iterator iter(tiling, 483 for (PictureLayerTiling::Iterator iter(tiling,
476 contentsScaleX(), 484 contentsScaleX(),
477 rect); 485 rect,
486 PictureLayerTiling::LayerDeviceAlignm entUnknown);
478 iter; 487 iter;
479 ++iter) { 488 ++iter) {
480 // A null tile (i.e. no recording) is considered "ready". 489 // A null tile (i.e. no recording) is considered "ready".
481 if (!*iter || iter->GetResourceId()) 490 if (!*iter || iter->GetResourceId())
482 missing_region.Subtract(iter.geometry_rect()); 491 missing_region.Subtract(iter.geometry_rect());
483 } 492 }
484 } 493 }
485 494
486 return missing_region.IsEmpty(); 495 return missing_region.IsEmpty();
487 } 496 }
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 return twin; 722 return twin;
714 } 723 }
715 724
716 void PictureLayerImpl::getDebugBorderProperties( 725 void PictureLayerImpl::getDebugBorderProperties(
717 SkColor* color, float* width) const { 726 SkColor* color, float* width) const {
718 *color = DebugColors::TiledContentLayerBorderColor(); 727 *color = DebugColors::TiledContentLayerBorderColor();
719 *width = DebugColors::TiledContentLayerBorderWidth(layerTreeImpl()); 728 *width = DebugColors::TiledContentLayerBorderWidth(layerTreeImpl());
720 } 729 }
721 730
722 } // namespace cc 731 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/picture_layer_impl_unittest.cc » ('j') | cc/picture_layer_tiling.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698