Chromium Code Reviews| Index: media/video/capture/screen/screen_capturer_helper.cc |
| diff --git a/media/video/capture/screen/screen_capturer_helper.cc b/media/video/capture/screen/screen_capturer_helper.cc |
| index 2f4534260c9cb0190481a9a3115988b4f6dce087..3753693afc5aac6fbc89737f6b3a8489b031197a 100644 |
| --- a/media/video/capture/screen/screen_capturer_helper.cc |
| +++ b/media/video/capture/screen/screen_capturer_helper.cc |
| @@ -12,7 +12,6 @@ |
| namespace media { |
| ScreenCapturerHelper::ScreenCapturerHelper() : |
| - size_most_recent_(SkISize::Make(0, 0)), |
| log_grid_size_(0) { |
| } |
| @@ -25,33 +24,55 @@ void ScreenCapturerHelper::ClearInvalidRegion() { |
| } |
| void ScreenCapturerHelper::InvalidateRegion( |
| - const SkRegion& invalid_region) { |
| + const webrtc::DesktopRegion& invalid_region) { |
| base::AutoLock auto_invalid_region_lock(invalid_region_lock_); |
| - invalid_region_.op(invalid_region, SkRegion::kUnion_Op); |
| + for (webrtc::DesktopRegion::Iterator it(invalid_region); |
| + !it.IsAtEnd(); it.Advance()) { |
| + invalid_region_.op(SkIRect::MakeLTRB(it.rect().left(), it.rect().top(), |
|
alexeypa (please no reviews)
2013/04/26 21:33:58
nit: Add a TODO to replace SkRegion with webrtc::D
Sergey Ulanov
2013/05/07 22:25:50
I don't think we need TODO for it - it's something
|
| + it.rect().top(), it.rect().bottom()), |
| + SkRegion::kUnion_Op); |
| + } |
| } |
| -void ScreenCapturerHelper::InvalidateScreen(const SkISize& size) { |
| +void ScreenCapturerHelper::InvalidateScreen(const webrtc::DesktopSize& size) { |
| base::AutoLock auto_invalid_region_lock(invalid_region_lock_); |
| invalid_region_.op(SkIRect::MakeWH(size.width(), size.height()), |
| SkRegion::kUnion_Op); |
| } |
| void ScreenCapturerHelper::InvalidateFullScreen() { |
| - if (!size_most_recent_.isZero()) |
| + if (!size_most_recent_.is_empty()) |
| InvalidateScreen(size_most_recent_); |
| } |
| -void ScreenCapturerHelper::SwapInvalidRegion(SkRegion* invalid_region) { |
| +void ScreenCapturerHelper::SwapInvalidRegion( |
|
Wez
2013/04/26 18:48:14
nit: IIRC this is a Swap simply to avoid unnecessa
Sergey Ulanov
2013/05/07 22:25:50
The X11 capturer seems to rely on Swap() - it call
Sergey Ulanov
2013/05/08 01:26:49
Actually it looks like Swap wasn't necessary for X
|
| + webrtc::DesktopRegion* invalid_region) { |
| + SkRegion sk_invalid_region; |
| + for (webrtc::DesktopRegion::Iterator it(*invalid_region); |
| + !it.IsAtEnd(); it.Advance()) { |
| + sk_invalid_region.op(SkIRect::MakeLTRB(it.rect().left(), it.rect().top(), |
| + it.rect().top(), it.rect().bottom()), |
| + SkRegion::kUnion_Op); |
| + } |
| + |
| { |
| base::AutoLock auto_invalid_region_lock(invalid_region_lock_); |
| - invalid_region->swap(invalid_region_); |
| + sk_invalid_region.swap(invalid_region_); |
| } |
| + |
| if (log_grid_size_ > 0) { |
| scoped_ptr<SkRegion> expanded_region( |
| - ExpandToGrid(*invalid_region, log_grid_size_)); |
| - invalid_region->swap(*expanded_region); |
| - invalid_region->op(SkRegion(SkIRect::MakeSize(size_most_recent_)), |
| - SkRegion::kIntersect_Op); |
| + ExpandToGrid(sk_invalid_region, log_grid_size_)); |
| + sk_invalid_region.swap(*expanded_region); |
| + sk_invalid_region.op(SkIRect::MakeWH(size_most_recent_.width(), |
| + size_most_recent_.height()), |
| + SkRegion::kIntersect_Op); |
| + } |
| + invalid_region->Clear(); |
| + for (SkRegion::Iterator it(sk_invalid_region); !it.done(); it.next()) { |
| + invalid_region->AddRect(webrtc::DesktopRect::MakeLTRB( |
| + it.rect().left(), it.rect().top(), |
| + it.rect().right(), it.rect().bottom())); |
| } |
| } |
| @@ -59,11 +80,12 @@ void ScreenCapturerHelper::SetLogGridSize(int log_grid_size) { |
| log_grid_size_ = log_grid_size; |
| } |
| -const SkISize& ScreenCapturerHelper::size_most_recent() const { |
| +const webrtc::DesktopSize& ScreenCapturerHelper::size_most_recent() const { |
| return size_most_recent_; |
| } |
| -void ScreenCapturerHelper::set_size_most_recent(const SkISize& size) { |
| +void ScreenCapturerHelper::set_size_most_recent( |
| + const webrtc::DesktopSize& size) { |
| size_most_recent_ = size; |
| } |
| @@ -85,34 +107,19 @@ scoped_ptr<SkRegion> ScreenCapturerHelper::ExpandToGrid( |
| DCHECK(log_grid_size >= 1); |
| int grid_size = 1 << log_grid_size; |
| int grid_size_mask = ~(grid_size - 1); |
| - // Count the rects in the region. |
| - int rectNum = 0; |
| - SkRegion::Iterator iter(region); |
| - while (!iter.done()) { |
| - iter.next(); |
| - ++rectNum; |
| - } |
| + |
| // Expand each rect. |
| - scoped_ptr<SkIRect[]> rects(new SkIRect[rectNum]); |
| - iter.rewind(); |
| - int rectI = 0; |
| - while (!iter.done()) { |
| + scoped_ptr<SkRegion> expanded_region(new SkRegion()); |
| + for (SkRegion::Iterator iter(region); !iter.done(); iter.next()) { |
| SkIRect rect = iter.rect(); |
| - iter.next(); |
| - int left = std::min(rect.left(), rect.right()); |
| - int right = std::max(rect.left(), rect.right()); |
| - int top = std::min(rect.top(), rect.bottom()); |
| - int bottom = std::max(rect.top(), rect.bottom()); |
| - left = DownToMultiple(left, grid_size_mask); |
| - right = UpToMultiple(right, grid_size, grid_size_mask); |
| - top = DownToMultiple(top, grid_size_mask); |
| - bottom = UpToMultiple(bottom, grid_size, grid_size_mask); |
| - rects[rectI++] = SkIRect::MakeLTRB(left, top, right, bottom); |
| + int left = DownToMultiple(rect.left(), grid_size_mask); |
| + int right = UpToMultiple(rect.right(), grid_size, grid_size_mask); |
| + int top = DownToMultiple(rect.top(), grid_size_mask); |
| + int bottom = UpToMultiple(rect.bottom(), grid_size, grid_size_mask); |
| + expanded_region->op(SkIRect::MakeLTRB(left, right, top, bottom), |
|
alexeypa (please no reviews)
2013/04/26 21:33:58
nit: SkRegion::setRects() is potentially more opti
Sergey Ulanov
2013/05/07 22:25:50
It doesn't at the moment and I suspect the differe
|
| + SkRegion::kUnion_Op); |
| } |
| - // Make the union of the expanded rects. |
| - scoped_ptr<SkRegion> regionNew(new SkRegion()); |
| - regionNew->setRects(rects.get(), rectNum); |
| - return regionNew.Pass(); |
| + return expanded_region.Pass(); |
| } |
| } // namespace media |