初始化提交
This commit is contained in:
94
WebDriverAgentLib/Routing/FBScreenRecordingRequest.m
Normal file
94
WebDriverAgentLib/Routing/FBScreenRecordingRequest.m
Normal file
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#import "FBScreenRecordingRequest.h"
|
||||
|
||||
#import "FBErrorBuilder.h"
|
||||
#import "XCUIScreen.h"
|
||||
|
||||
@implementation FBScreenRecordingRequest
|
||||
|
||||
- (instancetype)initWithFps:(NSUInteger)fps codec:(long long)codec
|
||||
{
|
||||
if ((self = [super init])) {
|
||||
_fps = fps;
|
||||
_codec = codec;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (nullable id)createVideoEncodingWithError:(NSError **)error
|
||||
{
|
||||
Class videoEncodingClass = NSClassFromString(@"XCTVideoEncoding");
|
||||
if (nil == videoEncodingClass) {
|
||||
[[[FBErrorBuilder builder]
|
||||
withDescription:@"Cannot find XCTVideoEncoding class"]
|
||||
buildError:error];
|
||||
return nil;
|
||||
}
|
||||
|
||||
id videoEncodingAllocated = [videoEncodingClass alloc];
|
||||
SEL videoEncodingConstructorSelector = NSSelectorFromString(@"initWithCodec:frameRate:");
|
||||
if (![videoEncodingAllocated respondsToSelector:videoEncodingConstructorSelector]) {
|
||||
[[[FBErrorBuilder builder]
|
||||
withDescription:@"'initWithCodec:frameRate:' contructor is not found on XCTVideoEncoding class"]
|
||||
buildError:error];
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSMethodSignature *videoEncodingContructorSignature = [videoEncodingAllocated methodSignatureForSelector:videoEncodingConstructorSelector];
|
||||
NSInvocation *videoEncodingInitInvocation = [NSInvocation invocationWithMethodSignature:videoEncodingContructorSignature];
|
||||
[videoEncodingInitInvocation setSelector:videoEncodingConstructorSelector];
|
||||
long long codec = self.codec;
|
||||
[videoEncodingInitInvocation setArgument:&codec atIndex:2];
|
||||
double frameRate = self.fps;
|
||||
[videoEncodingInitInvocation setArgument:&frameRate atIndex:3];
|
||||
[videoEncodingInitInvocation invokeWithTarget:videoEncodingAllocated];
|
||||
id __unsafe_unretained result;
|
||||
[videoEncodingInitInvocation getReturnValue:&result];
|
||||
return result;
|
||||
}
|
||||
|
||||
- (id)toNativeRequestWithError:(NSError **)error
|
||||
{
|
||||
Class screenRecordingRequestClass = NSClassFromString(@"XCTScreenRecordingRequest");
|
||||
if (nil == screenRecordingRequestClass) {
|
||||
[[[FBErrorBuilder builder]
|
||||
withDescription:@"Cannot find XCTScreenRecordingRequest class"]
|
||||
buildError:error];
|
||||
return nil;
|
||||
}
|
||||
|
||||
id screenRecordingRequestAllocated = [screenRecordingRequestClass alloc];
|
||||
SEL screenRecordingRequestConstructorSelector = NSSelectorFromString(@"initWithScreenID:rect:preferredEncoding:");
|
||||
if (![screenRecordingRequestAllocated respondsToSelector:screenRecordingRequestConstructorSelector]) {
|
||||
[[[FBErrorBuilder builder]
|
||||
withDescription:@"'initWithScreenID:rect:preferredEncoding:' contructor is not found on XCTScreenRecordingRequest class"]
|
||||
buildError:error];
|
||||
return nil;
|
||||
}
|
||||
id videoEncoding = [self createVideoEncodingWithError:error];
|
||||
if (nil == videoEncoding) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSMethodSignature *screenRecordingRequestContructorSignature = [screenRecordingRequestAllocated methodSignatureForSelector:screenRecordingRequestConstructorSelector];
|
||||
NSInvocation *screenRecordingRequestInitInvocation = [NSInvocation invocationWithMethodSignature:screenRecordingRequestContructorSignature];
|
||||
[screenRecordingRequestInitInvocation setSelector:screenRecordingRequestConstructorSelector];
|
||||
long long mainScreenId = XCUIScreen.mainScreen.displayID;
|
||||
[screenRecordingRequestInitInvocation setArgument:&mainScreenId atIndex:2];
|
||||
CGRect fullScreenRect = CGRectNull;
|
||||
[screenRecordingRequestInitInvocation setArgument:&fullScreenRect atIndex:3];
|
||||
[screenRecordingRequestInitInvocation setArgument:&videoEncoding atIndex:4];
|
||||
[screenRecordingRequestInitInvocation invokeWithTarget:screenRecordingRequestAllocated];
|
||||
id __unsafe_unretained result;
|
||||
[screenRecordingRequestInitInvocation getReturnValue:&result];
|
||||
return result;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user