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

Unified Diff: cc/test/fake_picture_pile_impl.cc

Issue 723343002: Update from https://crrev.com/304121 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/test/fake_picture_pile_impl.h ('k') | cc/test/fake_tile_manager_client.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/test/fake_picture_pile_impl.cc
diff --git a/cc/test/fake_picture_pile_impl.cc b/cc/test/fake_picture_pile_impl.cc
index 32a6589ee96761fa385b2b4dd13b77c68c6bc89c..3d31c12a0f65864e7f748d0cac6bb971de05051a 100644
--- a/cc/test/fake_picture_pile_impl.cc
+++ b/cc/test/fake_picture_pile_impl.cc
@@ -4,9 +4,12 @@
#include "cc/test/fake_picture_pile_impl.h"
+#include <algorithm>
#include <limits>
#include <utility>
+#include "cc/resources/picture_pile.h"
+#include "cc/test/fake_picture_pile.h"
#include "cc/test/impl_side_painting_settings.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -14,62 +17,71 @@ namespace cc {
FakePicturePileImpl::FakePicturePileImpl() {}
+FakePicturePileImpl::FakePicturePileImpl(const PicturePile* other)
+ : PicturePileImpl(other),
+ tile_grid_info_(other->GetTileGridInfoForTesting()) {
+}
+
FakePicturePileImpl::~FakePicturePileImpl() {}
scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateFilledPile(
const gfx::Size& tile_size,
const gfx::Size& layer_bounds) {
- scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
- pile->tiling().SetTilingSize(layer_bounds);
- pile->tiling().SetMaxTextureSize(tile_size);
- pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_grid_size);
- pile->recorded_viewport_ = gfx::Rect(layer_bounds);
- pile->has_any_recordings_ = true;
- for (int x = 0; x < pile->tiling().num_tiles_x(); ++x) {
- for (int y = 0; y < pile->tiling().num_tiles_y(); ++y)
- pile->AddRecordingAt(x, y);
+ FakePicturePile pile;
+ pile.tiling().SetTilingSize(layer_bounds);
+ pile.tiling().SetMaxTextureSize(tile_size);
+ pile.SetTileGridSize(ImplSidePaintingSettings().default_tile_grid_size);
+ pile.SetRecordedViewport(gfx::Rect(layer_bounds));
+ pile.SetHasAnyRecordings(true);
+
+ auto pile_impl = make_scoped_refptr(new FakePicturePileImpl(&pile));
+ for (int x = 0; x < pile_impl->tiling().num_tiles_x(); ++x) {
+ for (int y = 0; y < pile_impl->tiling().num_tiles_y(); ++y)
+ pile_impl->AddRecordingAt(x, y);
}
- return pile;
+ return pile_impl;
}
scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateEmptyPile(
const gfx::Size& tile_size,
const gfx::Size& layer_bounds) {
- scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
- pile->tiling().SetTilingSize(layer_bounds);
- pile->tiling().SetMaxTextureSize(tile_size);
- pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_grid_size);
- pile->recorded_viewport_ = gfx::Rect();
- pile->has_any_recordings_ = false;
- return pile;
+ FakePicturePile pile;
+ pile.tiling().SetTilingSize(layer_bounds);
+ pile.tiling().SetMaxTextureSize(tile_size);
+ pile.SetTileGridSize(ImplSidePaintingSettings().default_tile_grid_size);
+ pile.SetRecordedViewport(gfx::Rect());
+ pile.SetHasAnyRecordings(false);
+ return make_scoped_refptr(new FakePicturePileImpl(&pile));
}
scoped_refptr<FakePicturePileImpl>
FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings(
const gfx::Size& tile_size,
const gfx::Size& layer_bounds) {
- scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
- pile->tiling().SetTilingSize(layer_bounds);
- pile->tiling().SetMaxTextureSize(tile_size);
- pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_grid_size);
+ FakePicturePile pile;
+ pile.tiling().SetTilingSize(layer_bounds);
+ pile.tiling().SetMaxTextureSize(tile_size);
+ pile.SetTileGridSize(ImplSidePaintingSettings().default_tile_grid_size);
// This simulates a false positive for this flag.
- pile->recorded_viewport_ = gfx::Rect();
- pile->has_any_recordings_ = true;
- return pile;
+ pile.SetRecordedViewport(gfx::Rect());
+ pile.SetHasAnyRecordings(true);
+ return make_scoped_refptr(new FakePicturePileImpl(&pile));
}
scoped_refptr<FakePicturePileImpl>
FakePicturePileImpl::CreateInfiniteFilledPile() {
- scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
+ FakePicturePile pile;
gfx::Size size(std::numeric_limits<int>::max(),
std::numeric_limits<int>::max());
- pile->tiling().SetTilingSize(size);
- pile->tiling().SetMaxTextureSize(size);
- pile->SetTileGridSize(size);
- pile->recorded_viewport_ = gfx::Rect(size);
- pile->has_any_recordings_ = true;
- pile->AddRecordingAt(0, 0);
- return pile;
+ pile.tiling().SetTilingSize(size);
+ pile.tiling().SetMaxTextureSize(size);
+ pile.SetTileGridSize(size);
+ pile.SetRecordedViewport(gfx::Rect(size));
+ pile.SetHasAnyRecordings(true);
+
+ auto pile_impl = make_scoped_refptr(new FakePicturePileImpl(&pile));
+ pile_impl->AddRecordingAt(0, 0);
+ return pile_impl;
}
void FakePicturePileImpl::AddRecordingAt(int x, int y) {
@@ -103,6 +115,13 @@ void FakePicturePileImpl::RemoveRecordingAt(int x, int y) {
EXPECT_FALSE(HasRecordingAt(x, y));
}
+bool FakePicturePileImpl::HasRecordingAt(int x, int y) const {
+ PictureMap::const_iterator found = picture_map_.find(PictureMapKey(x, y));
+ if (found == picture_map_.end())
+ return false;
+ return !!found->second.GetPicture();
+}
+
void FakePicturePileImpl::RerecordPile() {
for (int y = 0; y < num_tiles_y(); ++y) {
for (int x = 0; x < num_tiles_x(); ++x) {
@@ -112,4 +131,37 @@ void FakePicturePileImpl::RerecordPile() {
}
}
+void FakePicturePileImpl::SetMinContentsScale(float min_contents_scale) {
+ if (min_contents_scale_ == min_contents_scale)
+ return;
+
+ // Picture contents are played back scaled. When the final contents scale is
+ // less than 1 (i.e. low res), then multiple recorded pixels will be used
+ // to raster one final pixel. To avoid splitting a final pixel across
+ // pictures (which would result in incorrect rasterization due to blending), a
+ // buffer margin is added so that any picture can be snapped to integral
+ // final pixels.
+ //
+ // For example, if a 1/4 contents scale is used, then that would be 3 buffer
+ // pixels, since that's the minimum number of pixels to add so that resulting
+ // content can be snapped to a four pixel aligned grid.
+ int buffer_pixels = static_cast<int>(ceil(1 / min_contents_scale) - 1);
+ buffer_pixels = std::max(0, buffer_pixels);
+ SetBufferPixels(buffer_pixels);
+ min_contents_scale_ = min_contents_scale;
+}
+
+void FakePicturePileImpl::SetBufferPixels(int new_buffer_pixels) {
+ if (new_buffer_pixels == buffer_pixels())
+ return;
+
+ Clear();
+ tiling_.SetBorderTexels(new_buffer_pixels);
+}
+
+void FakePicturePileImpl::Clear() {
+ picture_map_.clear();
+ recorded_viewport_ = gfx::Rect();
+}
+
} // namespace cc
« no previous file with comments | « cc/test/fake_picture_pile_impl.h ('k') | cc/test/fake_tile_manager_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698