| Index: remoting/base/codec_test.cc | 
| diff --git a/remoting/base/codec_test.cc b/remoting/base/codec_test.cc | 
| index efe7055058cba36e04e5bb7c3b2b3ba0b69299e0..a75127ce717bc924bc6d316a53f4865171c7c7ac 100644 | 
| --- a/remoting/base/codec_test.cc | 
| +++ b/remoting/base/codec_test.cc | 
| @@ -132,8 +132,8 @@ class DecoderTester { | 
| } | 
|  | 
| void Reset() { | 
| -    rects_.clear(); | 
| -    update_rects_.clear(); | 
| +    expected_region_.setEmpty(); | 
| +    update_region_.setEmpty(); | 
| } | 
|  | 
| void ReceivedPacket(VideoPacket* packet) { | 
| @@ -142,7 +142,7 @@ class DecoderTester { | 
| ASSERT_NE(Decoder::DECODE_ERROR, result); | 
|  | 
| if (result == Decoder::DECODE_DONE) { | 
| -      decoder_->GetUpdatedRects(&update_rects_); | 
| +      decoder_->GetUpdatedRegion(&update_region_); | 
| } | 
| } | 
|  | 
| @@ -155,7 +155,9 @@ class DecoderTester { | 
| } | 
|  | 
| void AddRects(const SkIRect* rects, int count) { | 
| -    rects_.insert(rects_.begin() + rects_.size(), rects, rects + count); | 
| +    SkRegion new_rects; | 
| +    new_rects.setRects(rects, count); | 
| +    expected_region_.op(new_rects, SkRegion::kUnion_Op); | 
| } | 
|  | 
| void VerifyResults() { | 
| @@ -164,19 +166,17 @@ class DecoderTester { | 
|  | 
| ASSERT_TRUE(capture_data_.get()); | 
|  | 
| -    // Test the content of the update rect. | 
| -    ASSERT_EQ(rects_.size(), update_rects_.size()); | 
| -    for (size_t i = 0; i < update_rects_.size(); ++i) { | 
| -      EXPECT_EQ(rects_[i], update_rects_[i]); | 
| - | 
| +    // Test the content of the update region. | 
| +    EXPECT_EQ(expected_region_, update_region_); | 
| +    for (SkRegion::Iterator i(update_region_); !i.done(); i.next()) { | 
| EXPECT_EQ(frame_->stride(0), capture_data_->data_planes().strides[0]); | 
| const int stride = frame_->stride(0); | 
| -      const int offset =  stride * update_rects_[i].fTop + | 
| -          kBytesPerPixel * update_rects_[i].fLeft; | 
| +      const int offset =  stride * i.rect().top() + | 
| +          kBytesPerPixel * i.rect().left(); | 
| const uint8* original = capture_data_->data_planes().data[0] + offset; | 
| const uint8* decoded = frame_->data(0) + offset; | 
| -      const int row_size = kBytesPerPixel * update_rects_[i].width(); | 
| -      for (int y = 0; y < update_rects_[i].height(); ++y) { | 
| +      const int row_size = kBytesPerPixel * i.rect().width(); | 
| +      for (int y = 0; y < i.rect().height(); ++y) { | 
| EXPECT_EQ(0, memcmp(original, decoded, row_size)) | 
| << "Row " << y << " is different"; | 
| original += stride; | 
| @@ -187,8 +187,8 @@ class DecoderTester { | 
|  | 
| private: | 
| bool strict_; | 
| -  std::deque<SkIRect> rects_; | 
| -  RectVector update_rects_; | 
| +  SkRegion expected_region_; | 
| +  SkRegion update_region_; | 
| Decoder* decoder_; | 
| scoped_refptr<media::VideoFrame> frame_; | 
| scoped_refptr<CaptureData> capture_data_; | 
| @@ -292,28 +292,24 @@ void TestEncoder(Encoder* encoder, bool strict) { | 
| TestEncodingRects(encoder, &tester, data, kTestRects + 3, 2); | 
| } | 
|  | 
| -static void TestEncodingRects(Encoder* encoder, | 
| -                              EncoderTester* encoder_tester, | 
| -                              DecoderTester* decoder_tester, | 
| -                              scoped_refptr<CaptureData> data, | 
| -                              const SkIRect* rects, int count) { | 
| -  data->mutable_dirty_region().setEmpty(); | 
| -  for (int i = 0; i < count; ++i) { | 
| -    data->mutable_dirty_region().op(rects[i], SkRegion::kUnion_Op); | 
| -  } | 
| +static void TestEncodeDecodeRects(Encoder* encoder, | 
| +                                  EncoderTester* encoder_tester, | 
| +                                  DecoderTester* decoder_tester, | 
| +                                  scoped_refptr<CaptureData> data, | 
| +                                  const SkIRect* rects, int count) { | 
| +  data->mutable_dirty_region().setRects(rects, count); | 
| encoder_tester->AddRects(rects, count); | 
| decoder_tester->AddRects(rects, count); | 
|  | 
| -  // Generate random data for the updated rects. | 
| +  // Generate random data for the updated region. | 
| srand(0); | 
| for (int i = 0; i < count; ++i) { | 
| -    const SkIRect& rect = rects[i]; | 
| const int bytes_per_pixel = GetBytesPerPixel(data->pixel_format()); | 
| -    const int row_size = bytes_per_pixel * rect.width(); | 
| +    const int row_size = bytes_per_pixel * rects[i].width(); | 
| uint8* memory = data->data_planes().data[0] + | 
| -                    data->data_planes().strides[0] * rect.fTop + | 
| -                    bytes_per_pixel * rect.fLeft; | 
| -    for (int y = 0; y < rect.height(); ++y) { | 
| +      data->data_planes().strides[0] * rects[i].top() + | 
| +      bytes_per_pixel * rects[i].left(); | 
| +    for (int y = 0; y < rects[i].height(); ++y) { | 
| for (int x = 0; x < row_size; ++x) | 
| memory[x] = rand() % 256; | 
| memory += data->data_planes().strides[0]; | 
| @@ -342,14 +338,14 @@ void TestEncoderDecoder(Encoder* encoder, Decoder* decoder, bool strict) { | 
| decoder_tester.set_capture_data(data); | 
| encoder_tester.set_decoder_tester(&decoder_tester); | 
|  | 
| -  TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, | 
| -                    kTestRects, 1); | 
| -  TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, | 
| -                    kTestRects + 1, 1); | 
| -  TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, | 
| -                    kTestRects + 2, 1); | 
| -  TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, | 
| -                    kTestRects + 3, 2); | 
| +  TestEncodeDecodeRects(encoder, &encoder_tester, &decoder_tester, data, | 
| +                        kTestRects, 1); | 
| +  TestEncodeDecodeRects(encoder, &encoder_tester, &decoder_tester, data, | 
| +                        kTestRects + 1, 1); | 
| +  TestEncodeDecodeRects(encoder, &encoder_tester, &decoder_tester, data, | 
| +                        kTestRects + 2, 1); | 
| +  TestEncodeDecodeRects(encoder, &encoder_tester, &decoder_tester, data, | 
| +                        kTestRects + 3, 2); | 
| } | 
|  | 
| }  // namespace remoting | 
|  |