summaryrefslogtreecommitdiffstats
path: root/remoting/host/capturer.cc
diff options
context:
space:
mode:
authorgarykac@google.com <garykac@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-06 22:50:00 +0000
committergarykac@google.com <garykac@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-06 22:50:00 +0000
commit88552a9c89b99b93211ac5e679a0c13420e294db (patch)
treebe326ad62f7c9c9b3dfdea155a306005af00356a /remoting/host/capturer.cc
parentce3b22e8da4fa9ca838423bacd54e45c3030d518 (diff)
downloadchromium_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.cc43
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,