| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Unit test for VideoCaptureController. | 5 // Unit test for VideoCaptureController. |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 client_a_.get(), | 319 client_a_.get(), |
| 320 base::kNullProcessHandle, | 320 base::kNullProcessHandle, |
| 321 200, | 321 200, |
| 322 session_200); | 322 session_200); |
| 323 ASSERT_EQ(3, controller_->GetClientCount()); | 323 ASSERT_EQ(3, controller_->GetClientCount()); |
| 324 | 324 |
| 325 // Now, simulate an incoming captured buffer from the capture device. As a | 325 // Now, simulate an incoming captured buffer from the capture device. As a |
| 326 // side effect this will cause the first buffer to be shared with clients. | 326 // side effect this will cause the first buffer to be shared with clients. |
| 327 uint8 buffer_no = 1; | 327 uint8 buffer_no = 1; |
| 328 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer; | 328 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer; |
| 329 buffer = | 329 buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, |
| 330 device_->ReserveOutputBuffer(media::VideoFrame::I420, capture_resolution); | 330 capture_resolution); |
| 331 ASSERT_TRUE(buffer.get()); | 331 ASSERT_TRUE(buffer.get()); |
| 332 memset(buffer->data(), buffer_no++, buffer->size()); | 332 memset(buffer->data(), buffer_no++, buffer->size()); |
| 333 { | 333 { |
| 334 InSequence s; | 334 InSequence s; |
| 335 EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_1)).Times(1); | 335 EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_1)).Times(1); |
| 336 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1,_)).Times(1); | 336 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1,_)).Times(1); |
| 337 } | 337 } |
| 338 { | 338 { |
| 339 InSequence s; | 339 InSequence s; |
| 340 EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_1)).Times(1); | 340 EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_1)).Times(1); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 351 base::TimeTicks()); | 351 base::TimeTicks()); |
| 352 buffer = NULL; | 352 buffer = NULL; |
| 353 | 353 |
| 354 base::RunLoop().RunUntilIdle(); | 354 base::RunLoop().RunUntilIdle(); |
| 355 Mock::VerifyAndClearExpectations(client_a_.get()); | 355 Mock::VerifyAndClearExpectations(client_a_.get()); |
| 356 Mock::VerifyAndClearExpectations(client_b_.get()); | 356 Mock::VerifyAndClearExpectations(client_b_.get()); |
| 357 | 357 |
| 358 // Second buffer which ought to use the same shared memory buffer. In this | 358 // Second buffer which ought to use the same shared memory buffer. In this |
| 359 // case pretend that the Buffer pointer is held by the device for a long | 359 // case pretend that the Buffer pointer is held by the device for a long |
| 360 // delay. This shouldn't affect anything. | 360 // delay. This shouldn't affect anything. |
| 361 buffer = | 361 buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, |
| 362 device_->ReserveOutputBuffer(media::VideoFrame::I420, capture_resolution); | 362 capture_resolution); |
| 363 ASSERT_TRUE(buffer.get()); | 363 ASSERT_TRUE(buffer.get()); |
| 364 memset(buffer->data(), buffer_no++, buffer->size()); | 364 memset(buffer->data(), buffer_no++, buffer->size()); |
| 365 device_->OnIncomingCapturedVideoFrame( | 365 device_->OnIncomingCapturedVideoFrame( |
| 366 buffer, | 366 buffer, |
| 367 WrapI420Buffer(buffer, capture_resolution), | 367 WrapI420Buffer(buffer, capture_resolution), |
| 368 base::TimeTicks()); | 368 base::TimeTicks()); |
| 369 buffer = NULL; | 369 buffer = NULL; |
| 370 | 370 |
| 371 // The buffer should be delivered to the clients in any order. | 371 // The buffer should be delivered to the clients in any order. |
| 372 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1,_)).Times(1); | 372 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1,_)).Times(1); |
| 373 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_1,_)).Times(1); | 373 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_1,_)).Times(1); |
| 374 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_2,_)).Times(1); | 374 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_2,_)).Times(1); |
| 375 base::RunLoop().RunUntilIdle(); | 375 base::RunLoop().RunUntilIdle(); |
| 376 Mock::VerifyAndClearExpectations(client_a_.get()); | 376 Mock::VerifyAndClearExpectations(client_a_.get()); |
| 377 Mock::VerifyAndClearExpectations(client_b_.get()); | 377 Mock::VerifyAndClearExpectations(client_b_.get()); |
| 378 | 378 |
| 379 // Add a fourth client now that some buffers have come through. | 379 // Add a fourth client now that some buffers have come through. |
| 380 controller_->AddClient(client_b_route_2, | 380 controller_->AddClient(client_b_route_2, |
| 381 client_b_.get(), | 381 client_b_.get(), |
| 382 base::kNullProcessHandle, | 382 base::kNullProcessHandle, |
| 383 1, | 383 1, |
| 384 session_1); | 384 session_1); |
| 385 Mock::VerifyAndClearExpectations(client_b_.get()); | 385 Mock::VerifyAndClearExpectations(client_b_.get()); |
| 386 | 386 |
| 387 // Third, fourth, and fifth buffers. Pretend they all arrive at the same time. | 387 // Third, fourth, and fifth buffers. Pretend they all arrive at the same time. |
| 388 for (int i = 0; i < kPoolSize; i++) { | 388 for (int i = 0; i < kPoolSize; i++) { |
| 389 buffer = device_->ReserveOutputBuffer(media::VideoFrame::I420, | 389 buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, |
| 390 capture_resolution); | 390 capture_resolution); |
| 391 ASSERT_TRUE(buffer.get()); | 391 ASSERT_TRUE(buffer.get()); |
| 392 memset(buffer->data(), buffer_no++, buffer->size()); | 392 memset(buffer->data(), buffer_no++, buffer->size()); |
| 393 device_->OnIncomingCapturedVideoFrame( | 393 device_->OnIncomingCapturedVideoFrame( |
| 394 buffer, | 394 buffer, |
| 395 WrapI420Buffer(buffer, capture_resolution), | 395 WrapI420Buffer(buffer, capture_resolution), |
| 396 base::TimeTicks()); | 396 base::TimeTicks()); |
| 397 buffer = NULL; | 397 buffer = NULL; |
| 398 } | 398 } |
| 399 // ReserveOutputBuffer ought to fail now, because the pool is depleted. | 399 // ReserveOutputBuffer ought to fail now, because the pool is depleted. |
| 400 ASSERT_FALSE(device_->ReserveOutputBuffer(media::VideoFrame::I420, | 400 ASSERT_FALSE(device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, |
| 401 capture_resolution).get()); | 401 capture_resolution).get()); |
| 402 | 402 |
| 403 // The new client needs to be told of 3 buffers; the old clients only 2. | 403 // The new client needs to be told of 3 buffers; the old clients only 2. |
| 404 EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_2)).Times(kPoolSize); | 404 EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_2)).Times(kPoolSize); |
| 405 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2,_)).Times(kPoolSize); | 405 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2,_)).Times(kPoolSize); |
| 406 EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_1)) | 406 EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_1)) |
| 407 .Times(kPoolSize - 1); | 407 .Times(kPoolSize - 1); |
| 408 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1,_)).Times(kPoolSize); | 408 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1,_)).Times(kPoolSize); |
| 409 EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_2)) | 409 EXPECT_CALL(*client_a_, DoBufferCreated(client_a_route_2)) |
| 410 .Times(kPoolSize - 1); | 410 .Times(kPoolSize - 1); |
| 411 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_2,_)).Times(kPoolSize); | 411 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_2,_)).Times(kPoolSize); |
| 412 EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_1)) | 412 EXPECT_CALL(*client_b_, DoBufferCreated(client_b_route_1)) |
| 413 .Times(kPoolSize - 1); | 413 .Times(kPoolSize - 1); |
| 414 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_1,_)).Times(kPoolSize); | 414 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_1,_)).Times(kPoolSize); |
| 415 base::RunLoop().RunUntilIdle(); | 415 base::RunLoop().RunUntilIdle(); |
| 416 Mock::VerifyAndClearExpectations(client_a_.get()); | 416 Mock::VerifyAndClearExpectations(client_a_.get()); |
| 417 Mock::VerifyAndClearExpectations(client_b_.get()); | 417 Mock::VerifyAndClearExpectations(client_b_.get()); |
| 418 | 418 |
| 419 // Now test the interaction of client shutdown and buffer delivery. | 419 // Now test the interaction of client shutdown and buffer delivery. |
| 420 // Kill A1 via renderer disconnect (synchronous). | 420 // Kill A1 via renderer disconnect (synchronous). |
| 421 controller_->RemoveClient(client_a_route_1, client_a_.get()); | 421 controller_->RemoveClient(client_a_route_1, client_a_.get()); |
| 422 // Kill B1 via session close (posts a task to disconnect). | 422 // Kill B1 via session close (posts a task to disconnect). |
| 423 EXPECT_CALL(*client_b_, DoEnded(client_b_route_1)).Times(1); | 423 EXPECT_CALL(*client_b_, DoEnded(client_b_route_1)).Times(1); |
| 424 controller_->StopSession(300); | 424 controller_->StopSession(300); |
| 425 // Queue up another buffer. | 425 // Queue up another buffer. |
| 426 buffer = | 426 buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, |
| 427 device_->ReserveOutputBuffer(media::VideoFrame::I420, capture_resolution); | 427 capture_resolution); |
| 428 ASSERT_TRUE(buffer.get()); | 428 ASSERT_TRUE(buffer.get()); |
| 429 memset(buffer->data(), buffer_no++, buffer->size()); | 429 memset(buffer->data(), buffer_no++, buffer->size()); |
| 430 device_->OnIncomingCapturedVideoFrame( | 430 device_->OnIncomingCapturedVideoFrame( |
| 431 buffer, | 431 buffer, |
| 432 WrapI420Buffer(buffer, capture_resolution), | 432 WrapI420Buffer(buffer, capture_resolution), |
| 433 base::TimeTicks()); | 433 base::TimeTicks()); |
| 434 buffer = NULL; | 434 buffer = NULL; |
| 435 buffer = | 435 buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, |
| 436 device_->ReserveOutputBuffer(media::VideoFrame::I420, capture_resolution); | 436 capture_resolution); |
| 437 { | 437 { |
| 438 // Kill A2 via session close (posts a task to disconnect, but A2 must not | 438 // Kill A2 via session close (posts a task to disconnect, but A2 must not |
| 439 // be sent either of these two buffers). | 439 // be sent either of these two buffers). |
| 440 EXPECT_CALL(*client_a_, DoEnded(client_a_route_2)).Times(1); | 440 EXPECT_CALL(*client_a_, DoEnded(client_a_route_2)).Times(1); |
| 441 controller_->StopSession(200); | 441 controller_->StopSession(200); |
| 442 } | 442 } |
| 443 ASSERT_TRUE(buffer.get()); | 443 ASSERT_TRUE(buffer.get()); |
| 444 memset(buffer->data(), buffer_no++, buffer->size()); | 444 memset(buffer->data(), buffer_no++, buffer->size()); |
| 445 device_->OnIncomingCapturedVideoFrame( | 445 device_->OnIncomingCapturedVideoFrame( |
| 446 buffer, | 446 buffer, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 462 int mailbox_buffers = kPoolSize / 2; | 462 int mailbox_buffers = kPoolSize / 2; |
| 463 GLHelper* gl_helper = ImageTransportFactory::GetInstance()->GetGLHelper(); | 463 GLHelper* gl_helper = ImageTransportFactory::GetInstance()->GetGLHelper(); |
| 464 #endif | 464 #endif |
| 465 int shm_buffers = kPoolSize - mailbox_buffers; | 465 int shm_buffers = kPoolSize - mailbox_buffers; |
| 466 if (shm_buffers == mailbox_buffers) { | 466 if (shm_buffers == mailbox_buffers) { |
| 467 shm_buffers--; | 467 shm_buffers--; |
| 468 mailbox_buffers++; | 468 mailbox_buffers++; |
| 469 } | 469 } |
| 470 | 470 |
| 471 for (int i = 0; i < shm_buffers; ++i) { | 471 for (int i = 0; i < shm_buffers; ++i) { |
| 472 buffer = device_->ReserveOutputBuffer(media::VideoFrame::I420, | 472 buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, |
| 473 capture_resolution); | 473 capture_resolution); |
| 474 ASSERT_TRUE(buffer.get()); | 474 ASSERT_TRUE(buffer.get()); |
| 475 device_->OnIncomingCapturedVideoFrame( | 475 device_->OnIncomingCapturedVideoFrame( |
| 476 buffer, | 476 buffer, |
| 477 WrapI420Buffer(buffer, capture_resolution), | 477 WrapI420Buffer(buffer, capture_resolution), |
| 478 base::TimeTicks()); | 478 base::TimeTicks()); |
| 479 buffer = NULL; | 479 buffer = NULL; |
| 480 } | 480 } |
| 481 std::vector<uint32> mailbox_syncpoints(mailbox_buffers); | 481 std::vector<uint32> mailbox_syncpoints(mailbox_buffers); |
| 482 std::vector<uint32> release_syncpoints(mailbox_buffers); | 482 std::vector<uint32> release_syncpoints(mailbox_buffers); |
| 483 for (int i = 0; i < mailbox_buffers; ++i) { | 483 for (int i = 0; i < mailbox_buffers; ++i) { |
| 484 buffer = device_->ReserveOutputBuffer(media::VideoFrame::NATIVE_TEXTURE, | 484 buffer = device_->ReserveOutputBuffer(media::PIXEL_FORMAT_TEXTURE, |
| 485 gfx::Size(0, 0)); | 485 capture_resolution); |
| 486 ASSERT_TRUE(buffer.get()); | 486 ASSERT_TRUE(buffer.get()); |
| 487 #if !defined(OS_ANDROID) | 487 #if !defined(OS_ANDROID) |
| 488 mailbox_syncpoints[i] = gl_helper->InsertSyncPoint(); | 488 mailbox_syncpoints[i] = gl_helper->InsertSyncPoint(); |
| 489 #endif | 489 #endif |
| 490 device_->OnIncomingCapturedVideoFrame( | 490 device_->OnIncomingCapturedVideoFrame( |
| 491 buffer, | 491 buffer, |
| 492 WrapMailboxBuffer(make_scoped_ptr(new gpu::MailboxHolder( | 492 WrapMailboxBuffer(make_scoped_ptr(new gpu::MailboxHolder( |
| 493 gpu::Mailbox(), 0, mailbox_syncpoints[i])), | 493 gpu::Mailbox(), 0, mailbox_syncpoints[i])), |
| 494 base::Bind(&CacheSyncPoint, &release_syncpoints[i]), | 494 base::Bind(&CacheSyncPoint, &release_syncpoints[i]), |
| 495 capture_resolution), | 495 capture_resolution), |
| 496 base::TimeTicks()); | 496 base::TimeTicks()); |
| 497 buffer = NULL; | 497 buffer = NULL; |
| 498 } | 498 } |
| 499 // ReserveOutputBuffers ought to fail now regardless of buffer format, because | 499 // ReserveOutputBuffers ought to fail now regardless of buffer format, because |
| 500 // the pool is depleted. | 500 // the pool is depleted. |
| 501 ASSERT_FALSE(device_->ReserveOutputBuffer(media::VideoFrame::I420, | 501 ASSERT_FALSE(device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, |
| 502 capture_resolution).get()); | 502 capture_resolution).get()); |
| 503 ASSERT_FALSE(device_->ReserveOutputBuffer(media::VideoFrame::NATIVE_TEXTURE, | 503 ASSERT_FALSE(device_->ReserveOutputBuffer(media::PIXEL_FORMAT_TEXTURE, |
| 504 gfx::Size(0, 0)).get()); | 504 capture_resolution).get()); |
| 505 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2,_)).Times(shm_buffers); | 505 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2,_)).Times(shm_buffers); |
| 506 EXPECT_CALL(*client_b_, DoMailboxBufferReady(client_b_route_2)) | 506 EXPECT_CALL(*client_b_, DoMailboxBufferReady(client_b_route_2)) |
| 507 .Times(mailbox_buffers); | 507 .Times(mailbox_buffers); |
| 508 base::RunLoop().RunUntilIdle(); | 508 base::RunLoop().RunUntilIdle(); |
| 509 for (size_t i = 0; i < mailbox_syncpoints.size(); ++i) { | 509 for (size_t i = 0; i < mailbox_syncpoints.size(); ++i) { |
| 510 // A new release sync point must be inserted when the video frame is | 510 // A new release sync point must be inserted when the video frame is |
| 511 // returned to the Browser process. | 511 // returned to the Browser process. |
| 512 // See: MockVideoCaptureControllerEventHandler::OnMailboxBufferReady() and | 512 // See: MockVideoCaptureControllerEventHandler::OnMailboxBufferReady() and |
| 513 // VideoCaptureController::ReturnBuffer() | 513 // VideoCaptureController::ReturnBuffer() |
| 514 ASSERT_NE(mailbox_syncpoints[i], release_syncpoints[i]); | 514 ASSERT_NE(mailbox_syncpoints[i], release_syncpoints[i]); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 543 | 543 |
| 544 // Second client connects after the error state. It also should get told of | 544 // Second client connects after the error state. It also should get told of |
| 545 // the error. | 545 // the error. |
| 546 EXPECT_CALL(*client_b_, DoError(route_id)).Times(1); | 546 EXPECT_CALL(*client_b_, DoError(route_id)).Times(1); |
| 547 controller_->AddClient( | 547 controller_->AddClient( |
| 548 route_id, client_b_.get(), base::kNullProcessHandle, 200, session_200); | 548 route_id, client_b_.get(), base::kNullProcessHandle, 200, session_200); |
| 549 base::RunLoop().RunUntilIdle(); | 549 base::RunLoop().RunUntilIdle(); |
| 550 Mock::VerifyAndClearExpectations(client_b_.get()); | 550 Mock::VerifyAndClearExpectations(client_b_.get()); |
| 551 | 551 |
| 552 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer = | 552 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer = |
| 553 device_->ReserveOutputBuffer(media::VideoFrame::I420, capture_resolution); | 553 device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, |
| 554 capture_resolution); |
| 554 ASSERT_TRUE(buffer.get()); | 555 ASSERT_TRUE(buffer.get()); |
| 555 | 556 |
| 556 device_->OnIncomingCapturedVideoFrame( | 557 device_->OnIncomingCapturedVideoFrame( |
| 557 buffer, | 558 buffer, |
| 558 WrapI420Buffer(buffer, capture_resolution), | 559 WrapI420Buffer(buffer, capture_resolution), |
| 559 base::TimeTicks()); | 560 base::TimeTicks()); |
| 560 buffer = NULL; | 561 buffer = NULL; |
| 561 | 562 |
| 562 base::RunLoop().RunUntilIdle(); | 563 base::RunLoop().RunUntilIdle(); |
| 563 } | 564 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 580 gfx::Size(10, 10), 25, media::PIXEL_FORMAT_ARGB); | 581 gfx::Size(10, 10), 25, media::PIXEL_FORMAT_ARGB); |
| 581 | 582 |
| 582 // Start the device. Then, before the first buffer, signal an error and | 583 // Start the device. Then, before the first buffer, signal an error and |
| 583 // deliver the buffer. The error should be propagated to clients; the buffer | 584 // deliver the buffer. The error should be propagated to clients; the buffer |
| 584 // should not be. | 585 // should not be. |
| 585 base::RunLoop().RunUntilIdle(); | 586 base::RunLoop().RunUntilIdle(); |
| 586 Mock::VerifyAndClearExpectations(client_a_.get()); | 587 Mock::VerifyAndClearExpectations(client_a_.get()); |
| 587 | 588 |
| 588 const gfx::Size dims(320, 240); | 589 const gfx::Size dims(320, 240); |
| 589 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer = | 590 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer = |
| 590 device_->ReserveOutputBuffer(media::VideoFrame::I420, dims); | 591 device_->ReserveOutputBuffer(media::PIXEL_FORMAT_I420, dims); |
| 591 ASSERT_TRUE(buffer.get()); | 592 ASSERT_TRUE(buffer.get()); |
| 592 | 593 |
| 593 device_->OnError("Test error"); | 594 device_->OnError("Test error"); |
| 594 device_->OnIncomingCapturedVideoFrame( | 595 device_->OnIncomingCapturedVideoFrame( |
| 595 buffer, | 596 buffer, |
| 596 WrapI420Buffer(buffer, dims), | 597 WrapI420Buffer(buffer, dims), |
| 597 base::TimeTicks()); | 598 base::TimeTicks()); |
| 598 buffer = NULL; | 599 buffer = NULL; |
| 599 | 600 |
| 600 EXPECT_CALL(*client_a_, DoError(route_id)).Times(1); | 601 EXPECT_CALL(*client_a_, DoError(route_id)).Times(1); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 EXPECT_EQ(coded_size.width(), size_and_rotation.output_resolution.width()); | 704 EXPECT_EQ(coded_size.width(), size_and_rotation.output_resolution.width()); |
| 704 EXPECT_EQ(coded_size.height(), | 705 EXPECT_EQ(coded_size.height(), |
| 705 size_and_rotation.output_resolution.height()); | 706 size_and_rotation.output_resolution.height()); |
| 706 | 707 |
| 707 EXPECT_EQ(kSessionId, controller_->RemoveClient(route_id, client_a_.get())); | 708 EXPECT_EQ(kSessionId, controller_->RemoveClient(route_id, client_a_.get())); |
| 708 Mock::VerifyAndClearExpectations(client_a_.get()); | 709 Mock::VerifyAndClearExpectations(client_a_.get()); |
| 709 } | 710 } |
| 710 } | 711 } |
| 711 | 712 |
| 712 } // namespace content | 713 } // namespace content |
| OLD | NEW |