From 88552a9c89b99b93211ac5e679a0c13420e294db Mon Sep 17 00:00:00 2001 From: "garykac@google.com" Date: Fri, 6 Aug 2010 22:50:00 +0000 Subject: 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 --- remoting/host/capturer.cc | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) (limited to 'remoting/host/capturer.cc') 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 + 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 data, -- cgit v1.1