Index: content/browser/renderer_host/media/video_capture_controller_unittest.cc |
diff --git a/content/browser/renderer_host/media/video_capture_controller_unittest.cc b/content/browser/renderer_host/media/video_capture_controller_unittest.cc |
index d27fac393e88fd61ca43896cf1fba85ebbd5e701..4dbec58f58129001b9b7c7ac4ae01d33c58e79cf 100644 |
--- a/content/browser/renderer_host/media/video_capture_controller_unittest.cc |
+++ b/content/browser/renderer_host/media/video_capture_controller_unittest.cc |
@@ -23,6 +23,7 @@ |
#include "content/public/test/test_browser_thread_bundle.h" |
#include "gpu/command_buffer/common/mailbox_holder.h" |
#include "media/base/video_capture_types.h" |
+#include "media/base/video_frame_metadata.h" |
#include "media/base/video_util.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -43,7 +44,8 @@ class MockVideoCaptureControllerEventHandler |
public: |
explicit MockVideoCaptureControllerEventHandler( |
VideoCaptureController* controller) |
- : controller_(controller) {} |
+ : controller_(controller), |
+ resource_utilization_(-1.0) {} |
~MockVideoCaptureControllerEventHandler() override {} |
// These mock methods are delegated to by our fake implementation of |
@@ -77,7 +79,12 @@ class MockVideoCaptureControllerEventHandler |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, |
base::Bind(&VideoCaptureController::ReturnBuffer, |
- base::Unretained(controller_), id, this, buffer_id, 0)); |
+ base::Unretained(controller_), |
+ id, |
+ this, |
+ buffer_id, |
+ 0, |
+ resource_utilization_)); |
} |
void OnMailboxBufferReady( |
VideoCaptureControllerID id, |
@@ -88,9 +95,14 @@ class MockVideoCaptureControllerEventHandler |
scoped_ptr<base::DictionaryValue> metadata) override { |
DoMailboxBufferReady(id); |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
- FROM_HERE, base::Bind(&VideoCaptureController::ReturnBuffer, |
- base::Unretained(controller_), id, this, |
- buffer_id, mailbox_holder.sync_point)); |
+ FROM_HERE, |
+ base::Bind(&VideoCaptureController::ReturnBuffer, |
+ base::Unretained(controller_), |
+ id, |
+ this, |
+ buffer_id, |
+ mailbox_holder.sync_point, |
+ resource_utilization_)); |
} |
void OnEnded(VideoCaptureControllerID id) override { |
DoEnded(id); |
@@ -102,6 +114,7 @@ class MockVideoCaptureControllerEventHandler |
} |
VideoCaptureController* controller_; |
+ double resource_utilization_; |
}; |
// Test class. |
@@ -336,12 +349,23 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) { |
} |
scoped_refptr<media::VideoFrame> video_frame = |
WrapI420Buffer(capture_resolution, static_cast<uint8*>(buffer->data())); |
+ ASSERT_FALSE(video_frame->metadata()->HasKey( |
+ media::VideoFrameMetadata::RESOURCE_UTILIZATION)); |
+ client_a_->resource_utilization_ = 0.5; |
+ client_b_->resource_utilization_ = -1.0; |
device_->OnIncomingCapturedVideoFrame(buffer.Pass(), video_frame, |
base::TimeTicks()); |
base::RunLoop().RunUntilIdle(); |
Mock::VerifyAndClearExpectations(client_a_.get()); |
Mock::VerifyAndClearExpectations(client_b_.get()); |
+ // Expect VideoCaptureController set the metadata in |video_frame| to hold a |
+ // resource utilization of 0.5 (the largest of all reported values). |
+ double resource_utilization_in_metadata = -1.0; |
+ ASSERT_TRUE(video_frame->metadata()->GetDouble( |
+ media::VideoFrameMetadata::RESOURCE_UTILIZATION, |
+ &resource_utilization_in_metadata)); |
+ ASSERT_EQ(0.5, resource_utilization_in_metadata); |
// Second buffer which ought to use the same shared memory buffer. In this |
// case pretend that the Buffer pointer is held by the device for a long |
@@ -353,6 +377,10 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) { |
memset(buffer2->data(), buffer_no++, buffer2->size()); |
video_frame = |
WrapI420Buffer(capture_resolution, static_cast<uint8*>(buffer2->data())); |
+ ASSERT_FALSE(video_frame->metadata()->HasKey( |
+ media::VideoFrameMetadata::RESOURCE_UTILIZATION)); |
+ client_a_->resource_utilization_ = 0.5; |
+ client_b_->resource_utilization_ = 3.14; |
device_->OnIncomingCapturedVideoFrame(buffer2.Pass(), video_frame, |
base::TimeTicks()); |
@@ -363,6 +391,13 @@ TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) { |
base::RunLoop().RunUntilIdle(); |
Mock::VerifyAndClearExpectations(client_a_.get()); |
Mock::VerifyAndClearExpectations(client_b_.get()); |
+ // Expect VideoCaptureController set the metadata in |video_frame| to hold a |
+ // resource utilization of 3.14 (the largest of all reported values). |
+ resource_utilization_in_metadata = -1.0; |
+ ASSERT_TRUE(video_frame->metadata()->GetDouble( |
+ media::VideoFrameMetadata::RESOURCE_UTILIZATION, |
+ &resource_utilization_in_metadata)); |
+ ASSERT_EQ(3.14, resource_utilization_in_metadata); |
// Add a fourth client now that some buffers have come through. |
controller_->AddClient(client_b_route_2, |