Source-SCCamera/ManagedCapturer/SCManagedVideoCapturerLogger.m

78 lines
2.2 KiB
Objective-C

//
// SCManagedVideoCapturerLogger.m
// Snapchat
//
// Created by Pinlin on 12/04/2017.
// Copyright © 2017 Snapchat, Inc. All rights reserved.
//
#import "SCManagedVideoCapturerLogger.h"
#import <SCFoundation/SCAssertWrapper.h>
#import <SCFoundation/SCLog.h>
#import <SCLogger/SCCameraMetrics.h>
#import <SCLogger/SCLogger.h>
@import QuartzCore;
@interface SCManagedVideoCapturerLogger () {
// For time profiles metric during start recording
NSMutableDictionary *_startingStepsDelayTime;
NSTimeInterval _beginStartTime;
NSTimeInterval _lastCheckpointTime;
NSTimeInterval _startedTime;
}
@end
@implementation SCManagedVideoCapturerLogger
- (instancetype)init
{
self = [super init];
if (self) {
_startingStepsDelayTime = [NSMutableDictionary dictionary];
}
return self;
}
- (void)prepareForStartingLog
{
_beginStartTime = CACurrentMediaTime();
_lastCheckpointTime = _beginStartTime;
[_startingStepsDelayTime removeAllObjects];
}
- (void)logStartingStep:(NSString *)stepname
{
SCAssert(_beginStartTime > 0, @"logger is not ready yet, please call prepareForStartingLog at first");
NSTimeInterval currentCheckpointTime = CACurrentMediaTime();
_startingStepsDelayTime[stepname] = @(currentCheckpointTime - _lastCheckpointTime);
_lastCheckpointTime = currentCheckpointTime;
}
- (void)endLoggingForStarting
{
SCAssert(_beginStartTime > 0, @"logger is not ready yet, please call prepareForStartingLog at first");
_startedTime = CACurrentMediaTime();
[self logStartingStep:kSCCapturerStartingStepStartingWriting];
_startingStepsDelayTime[kCapturerStartingTotalDelay] = @(CACurrentMediaTime() - _beginStartTime);
}
- (void)logEventIfStartingTooSlow
{
if (_beginStartTime > 0) {
if (_startingStepsDelayTime.count == 0) {
// It should not be here. We only need to log once.
return;
}
SCLogGeneralWarning(@"Capturer starting delay(in second):%f", _startedTime - _beginStartTime);
[[SCLogger sharedInstance] logEvent:kSCCameraMetricsVideoCapturerStartDelay parameters:_startingStepsDelayTime];
// Clean all delay times after logging
[_startingStepsDelayTime removeAllObjects];
_beginStartTime = 0;
}
}
@end