blob: c79d0ae428746ee15048b4586aca79a2abaf2447 [file] [log] [blame]
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +01001// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "cc/test/fake_picture_pile_impl.h"
6
Ben Murdochbb1529c2013-08-08 10:24:53 +01007#include <limits>
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +01008#include <utility>
9
Ben Murdocheb525c52013-07-10 11:40:50 +010010#include "cc/test/fake_rendering_stats_instrumentation.h"
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010011#include "cc/test/impl_side_painting_settings.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace cc {
15
Ben Murdocheb525c52013-07-10 11:40:50 +010016FakePicturePileImpl::FakePicturePileImpl() {}
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010017
18FakePicturePileImpl::~FakePicturePileImpl() {}
19
20scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateFilledPile(
21 gfx::Size tile_size,
22 gfx::Size layer_bounds) {
23 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
24 pile->tiling().SetTotalSize(layer_bounds);
25 pile->tiling().SetMaxTextureSize(tile_size);
26 pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
27 for (int x = 0; x < pile->tiling().num_tiles_x(); ++x) {
28 for (int y = 0; y < pile->tiling().num_tiles_y(); ++y)
29 pile->AddRecordingAt(x, y);
30 }
31 pile->UpdateRecordedRegion();
32 return pile;
33}
34
35scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateEmptyPile(
36 gfx::Size tile_size,
37 gfx::Size layer_bounds) {
38 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
39 pile->tiling().SetTotalSize(layer_bounds);
40 pile->tiling().SetMaxTextureSize(tile_size);
41 pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
42 pile->UpdateRecordedRegion();
43 return pile;
44}
45
Ben Murdochbb1529c2013-08-08 10:24:53 +010046scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreatePile() {
47 scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
48 gfx::Size size(std::numeric_limits<int>::max(),
49 std::numeric_limits<int>::max());
50 pile->Resize(size);
51 pile->recorded_region_ = Region(gfx::Rect(size));
52 return pile;
53}
54
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010055void FakePicturePileImpl::AddRecordingAt(int x, int y) {
56 EXPECT_GE(x, 0);
57 EXPECT_GE(y, 0);
58 EXPECT_LT(x, tiling_.num_tiles_x());
59 EXPECT_LT(y, tiling_.num_tiles_y());
60
61 if (HasRecordingAt(x, y))
62 return;
63 gfx::Rect bounds(tiling().TileBounds(x, y));
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +010064 bounds.Inset(-buffer_pixels(), -buffer_pixels());
65
Ben Murdocheb525c52013-07-10 11:40:50 +010066 FakeRenderingStatsInstrumentation stats_instrumentation;
67
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010068 scoped_refptr<Picture> picture(Picture::Create(bounds));
Ben Murdocheb525c52013-07-10 11:40:50 +010069 picture->Record(&client_, tile_grid_info_, &stats_instrumentation);
70 picture->GatherPixelRefs(tile_grid_info_, &stats_instrumentation);
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010071 picture_list_map_[std::pair<int, int>(x, y)].push_back(picture);
72 EXPECT_TRUE(HasRecordingAt(x, y));
73
74 UpdateRecordedRegion();
75}
76
77void FakePicturePileImpl::AddPictureToRecording(
78 int x,
79 int y,
80 scoped_refptr<Picture> picture) {
81 picture_list_map_[std::pair<int, int>(x, y)].push_back(picture);
82}
83
84void FakePicturePileImpl::RemoveRecordingAt(int x, int y) {
85 EXPECT_GE(x, 0);
86 EXPECT_GE(y, 0);
87 EXPECT_LT(x, tiling_.num_tiles_x());
88 EXPECT_LT(y, tiling_.num_tiles_y());
89
90 if (!HasRecordingAt(x, y))
91 return;
92 picture_list_map_.erase(std::pair<int, int>(x, y));
93 EXPECT_FALSE(HasRecordingAt(x, y));
94
95 UpdateRecordedRegion();
96}
97
98void FakePicturePileImpl::RerecordPile() {
99 for (int y = 0; y < num_tiles_y(); ++y) {
100 for (int x = 0; x < num_tiles_x(); ++x) {
101 RemoveRecordingAt(x, y);
102 AddRecordingAt(x, y);
103 }
104 }
105}
106
107} // namespace cc