fake_picture_pile_impl.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1// 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
7#include <utility>
8
9#include "cc/test/fake_rendering_stats_instrumentation.h"
10#include "cc/test/impl_side_painting_settings.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13namespace cc {
14
15FakePicturePileImpl::FakePicturePileImpl() {}
16
17FakePicturePileImpl::~FakePicturePileImpl() {}
18
19scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateFilledPile(
20    gfx::Size tile_size,
21    gfx::Size layer_bounds) {
22  scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
23  pile->tiling().SetTotalSize(layer_bounds);
24  pile->tiling().SetMaxTextureSize(tile_size);
25  pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
26  for (int x = 0; x < pile->tiling().num_tiles_x(); ++x) {
27    for (int y = 0; y < pile->tiling().num_tiles_y(); ++y)
28      pile->AddRecordingAt(x, y);
29  }
30  pile->UpdateRecordedRegion();
31  return pile;
32}
33
34scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateEmptyPile(
35    gfx::Size tile_size,
36    gfx::Size layer_bounds) {
37  scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
38  pile->tiling().SetTotalSize(layer_bounds);
39  pile->tiling().SetMaxTextureSize(tile_size);
40  pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
41  pile->UpdateRecordedRegion();
42  return pile;
43}
44
45void FakePicturePileImpl::AddRecordingAt(int x, int y) {
46  EXPECT_GE(x, 0);
47  EXPECT_GE(y, 0);
48  EXPECT_LT(x, tiling_.num_tiles_x());
49  EXPECT_LT(y, tiling_.num_tiles_y());
50
51  if (HasRecordingAt(x, y))
52    return;
53  gfx::Rect bounds(tiling().TileBounds(x, y));
54  bounds.Inset(-buffer_pixels(), -buffer_pixels());
55
56  FakeRenderingStatsInstrumentation stats_instrumentation;
57
58  scoped_refptr<Picture> picture(Picture::Create(bounds));
59  picture->Record(&client_, tile_grid_info_, &stats_instrumentation);
60  picture->GatherPixelRefs(tile_grid_info_, &stats_instrumentation);
61  picture_list_map_[std::pair<int, int>(x, y)].push_back(picture);
62  EXPECT_TRUE(HasRecordingAt(x, y));
63
64  UpdateRecordedRegion();
65}
66
67void FakePicturePileImpl::AddPictureToRecording(
68    int x,
69    int y,
70    scoped_refptr<Picture> picture) {
71  picture_list_map_[std::pair<int, int>(x, y)].push_back(picture);
72}
73
74void FakePicturePileImpl::RemoveRecordingAt(int x, int y) {
75  EXPECT_GE(x, 0);
76  EXPECT_GE(y, 0);
77  EXPECT_LT(x, tiling_.num_tiles_x());
78  EXPECT_LT(y, tiling_.num_tiles_y());
79
80  if (!HasRecordingAt(x, y))
81    return;
82  picture_list_map_.erase(std::pair<int, int>(x, y));
83  EXPECT_FALSE(HasRecordingAt(x, y));
84
85  UpdateRecordedRegion();
86}
87
88void FakePicturePileImpl::RerecordPile() {
89  for (int y = 0; y < num_tiles_y(); ++y) {
90    for (int x = 0; x < num_tiles_x(); ++x) {
91      RemoveRecordingAt(x, y);
92      AddRecordingAt(x, y);
93    }
94  }
95}
96
97}  // namespace cc
98