diff options
author | garykac@google.com <garykac@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-06 22:50:00 +0000 |
---|---|---|
committer | garykac@google.com <garykac@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-06 22:50:00 +0000 |
commit | 88552a9c89b99b93211ac5e679a0c13420e294db (patch) | |
tree | be326ad62f7c9c9b3dfdea155a306005af00356a /remoting/host/capturer.cc | |
parent | ce3b22e8da4fa9ca838423bacd54e45c3030d518 (diff) | |
download | chromium_src-88552a9c89b99b93211ac5e679a0c13420e294db.zip chromium_src-88552a9c89b99b93211ac5e679a0c13420e294db.tar.gz chromium_src-88552a9c89b99b93211ac5e679a0c13420e294db.tar.bz2 |
Initial pass at integrating Differ into the chromoting host code.
BUG=none
TEST=run Win host; x11 client
Review URL: http://codereview.chromium.org/3013015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55297 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/host/capturer.cc')
-rw-r--r-- | remoting/host/capturer.cc | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/remoting/host/capturer.cc b/remoting/host/capturer.cc index 917a960..b61132b 100644 --- a/remoting/host/capturer.cc +++ b/remoting/host/capturer.cc @@ -4,6 +4,8 @@ #include "remoting/host/capturer.h" +#include <algorithm> + namespace remoting { Capturer::Capturer() @@ -17,30 +19,41 @@ Capturer::Capturer() Capturer::~Capturer() { } -void Capturer::CaptureInvalidRects(CaptureCompletedCallback* callback) { - // Braced to scope the lock. - RectVector local_rects; +void Capturer::ClearInvalidRects() { + AutoLock auto_inval_rects_lock(inval_rects_lock_); + inval_rects_.clear(); +} + +void Capturer::InvalidateRects(const InvalidRects& inval_rects) { + InvalidRects temp_rects; + std::set_union(inval_rects_.begin(), inval_rects_.end(), + inval_rects.begin(), inval_rects.end(), + std::inserter(temp_rects, temp_rects.begin())); { AutoLock auto_inval_rects_lock(inval_rects_lock_); - local_rects = inval_rects_; - inval_rects_.clear(); + inval_rects_.swap(temp_rects); } - - CaptureRects(local_rects, callback); } -void Capturer::InvalidateRects(const RectVector& inval_rects) { +void Capturer::InvalidateFullScreen() { AutoLock auto_inval_rects_lock(inval_rects_lock_); - inval_rects_.insert(inval_rects_.end(), - inval_rects.begin(), - inval_rects.end()); + inval_rects_.clear(); + inval_rects_.insert(gfx::Rect(0, 0, width_, height_)); } -void Capturer::InvalidateFullScreen() { - RectVector rects; - rects.push_back(gfx::Rect(0, 0, width_, height_)); +void Capturer::CaptureInvalidRects(CaptureCompletedCallback* callback) { + // Calculate which rects need to be captured. + CalculateInvalidRects(); + + // Braced to scope the lock. + InvalidRects local_rects; + { + AutoLock auto_inval_rects_lock(inval_rects_lock_); + local_rects = inval_rects_; + inval_rects_.clear(); + } - InvalidateRects(rects); + CaptureRects(local_rects, callback); } void Capturer::FinishCapture(scoped_refptr<CaptureData> data, |