| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "media/video/capture/screen/screen_capturer_helper.h" | 5 #include "media/video/capture/screen/screen_capturer_helper.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 using webrtc::DesktopRect; |
| 11 using webrtc::DesktopRegion; |
| 12 using webrtc::DesktopSize; |
| 13 |
| 10 namespace media { | 14 namespace media { |
| 11 | 15 |
| 12 class ScreenCapturerHelperTest : public testing::Test { | 16 class ScreenCapturerHelperTest : public testing::Test { |
| 13 protected: | 17 protected: |
| 14 ScreenCapturerHelper capturer_helper_; | 18 ScreenCapturerHelper capturer_helper_; |
| 15 }; | 19 }; |
| 16 | 20 |
| 21 bool Equals(const DesktopRegion& region1, const DesktopRegion& region2) { |
| 22 DesktopRegion::Iterator iter1(region1); |
| 23 DesktopRegion::Iterator iter2(region2); |
| 24 while (!iter1.IsAtEnd() && !iter1.IsAtEnd()) { |
| 25 if (!iter1.rect().equals(iter2.rect())) { |
| 26 return false; |
| 27 } |
| 28 iter1.Advance(); |
| 29 iter2.Advance(); |
| 30 } |
| 31 return iter1.IsAtEnd() && iter2.IsAtEnd(); |
| 32 } |
| 33 |
| 17 bool Equals(const SkRegion& region1, const SkRegion& region2) { | 34 bool Equals(const SkRegion& region1, const SkRegion& region2) { |
| 18 SkRegion::Iterator iter1(region1); | 35 SkRegion::Iterator iter1(region1); |
| 19 SkRegion::Iterator iter2(region2); | 36 SkRegion::Iterator iter2(region2); |
| 20 while (!iter1.done()) { | 37 while (!iter1.done() && !iter2.done()) { |
| 21 SkIRect rect1 = iter1.rect(); | 38 if (iter1.rect() != iter2.rect()) { |
| 22 iter1.next(); | |
| 23 if (iter2.done()) { | |
| 24 return false; | 39 return false; |
| 25 } | 40 } |
| 26 SkIRect rect2 = iter2.rect(); | 41 iter1.next(); |
| 27 iter2.next(); | 42 iter2.next(); |
| 28 if (rect1 != rect2) { | |
| 29 return false; | |
| 30 } | |
| 31 } | 43 } |
| 32 if (!iter2.done()) { | 44 return iter1.done() && iter2.done(); |
| 33 return false; | 45 } |
| 34 } | 46 |
| 35 return true; | 47 DesktopRegion RectToRegion(const DesktopRect& rect) { |
| 48 webrtc::DesktopRegion result; |
| 49 result.SetRect(rect); |
| 50 return result; |
| 36 } | 51 } |
| 37 | 52 |
| 38 TEST_F(ScreenCapturerHelperTest, ClearInvalidRegion) { | 53 TEST_F(ScreenCapturerHelperTest, ClearInvalidRegion) { |
| 39 SkRegion region; | 54 DesktopRegion region; |
| 40 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(1, 2, 3, 4))); | 55 region.SetRect(DesktopRect::MakeXYWH(1, 2, 3, 4)); |
| 56 capturer_helper_.InvalidateRegion(region); |
| 41 capturer_helper_.ClearInvalidRegion(); | 57 capturer_helper_.ClearInvalidRegion(); |
| 42 capturer_helper_.SwapInvalidRegion(®ion); | 58 capturer_helper_.TakeInvalidRegion(®ion); |
| 43 ASSERT_TRUE(region.isEmpty()); | 59 ASSERT_TRUE(region.is_empty()); |
| 44 } | 60 } |
| 45 | 61 |
| 46 TEST_F(ScreenCapturerHelperTest, InvalidateRegion) { | 62 TEST_F(ScreenCapturerHelperTest, InvalidateRegion) { |
| 47 SkRegion region; | 63 DesktopRegion region; |
| 48 capturer_helper_.SwapInvalidRegion(®ion); | 64 capturer_helper_.TakeInvalidRegion(®ion); |
| 49 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeEmpty()), region)); | 65 ASSERT_TRUE(region.is_empty()); |
| 50 | 66 |
| 51 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(1, 2, 3, 4))); | 67 region.SetRect(DesktopRect::MakeXYWH(1, 2, 3, 4)); |
| 52 region.setEmpty(); | 68 capturer_helper_.InvalidateRegion(region); |
| 53 capturer_helper_.SwapInvalidRegion(®ion); | 69 capturer_helper_.TakeInvalidRegion(®ion); |
| 54 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeXYWH(1, 2, 3, 4)), region)); | 70 ASSERT_TRUE(Equals(RectToRegion(DesktopRect::MakeXYWH(1, 2, 3, 4)), region)); |
| 55 | 71 |
| 56 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(1, 2, 3, 4))); | 72 capturer_helper_.InvalidateRegion( |
| 57 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(4, 2, 3, 4))); | 73 RectToRegion(DesktopRect::MakeXYWH(1, 2, 3, 4))); |
| 58 region.setEmpty(); | 74 capturer_helper_.InvalidateRegion( |
| 59 capturer_helper_.SwapInvalidRegion(®ion); | 75 RectToRegion(DesktopRect::MakeXYWH(4, 2, 3, 4))); |
| 60 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeXYWH(1, 2, 6, 4)), region)); | 76 capturer_helper_.TakeInvalidRegion(®ion); |
| 77 ASSERT_TRUE(Equals(RectToRegion(DesktopRect::MakeXYWH(1, 2, 6, 4)), region)); |
| 61 } | 78 } |
| 62 | 79 |
| 63 TEST_F(ScreenCapturerHelperTest, InvalidateScreen) { | 80 TEST_F(ScreenCapturerHelperTest, InvalidateScreen) { |
| 64 SkRegion region; | 81 DesktopRegion region; |
| 65 capturer_helper_.InvalidateScreen(SkISize::Make(12, 34)); | 82 capturer_helper_.InvalidateScreen(DesktopSize(12, 34)); |
| 66 capturer_helper_.SwapInvalidRegion(®ion); | 83 capturer_helper_.TakeInvalidRegion(®ion); |
| 67 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeWH(12, 34)), region)); | 84 ASSERT_TRUE(Equals(RectToRegion(DesktopRect::MakeWH(12, 34)), region)); |
| 68 } | |
| 69 | |
| 70 TEST_F(ScreenCapturerHelperTest, InvalidateFullScreen) { | |
| 71 SkRegion region; | |
| 72 capturer_helper_.set_size_most_recent(SkISize::Make(12, 34)); | |
| 73 capturer_helper_.InvalidateFullScreen(); | |
| 74 capturer_helper_.SwapInvalidRegion(®ion); | |
| 75 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeWH(12, 34)), region)); | |
| 76 } | 85 } |
| 77 | 86 |
| 78 TEST_F(ScreenCapturerHelperTest, SizeMostRecent) { | 87 TEST_F(ScreenCapturerHelperTest, SizeMostRecent) { |
| 79 ASSERT_EQ(SkISize::Make(0, 0), capturer_helper_.size_most_recent()); | 88 ASSERT_TRUE(capturer_helper_.size_most_recent().is_empty()); |
| 80 capturer_helper_.set_size_most_recent(SkISize::Make(12, 34)); | 89 capturer_helper_.set_size_most_recent(DesktopSize(12, 34)); |
| 81 ASSERT_EQ(SkISize::Make(12, 34), capturer_helper_.size_most_recent()); | 90 ASSERT_TRUE( |
| 91 DesktopSize(12, 34).equals(capturer_helper_.size_most_recent())); |
| 82 } | 92 } |
| 83 | 93 |
| 84 TEST_F(ScreenCapturerHelperTest, SetLogGridSize) { | 94 TEST_F(ScreenCapturerHelperTest, SetLogGridSize) { |
| 85 capturer_helper_.set_size_most_recent(SkISize::Make(10, 10)); | 95 capturer_helper_.set_size_most_recent(DesktopSize(10, 10)); |
| 86 | 96 |
| 87 SkRegion region; | 97 DesktopRegion region; |
| 88 capturer_helper_.SwapInvalidRegion(®ion); | 98 capturer_helper_.TakeInvalidRegion(®ion); |
| 89 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeEmpty()), region)); | 99 ASSERT_TRUE(Equals(RectToRegion(DesktopRect()), region)); |
| 90 | 100 |
| 91 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1))); | 101 capturer_helper_.InvalidateRegion( |
| 92 region.setEmpty(); | 102 RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1))); |
| 93 capturer_helper_.SwapInvalidRegion(®ion); | 103 capturer_helper_.TakeInvalidRegion(®ion); |
| 94 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1)), region)); | 104 ASSERT_TRUE(Equals(RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1)), region)); |
| 95 | 105 |
| 96 capturer_helper_.SetLogGridSize(-1); | 106 capturer_helper_.SetLogGridSize(-1); |
| 97 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1))); | 107 capturer_helper_.InvalidateRegion( |
| 98 region.setEmpty(); | 108 RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1))); |
| 99 capturer_helper_.SwapInvalidRegion(®ion); | 109 capturer_helper_.TakeInvalidRegion(®ion); |
| 100 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1)), region)); | 110 ASSERT_TRUE(Equals(RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1)), region)); |
| 101 | 111 |
| 102 capturer_helper_.SetLogGridSize(0); | 112 capturer_helper_.SetLogGridSize(0); |
| 103 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1))); | 113 capturer_helper_.InvalidateRegion( |
| 104 region.setEmpty(); | 114 RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1))); |
| 105 capturer_helper_.SwapInvalidRegion(®ion); | 115 capturer_helper_.TakeInvalidRegion(®ion); |
| 106 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1)), region)); | 116 ASSERT_TRUE(Equals(RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1)), region)); |
| 107 | 117 |
| 108 capturer_helper_.SetLogGridSize(1); | 118 capturer_helper_.SetLogGridSize(1); |
| 109 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1))); | 119 capturer_helper_.InvalidateRegion( |
| 110 region.setEmpty(); | 120 RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1))); |
| 111 capturer_helper_.SwapInvalidRegion(®ion); | 121 capturer_helper_.TakeInvalidRegion(®ion); |
| 112 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeXYWH(6, 6, 2, 2)), region)); | 122 ASSERT_TRUE(Equals(RectToRegion(DesktopRect::MakeXYWH(6, 6, 2, 2)), region)); |
| 113 | 123 |
| 114 capturer_helper_.SetLogGridSize(2); | 124 capturer_helper_.SetLogGridSize(2); |
| 115 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1))); | 125 capturer_helper_.InvalidateRegion( |
| 116 region.setEmpty(); | 126 RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1))); |
| 117 capturer_helper_.SwapInvalidRegion(®ion); | 127 capturer_helper_.TakeInvalidRegion(®ion); |
| 118 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeXYWH(4, 4, 4, 4)), region)); | 128 ASSERT_TRUE(Equals(RectToRegion(DesktopRect::MakeXYWH(4, 4, 4, 4)), region)); |
| 119 | 129 |
| 120 capturer_helper_.SetLogGridSize(0); | 130 capturer_helper_.SetLogGridSize(0); |
| 121 capturer_helper_.InvalidateRegion(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1))); | 131 capturer_helper_.InvalidateRegion( |
| 122 region.setEmpty(); | 132 RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1))); |
| 123 capturer_helper_.SwapInvalidRegion(®ion); | 133 capturer_helper_.TakeInvalidRegion(®ion); |
| 124 ASSERT_TRUE(Equals(SkRegion(SkIRect::MakeXYWH(7, 7, 1, 1)), region)); | 134 ASSERT_TRUE(Equals(RectToRegion(DesktopRect::MakeXYWH(7, 7, 1, 1)), region)); |
| 125 } | 135 } |
| 126 | 136 |
| 127 void TestExpandRegionToGrid(const SkRegion& region, int log_grid_size, | 137 void TestExpandRegionToGrid(const SkRegion& region, int log_grid_size, |
| 128 const SkRegion& expandedRegionExpected) { | 138 const SkRegion& expandedRegionExpected) { |
| 129 scoped_ptr<SkRegion> expandedRegion1( | 139 scoped_ptr<SkRegion> expandedRegion1( |
| 130 ScreenCapturerHelper::ExpandToGrid(region, log_grid_size)); | 140 ScreenCapturerHelper::ExpandToGrid(region, log_grid_size)); |
| 131 ASSERT_TRUE(Equals(expandedRegionExpected, *expandedRegion1)); | 141 ASSERT_TRUE(Equals(expandedRegionExpected, *expandedRegion1)); |
| 132 scoped_ptr<SkRegion> expandedRegion2( | 142 scoped_ptr<SkRegion> expandedRegion2( |
| 133 ScreenCapturerHelper::ExpandToGrid(*expandedRegion1, log_grid_size)); | 143 ScreenCapturerHelper::ExpandToGrid(*expandedRegion1, log_grid_size)); |
| 134 ASSERT_TRUE(Equals(*expandedRegion1, *expandedRegion2)); | 144 ASSERT_TRUE(Equals(*expandedRegion1, *expandedRegion2)); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 x - GRID_SIZE, y - GRID_SIZE, x + GRID_SIZE, y + GRID_SIZE)); | 216 x - GRID_SIZE, y - GRID_SIZE, x + GRID_SIZE, y + GRID_SIZE)); |
| 207 expandedRegionExpected.op( | 217 expandedRegionExpected.op( |
| 208 SkIRect::MakeLTRB(x + 0, y - GRID_SIZE, x + GRID_SIZE, y + 0), | 218 SkIRect::MakeLTRB(x + 0, y - GRID_SIZE, x + GRID_SIZE, y + 0), |
| 209 SkRegion::kDifference_Op); | 219 SkRegion::kDifference_Op); |
| 210 TestExpandRegionToGrid(region, LOG_GRID_SIZE, expandedRegionExpected); | 220 TestExpandRegionToGrid(region, LOG_GRID_SIZE, expandedRegionExpected); |
| 211 } | 221 } |
| 212 } | 222 } |
| 213 } | 223 } |
| 214 | 224 |
| 215 } // namespace media | 225 } // namespace media |
| OLD | NEW |