Index: webrtc/sdk/objc/Framework/Classes/RTCPeerConnection+Stats.mm |
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection+Stats.mm b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection+Stats.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2c4571e0b37270198a3fc12fb3923d0cbb7640da |
--- /dev/null |
+++ b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection+Stats.mm |
@@ -0,0 +1,64 @@ |
+/* |
+ * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
+ * |
+ * Use of this source code is governed by a BSD-style license |
+ * that can be found in the LICENSE file in the root of the source |
+ * tree. An additional intellectual property rights grant can be found |
+ * in the file PATENTS. All contributing project authors may |
+ * be found in the AUTHORS file in the root of the source tree. |
+ */ |
+ |
+#import "RTCPeerConnection+Private.h" |
+ |
+#import "NSString+StdString.h" |
+#import "RTCMediaStreamTrack+Private.h" |
+#import "RTCLegacyStatsReport+Private.h" |
+ |
+#include "webrtc/base/checks.h" |
+ |
+namespace webrtc { |
+ |
+class StatsObserverAdapter : public StatsObserver { |
+ public: |
+ StatsObserverAdapter(void (^completionHandler) |
+ (NSArray<RTCLegacyStatsReport *> *stats)) { |
+ completion_handler_ = completionHandler; |
+ } |
+ |
+ ~StatsObserverAdapter() { |
+ completion_handler_ = nil; |
+ } |
+ |
+ void OnComplete(const StatsReports& reports) override { |
+ RTC_DCHECK(completion_handler_); |
+ NSMutableArray *stats = [NSMutableArray arrayWithCapacity:reports.size()]; |
+ for (const auto* report : reports) { |
+ RTCLegacyStatsReport *statsReport = |
+ [[RTCLegacyStatsReport alloc] initWithNativeReport:*report]; |
+ [stats addObject:statsReport]; |
+ } |
+ completion_handler_(stats); |
+ completion_handler_ = nil; |
+ } |
+ |
+ private: |
+ void (^completion_handler_)(NSArray<RTCLegacyStatsReport *> *stats); |
+}; |
+} // namespace webrtc |
+ |
+@implementation RTCPeerConnection (Stats) |
+ |
+- (void)statsForTrack:(RTCMediaStreamTrack *)mediaStreamTrack |
+ statsOutputLevel:(RTCStatsOutputLevel)statsOutputLevel |
+ completionHandler: |
+ (void (^)(NSArray<RTCLegacyStatsReport *> *stats))completionHandler { |
+ rtc::scoped_refptr<webrtc::StatsObserverAdapter> observer( |
+ new rtc::RefCountedObject<webrtc::StatsObserverAdapter> |
+ (completionHandler)); |
+ webrtc::PeerConnectionInterface::StatsOutputLevel nativeOutputLevel = |
+ [[self class] nativeStatsOutputLevelForLevel:statsOutputLevel]; |
+ self.nativePeerConnection->GetStats( |
+ observer, mediaStreamTrack.nativeTrack, nativeOutputLevel); |
+} |
+ |
+@end |