| Index: remoting/client/rectangle_update_decoder.cc
|
| diff --git a/remoting/client/rectangle_update_decoder.cc b/remoting/client/rectangle_update_decoder.cc
|
| index 3ce8b651bb7a3eafa10d86ac0ab55440041e1e05..673c2a037061f78d23afbd4c916b6c5995e750a7 100644
|
| --- a/remoting/client/rectangle_update_decoder.cc
|
| +++ b/remoting/client/rectangle_update_decoder.cc
|
| @@ -140,7 +140,7 @@ void RectangleUpdateDecoder::SetOutputSize(const SkISize& size) {
|
| // TODO(wez): Refresh the frame only if the ratio has changed.
|
| if (frame_) {
|
| SkIRect frame_rect = SkIRect::MakeWH(frame_->width(), frame_->height());
|
| - refresh_rects_.push_back(frame_rect);
|
| + refresh_region_.op(frame_rect, SkRegion::kUnion_Op);
|
| }
|
|
|
| // TODO(hclam): If the scale ratio has changed we should reallocate a
|
| @@ -166,7 +166,7 @@ void RectangleUpdateDecoder::UpdateClipRect(const SkIRect& new_clip_rect) {
|
| // TODO(wez): Only refresh newly-exposed portions of the frame.
|
| if (frame_) {
|
| SkIRect frame_rect = SkIRect::MakeWH(frame_->width(), frame_->height());
|
| - refresh_rects_.push_back(frame_rect);
|
| + refresh_region_.op(frame_rect, SkRegion::kUnion_Op);
|
| }
|
|
|
| clip_rect_ = new_clip_rect;
|
| @@ -188,9 +188,9 @@ void RectangleUpdateDecoder::RefreshFullFrame() {
|
| if (!frame_ || !decoder_.get())
|
| return;
|
|
|
| - refresh_rects_.push_back(
|
| - SkIRect::MakeWH(static_cast<int>(frame_->width()),
|
| - static_cast<int>(frame_->height())));
|
| + SkIRect frame_rect = SkIRect::MakeWH(frame_->width(), frame_->height());
|
| + refresh_region_.op(frame_rect, SkRegion::kUnion_Op);
|
| +
|
| DoRefresh();
|
| }
|
|
|
| @@ -200,33 +200,33 @@ void RectangleUpdateDecoder::SubmitToConsumer() {
|
| if (!frame_)
|
| return;
|
|
|
| - RectVector* dirty_rects = new RectVector();
|
| - decoder_->GetUpdatedRects(dirty_rects);
|
| + SkRegion* dirty_region = new SkRegion;
|
| + decoder_->GetUpdatedRegion(dirty_region);
|
|
|
| - consumer_->OnPartialFrameOutput(frame_, dirty_rects, base::Bind(
|
| - &RectangleUpdateDecoder::OnFrameConsumed, this, dirty_rects));
|
| + consumer_->OnPartialFrameOutput(frame_, dirty_region, base::Bind(
|
| + &RectangleUpdateDecoder::OnFrameConsumed, this, dirty_region));
|
| }
|
|
|
| void RectangleUpdateDecoder::DoRefresh() {
|
| DCHECK(message_loop_->BelongsToCurrentThread());
|
|
|
| - if (refresh_rects_.empty())
|
| + if (refresh_region_.isEmpty())
|
| return;
|
|
|
| - decoder_->RefreshRects(refresh_rects_);
|
| - refresh_rects_.clear();
|
| + decoder_->RefreshRegion(refresh_region_);
|
| + refresh_region_.setEmpty();
|
| SubmitToConsumer();
|
| }
|
|
|
| -void RectangleUpdateDecoder::OnFrameConsumed(RectVector* rects) {
|
| +void RectangleUpdateDecoder::OnFrameConsumed(SkRegion* region) {
|
| if (!message_loop_->BelongsToCurrentThread()) {
|
| message_loop_->PostTask(
|
| FROM_HERE, base::Bind(&RectangleUpdateDecoder::OnFrameConsumed,
|
| - this, rects));
|
| + this, region));
|
| return;
|
| }
|
|
|
| - delete rects;
|
| + delete region;
|
|
|
| DoRefresh();
|
| }
|
|
|