| // Copyright 2021 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "media/capture/video/mac/video_capture_metrics_mac.h" |
| |
| #import <AVFoundation/AVFoundation.h> |
| #include <CoreMedia/CoreMedia.h> |
| #import <Foundation/Foundation.h> |
| |
| #include "base/mac/scoped_cftyperef.h" |
| #include "base/test/metrics/histogram_tester.h" |
| #include "media/base/video_types.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #import "third_party/ocmock/OCMock/OCMock.h" |
| #include "third_party/ocmock/gtest_support.h" |
| |
| namespace media { |
| |
| namespace {} // namespace |
| |
| TEST(VideoCaptureMetricsMacTest, NoMetricsLoggedIfNullRequestedCaptureFormat) { |
| base::HistogramTester histogram_tester; |
| LogFirstCapturedVideoFrame(nullptr, nullptr); |
| EXPECT_THAT(histogram_tester.GetTotalCountsForPrefix("Media."), |
| testing::IsEmpty()); |
| } |
| |
| TEST(VideoCaptureMetricsMacTest, LogRequestedPixelFormat) { |
| base::HistogramTester histogram_tester; |
| |
| base::ScopedCFTypeRef<CMFormatDescriptionRef> requested_format; |
| OSStatus status = CMVideoFormatDescriptionCreate( |
| kCFAllocatorDefault, |
| kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange /*NV12*/, 320, 180, |
| nullptr, requested_format.InitializeInto()); |
| ASSERT_EQ(0, status); |
| id capture_format = OCMClassMock([AVCaptureDeviceFormat class]); |
| OCMStub([capture_format formatDescription]).andReturn(requested_format.get()); |
| |
| LogFirstCapturedVideoFrame(capture_format, nullptr); |
| EXPECT_THAT(histogram_tester.GetAllSamples( |
| "Media.VideoCapture.Mac.Device.RequestedPixelFormat"), |
| testing::UnorderedElementsAre( |
| base::Bucket(VideoPixelFormat::PIXEL_FORMAT_NV12, 1))); |
| } |
| |
| TEST(VideoCaptureMetricsMacTest, LogFirstFrameWhenAsRequested) { |
| base::HistogramTester histogram_tester; |
| |
| base::ScopedCFTypeRef<CMFormatDescriptionRef> requested_format; |
| OSStatus status = CMVideoFormatDescriptionCreate( |
| kCFAllocatorDefault, |
| kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange /*NV12*/, 320, 180, |
| nullptr, requested_format.InitializeInto()); |
| ASSERT_EQ(0, status); |
| id capture_format = OCMClassMock([AVCaptureDeviceFormat class]); |
| OCMStub([capture_format formatDescription]).andReturn(requested_format.get()); |
| |
| // First frame equal. |
| base::ScopedCFTypeRef<CMSampleBufferRef> first_frame; |
| status = CMSampleBufferCreate(kCFAllocatorDefault, nullptr, false, nullptr, |
| nullptr, requested_format, 0, 0, nullptr, 0, |
| nullptr, first_frame.InitializeInto()); |
| ASSERT_EQ(0, status); |
| |
| LogFirstCapturedVideoFrame(capture_format, first_frame); |
| |
| EXPECT_THAT(histogram_tester.GetAllSamples( |
| "Media.VideoCapture.Mac.Device.RequestedPixelFormat"), |
| testing::UnorderedElementsAre( |
| base::Bucket(VideoPixelFormat::PIXEL_FORMAT_NV12, 1))); |
| EXPECT_THAT( |
| histogram_tester.GetAllSamples( |
| "Media.VideoCapture.Mac.Device.CapturedWithRequestedPixelFormat"), |
| testing::UnorderedElementsAre(base::Bucket(1, 1))); |
| EXPECT_THAT( |
| histogram_tester.GetAllSamples( |
| "Media.VideoCapture.Mac.Device.CapturedWithRequestedResolution"), |
| testing::UnorderedElementsAre(base::Bucket(4, 1))); |
| EXPECT_THAT(histogram_tester.GetAllSamples( |
| "Media.VideoCapture.Mac.Device.CapturedIOSurface"), |
| testing::UnorderedElementsAre(base::Bucket(0, 1))); |
| } |
| |
| } // namespace media |