diff --git a/webrtc/api/BUILD.gn b/webrtc/api/BUILD.gn index 8e2853a765..8652fae60f 100644 --- a/webrtc/api/BUILD.gn +++ b/webrtc/api/BUILD.gn @@ -32,6 +32,9 @@ if (is_ios) { "objc/RTCSessionDescription+Private.h", "objc/RTCSessionDescription.h", "objc/RTCSessionDescription.mm", + "objc/RTCStatsReport+Private.h", + "objc/RTCStatsReport.h", + "objc/RTCStatsReport.mm", "objc/RTCVideoFrame+Private.h", "objc/RTCVideoFrame.h", "objc/RTCVideoFrame.mm", diff --git a/webrtc/api/api.gyp b/webrtc/api/api.gyp index 482e62b5e1..e5a70e9625 100644 --- a/webrtc/api/api.gyp +++ b/webrtc/api/api.gyp @@ -31,6 +31,9 @@ 'objc/RTCSessionDescription+Private.h', 'objc/RTCSessionDescription.h', 'objc/RTCSessionDescription.mm', + 'objc/RTCStatsReport+Private.h', + 'objc/RTCStatsReport.h', + 'objc/RTCStatsReport.mm', 'objc/RTCVideoFrame+Private.h', 'objc/RTCVideoFrame.h', 'objc/RTCVideoFrame.mm', diff --git a/webrtc/api/objc/RTCStatsReport+Private.h b/webrtc/api/objc/RTCStatsReport+Private.h new file mode 100644 index 0000000000..5b7dc32a74 --- /dev/null +++ b/webrtc/api/objc/RTCStatsReport+Private.h @@ -0,0 +1,24 @@ +/* + * 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 "RTCStatsReport.h" + +#include "talk/app/webrtc/statstypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface RTCStatsReport () + +/** Initialize an RTCStatsReport object from a native StatsReport. */ +- (instancetype)initWithNativeReport:(const webrtc::StatsReport &)nativeReport; + +@end + +NS_ASSUME_NONNULL_END diff --git a/webrtc/api/objc/RTCStatsReport.h b/webrtc/api/objc/RTCStatsReport.h new file mode 100644 index 0000000000..fc66faf2cf --- /dev/null +++ b/webrtc/api/objc/RTCStatsReport.h @@ -0,0 +1,34 @@ +/* + * 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 + +NS_ASSUME_NONNULL_BEGIN + +/** This does not currently conform to the spec. */ +@interface RTCStatsReport : NSObject + +/** Time since 1970-01-01T00:00:00Z in milliseconds. */ +@property(nonatomic, readonly) CFTimeInterval timestamp; + +/** The type of stats held by this object. */ +@property(nonatomic, readonly) NSString *type; + +/** The identifier for this object. */ +@property(nonatomic, readonly) NSString *statsId; + +/** A dictionary holding the actual stats. */ +@property(nonatomic, readonly) NSDictionary *values; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/webrtc/api/objc/RTCStatsReport.mm b/webrtc/api/objc/RTCStatsReport.mm new file mode 100644 index 0000000000..35a5229014 --- /dev/null +++ b/webrtc/api/objc/RTCStatsReport.mm @@ -0,0 +1,62 @@ +/* + * 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 "RTCStatsReport.h" + +#include "webrtc/base/checks.h" + +#import "webrtc/api/objc/RTCStatsReport+Private.h" +#import "webrtc/base/objc/NSString+StdString.h" +#import "webrtc/base/objc/RTCLogging.h" + +@implementation RTCStatsReport + +@synthesize timestamp = _timestamp; +@synthesize type = _type; +@synthesize statsId = _statsId; +@synthesize values = _values; + +- (NSString *)description { + return [NSString stringWithFormat:@"RTCStatsReport:\n%@\n%@\n%f\n%@", + _statsId, + _type, + _timestamp, + _values]; +} + +#pragma mark - Private + +- (instancetype)initWithNativeReport:(const webrtc::StatsReport &)nativeReport { + if (self = [super init]) { + _timestamp = nativeReport.timestamp(); + _type = [NSString stringForStdString:nativeReport.TypeToString()]; + _statsId = [NSString stringForStdString: + nativeReport.id()->ToString()]; + + NSUInteger capacity = nativeReport.values().size(); + NSMutableDictionary *values = + [NSMutableDictionary dictionaryWithCapacity:capacity]; + for (auto const &valuePair : nativeReport.values()) { + NSString *key = [NSString stringForStdString: + valuePair.second->display_name()]; + NSString *value = [NSString stringForStdString: + valuePair.second->ToString()]; + + // Not expecting duplicate keys. + RTC_DCHECK(values[key]); + + values[key] = value; + } + _values = values; + } + return self; +} + +@end