Index: remoting/host/differ_unittest.cc |
=================================================================== |
--- remoting/host/differ_unittest.cc (revision 96327) |
+++ remoting/host/differ_unittest.cc (working copy) |
@@ -44,24 +44,6 @@ |
memset(buffer, 0, buffer_size_); |
} |
- // Here in DifferTest so that tests can access private methods of Differ. |
- void MarkDirtyBlocks(const void* prev_buffer, const void* curr_buffer) { |
- differ_->MarkDirtyBlocks(prev_buffer, curr_buffer); |
- } |
- |
- void MergeBlocks(SkRegion* dirty) { |
- differ_->MergeBlocks(dirty); |
- } |
- |
- // Convenience method to count rectangles in a region. |
- int RegionRectCount(const SkRegion& region) { |
- int count = 0; |
- for(SkRegion::Iterator iter(region); !iter.done(); iter.next()) { |
- ++count; |
- } |
- return count; |
- } |
- |
// Convenience wrapper for Differ's DiffBlock that calculates the appropriate |
// offset to the start of the desired block. |
DiffInfo DiffBlock(int block_x, int block_y) { |
@@ -141,37 +123,29 @@ |
} |
} |
- // Verify that |region| contains a rectangle defined by |x|, |y|, |width| and |
- // |height|. |
+ // Verify that the given dirty rect matches the expected |x|, |y|, |width| |
+ // and |height|. |
// |x|, |y|, |width| and |height| are specified in block (not pixel) units. |
- bool CheckDirtyRegionContainsRect(const SkRegion& region, int x, int y, |
- int width, int height) { |
- SkIRect r = SkIRect::MakeXYWH(x * kBlockSize, y * kBlockSize, |
- width * kBlockSize, height * kBlockSize); |
- bool found = false; |
- for (SkRegion::Iterator i(region); !found && !i.done(); i.next()) { |
- found = (i.rect() == r); |
- } |
- return found; |
+ void CheckDirtyRect(const InvalidRects& rects, int x, int y, |
+ int width, int height) { |
+ gfx::Rect r(x * kBlockSize, y * kBlockSize, |
+ width * kBlockSize, height * kBlockSize); |
+ EXPECT_TRUE(rects.find(r) != rects.end()); |
} |
// Mark the range of blocks specified and then verify that they are |
// merged correctly. |
// Only one rectangular region of blocks can be checked with this routine. |
- bool MarkBlocksAndCheckMerge(int x_origin, int y_origin, |
+ void MarkBlocksAndCheckMerge(int x_origin, int y_origin, |
int width, int height) { |
ClearDiffInfo(); |
MarkBlocks(x_origin, y_origin, width, height); |
- SkRegion dirty; |
- MergeBlocks(&dirty); |
+ scoped_ptr<InvalidRects> dirty(new InvalidRects()); |
+ differ_->MergeBlocks(dirty.get()); |
- bool is_good = dirty.isRect(); |
- if (is_good) { |
- is_good = CheckDirtyRegionContainsRect(dirty, x_origin, y_origin, |
- width, height); |
- } |
- return is_good; |
+ ASSERT_EQ(1UL, dirty->size()); |
+ CheckDirtyRect(*dirty.get(), x_origin, y_origin, width, height); |
} |
// The differ class we're testing. |
@@ -222,7 +196,7 @@ |
} |
} |
- MarkDirtyBlocks(prev_.get(), curr_.get()); |
+ differ_->MarkDirtyBlocks(prev_.get(), curr_.get()); |
// Make sure each block is marked as dirty. |
for (int y = 0; y < GetDiffInfoHeight() - 1; y++) { |
@@ -242,7 +216,7 @@ |
WriteBlockPixel(curr_.get(), 2, 1, 10, 10, 0xff00ff); |
WriteBlockPixel(curr_.get(), 0, 2, 10, 10, 0xff00ff); |
- MarkDirtyBlocks(prev_.get(), curr_.get()); |
+ differ_->MarkDirtyBlocks(prev_.get(), curr_.get()); |
// Make sure corresponding blocks are updated. |
EXPECT_EQ(0, GetDiffInfo(0, 0)); |
@@ -310,7 +284,7 @@ |
} |
} |
- MarkDirtyBlocks(prev_.get(), curr_.get()); |
+ differ_->MarkDirtyBlocks(prev_.get(), curr_.get()); |
// Make sure each block is marked as dirty. |
for (int y = 0; y < GetDiffInfoHeight() - 1; y++) { |
@@ -333,7 +307,7 @@ |
WritePixel(curr_.get(), x, height_ - 1, 0xff00ff); |
} |
- MarkDirtyBlocks(prev_.get(), curr_.get()); |
+ differ_->MarkDirtyBlocks(prev_.get(), curr_.get()); |
// Make sure last (partial) block in each row/column is marked as dirty. |
int x_last = GetDiffInfoWidth() - 2; |
@@ -369,10 +343,10 @@ |
// +---+---+---+---+ |
ClearDiffInfo(); |
- SkRegion dirty; |
- MergeBlocks(&dirty); |
+ scoped_ptr<InvalidRects> dirty(new InvalidRects()); |
+ differ_->MergeBlocks(dirty.get()); |
- EXPECT_TRUE(dirty.isEmpty()); |
+ EXPECT_EQ(0UL, dirty->size()); |
} |
TEST_F(DifferTest, MergeBlocks_SingleBlock) { |
@@ -381,8 +355,7 @@ |
// rect with the correct bounds. |
for (int y = 0; y < GetDiffInfoHeight() - 1; y++) { |
for (int x = 0; x < GetDiffInfoWidth() - 1; x++) { |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(x, y, 1, 1)) << "x: " << x |
- << "y: " << y; |
+ MarkBlocksAndCheckMerge(x, y, 1, 1); |
} |
} |
} |
@@ -399,7 +372,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(0, 0, 2, 1)); |
+ MarkBlocksAndCheckMerge(0, 0, 2, 1); |
// +---+---+---+---+ |
// | | | | _ | |
@@ -410,7 +383,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(0, 1, 3, 1)); |
+ MarkBlocksAndCheckMerge(0, 1, 3, 1); |
// +---+---+---+---+ |
// | | | | _ | |
@@ -421,7 +394,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(1, 2, 2, 1)); |
+ MarkBlocksAndCheckMerge(1, 2, 2, 1); |
} |
TEST_F(DifferTest, MergeBlocks_BlockColumn) { |
@@ -436,7 +409,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(0, 0, 1, 2)); |
+ MarkBlocksAndCheckMerge(0, 0, 1, 2); |
// +---+---+---+---+ |
// | | | | _ | |
@@ -447,7 +420,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(1, 1, 1, 2)); |
+ MarkBlocksAndCheckMerge(1, 1, 1, 2); |
// +---+---+---+---+ |
// | | | X | _ | |
@@ -458,7 +431,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(2, 0, 1, 3)); |
+ MarkBlocksAndCheckMerge(2, 0, 1, 3); |
} |
TEST_F(DifferTest, MergeBlocks_BlockRect) { |
@@ -473,7 +446,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(0, 0, 2, 2)); |
+ MarkBlocksAndCheckMerge(0, 0, 2, 2); |
// +---+---+---+---+ |
// | | | | _ | |
@@ -484,7 +457,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(1, 1, 2, 2)); |
+ MarkBlocksAndCheckMerge(1, 1, 2, 2); |
// +---+---+---+---+ |
// | | X | X | _ | |
@@ -495,7 +468,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(1, 0, 2, 3)); |
+ MarkBlocksAndCheckMerge(1, 0, 2, 3); |
// +---+---+---+---+ |
// | | | | _ | |
@@ -506,7 +479,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(0, 1, 3, 2)); |
+ MarkBlocksAndCheckMerge(0, 1, 3, 2); |
// +---+---+---+---+ |
// | X | X | X | _ | |
@@ -517,7 +490,7 @@ |
// +---+---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
- ASSERT_TRUE(MarkBlocksAndCheckMerge(0, 0, 3, 3)); |
+ MarkBlocksAndCheckMerge(0, 0, 3, 3); |
} |
// This tests marked regions that require more than 1 single dirty rect. |
@@ -525,7 +498,7 @@ |
// may need to be updated if we modify how we merge blocks. |
TEST_F(DifferTest, MergeBlocks_MultiRect) { |
InitDiffer(kScreenWidth, kScreenHeight); |
- SkRegion dirty; |
+ scoped_ptr<InvalidRects> dirty; |
// +---+---+---+---+ +---+---+---+ |
// | | X | | _ | | | 0 | | |
@@ -541,40 +514,40 @@ |
MarkBlocks(0, 1, 1, 1); |
MarkBlocks(2, 2, 1, 1); |
- dirty.setEmpty(); |
- MergeBlocks(&dirty); |
+ dirty.reset(new InvalidRects()); |
+ differ_->MergeBlocks(dirty.get()); |
- ASSERT_EQ(3, RegionRectCount(dirty)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 1, 0, 1, 1)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 0, 1, 1, 1)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 2, 2, 1, 1)); |
+ ASSERT_EQ(3UL, dirty->size()); |
+ CheckDirtyRect(*dirty.get(), 1, 0, 1, 1); |
+ CheckDirtyRect(*dirty.get(), 0, 1, 1, 1); |
+ CheckDirtyRect(*dirty.get(), 2, 2, 1, 1); |
// +---+---+---+---+ +---+---+---+ |
// | | | X | _ | | | | 0 | |
+ // +---+---+---+---+ +---+---+ + |
+ // | X | X | X | _ | | 1 1 | 0 | |
+ // +---+---+---+---+ => + + + |
+ // | X | X | X | _ | | 1 1 | 0 | |
// +---+---+---+---+ +---+---+---+ |
- // | X | X | X | _ | | 1 1 1 | |
- // +---+---+---+---+ => + + |
- // | X | X | X | _ | | 1 1 1 | |
- // +---+---+---+---+ +---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
ClearDiffInfo(); |
- MarkBlocks(2, 0, 1, 1); |
- MarkBlocks(0, 1, 3, 2); |
+ MarkBlocks(2, 0, 1, 3); |
+ MarkBlocks(0, 1, 2, 2); |
- dirty.setEmpty(); |
- MergeBlocks(&dirty); |
+ dirty.reset(new InvalidRects()); |
+ differ_->MergeBlocks(dirty.get()); |
- ASSERT_EQ(2, RegionRectCount(dirty)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 2, 0, 1, 1)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 0, 1, 3, 2)); |
+ ASSERT_EQ(2UL, dirty->size()); |
+ CheckDirtyRect(*dirty.get(), 2, 0, 1, 3); |
+ CheckDirtyRect(*dirty.get(), 0, 1, 2, 2); |
// +---+---+---+---+ +---+---+---+ |
// | | | | _ | | | | | |
// +---+---+---+---+ +---+---+---+ |
// | X | | X | _ | | 0 | | 1 | |
// +---+---+---+---+ => + +---+ + |
- // | X | X | X | _ | | 2 | 2 | 2 | |
+ // | X | X | X | _ | | 0 | 2 | 1 | |
// +---+---+---+---+ +---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
@@ -583,20 +556,20 @@ |
MarkBlocks(2, 1, 1, 1); |
MarkBlocks(0, 2, 3, 1); |
- dirty.setEmpty(); |
- MergeBlocks(&dirty); |
+ dirty.reset(new InvalidRects()); |
+ differ_->MergeBlocks(dirty.get()); |
- ASSERT_EQ(3, RegionRectCount(dirty)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 0, 1, 1, 1)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 2, 1, 1, 1)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 0, 2, 3, 1)); |
+ ASSERT_EQ(3UL, dirty->size()); |
+ CheckDirtyRect(*dirty.get(), 0, 1, 1, 2); |
+ CheckDirtyRect(*dirty.get(), 2, 1, 1, 2); |
+ CheckDirtyRect(*dirty.get(), 1, 2, 1, 1); |
// +---+---+---+---+ +---+---+---+ |
// | X | X | X | _ | | 0 0 0 | |
// +---+---+---+---+ +---+---+---+ |
// | X | | X | _ | | 1 | | 2 | |
// +---+---+---+---+ => + +---+ + |
- // | X | X | X | _ | | 3 | 3 | 3 | |
+ // | X | X | X | _ | | 1 | 3 | 2 | |
// +---+---+---+---+ +---+---+---+ |
// | _ | _ | _ | _ | |
// +---+---+---+---+ |
@@ -606,14 +579,14 @@ |
MarkBlocks(2, 1, 1, 1); |
MarkBlocks(0, 2, 3, 1); |
- dirty.setEmpty(); |
- MergeBlocks(&dirty); |
+ dirty.reset(new InvalidRects()); |
+ differ_->MergeBlocks(dirty.get()); |
- ASSERT_EQ(4, RegionRectCount(dirty)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 0, 0, 3, 1)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 0, 1, 1, 1)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 2, 1, 1, 1)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 0, 2, 3, 1)); |
+ ASSERT_EQ(4UL, dirty->size()); |
+ CheckDirtyRect(*dirty.get(), 0, 0, 3, 1); |
+ CheckDirtyRect(*dirty.get(), 0, 1, 1, 2); |
+ CheckDirtyRect(*dirty.get(), 2, 1, 1, 2); |
+ CheckDirtyRect(*dirty.get(), 1, 2, 1, 1); |
// +---+---+---+---+ +---+---+---+ |
// | X | X | | _ | | 0 0 | | |
@@ -628,12 +601,12 @@ |
MarkBlocks(0, 0, 2, 2); |
MarkBlocks(1, 2, 1, 1); |
- dirty.setEmpty(); |
- MergeBlocks(&dirty); |
+ dirty.reset(new InvalidRects()); |
+ differ_->MergeBlocks(dirty.get()); |
- ASSERT_EQ(2, RegionRectCount(dirty)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 0, 0, 2, 2)); |
- ASSERT_TRUE(CheckDirtyRegionContainsRect(dirty, 1, 2, 1, 1)); |
+ ASSERT_EQ(2UL, dirty->size()); |
+ CheckDirtyRect(*dirty.get(), 0, 0, 2, 2); |
+ CheckDirtyRect(*dirty.get(), 1, 2, 1, 1); |
} |
} // namespace remoting |