diff --git a/MTHawkeye/Core/MTHawkeyeAppStat.h b/MTHawkeye/Core/MTHawkeyeAppStat.h index 2ea013d..6da5d87 100644 --- a/MTHawkeye/Core/MTHawkeyeAppStat.h +++ b/MTHawkeye/Core/MTHawkeyeAppStat.h @@ -16,14 +16,7 @@ NS_ASSUME_NONNULL_BEGIN @interface MTHawkeyeAppStat : NSObject -/// Used memory by app in byte. ( task_basic_info.resident_size ) -@property (nonatomic, readonly, class) int64_t memoryAppUsed; - -/* The real physical memory used by app. - - https://stackoverflow.com/questions/9660763/whats-the-right-statistic-for-ios-memory-footprint-live-bytes-real-memory-ot - - https://developer.apple.com/library/archive/technotes/tn2434/_index.html - */ -@property (nonatomic, readonly, class) int64_t memoryFootprint; +@property (nonatomic, readonly, class) int64_t memory; @property (nonatomic, readonly, class) double cpuUsedByAllThreads; diff --git a/MTHawkeye/Core/MTHawkeyeAppStat.m b/MTHawkeye/Core/MTHawkeyeAppStat.m index 0099d75..4dad6de 100644 --- a/MTHawkeye/Core/MTHawkeyeAppStat.m +++ b/MTHawkeye/Core/MTHawkeyeAppStat.m @@ -18,6 +18,14 @@ @implementation MTHawkeyeAppStat ++ (int64_t)memory { + int64_t memory = self.memoryFootprint; + if (memory) { + return memory; + } + return self.memoryAppUsed; +} + + (int64_t)memoryAppUsed { struct task_basic_info info; mach_msg_type_number_t size = (sizeof(task_basic_info_data_t) / sizeof(natural_t)); diff --git a/MTHawkeye/Core/MTHawkeyeAverageStorage.h b/MTHawkeye/Core/MTHawkeyeAverageStorage.h new file mode 100644 index 0000000..4a717cd --- /dev/null +++ b/MTHawkeye/Core/MTHawkeyeAverageStorage.h @@ -0,0 +1,26 @@ +// +// Copyright (c) 2008-present, Meitu, Inc. +// All rights reserved. +// +// This source code is licensed under the license found in the LICENSE file in +// the root directory of this source tree. +// +// Created on: 2020/11/13 +// Created by: whw +// + + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface MTHawkeyeAverageStorage : NSObject + ++ (void)recordMem:(CGFloat)memory; ++ (void)recordCPU:(double)cpu; ++ (void)recordFPS:(int)fps; ++ (void)recordglFPS:(int)fps; + +@end + +NS_ASSUME_NONNULL_END diff --git a/MTHawkeye/Core/MTHawkeyeAverageStorage.m b/MTHawkeye/Core/MTHawkeyeAverageStorage.m new file mode 100644 index 0000000..fb62d8d --- /dev/null +++ b/MTHawkeye/Core/MTHawkeyeAverageStorage.m @@ -0,0 +1,97 @@ +// +// Copyright (c) 2008-present, Meitu, Inc. +// All rights reserved. +// +// This source code is licensed under the license found in the LICENSE file in +// the root directory of this source tree. +// +// Created on: 2020/11/13 +// Created by: whw +// + + +#import "MTHawkeyeAverageStorage.h" +#import "MTHawkeyeUtility.h" +#import "MTHawkeyeLogMacros.h" +#import + +static const char *_fileChar = NULL; + +static CGFloat _memTotal = 0.0; +static int _memCount = 0; +static double _cpuTotal = 0.0; +static int _cpuCount = 0; +static int _fpsTotal = 0; +static int _fpsCount = 0; +static int _glfpsTotal = 0; +static int _glfpsCount = 0; + +@implementation MTHawkeyeAverageStorage + ++ (void)setupIfNeeded { + if (_fileChar) { + return; + } + NSString *storagePath = [MTHawkeyeUtility currentStorePath]; + NSString *path = [storagePath stringByAppendingPathComponent:@"average"]; + if (![[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil]) { + MTHLogWarn(@"[Average] create directory %@ failed", path); + return; + } + const char *filePath = path.UTF8String; + if (!filePath) { + return; + } + int fd = open(filePath, O_CREAT | O_RDWR, 0666); + if (fd < 0) { + MTHLogWarn(@"[Average] failed to open %@", path); + return; + } + size_t sz = getpagesize(); + char *ptr = (char *)mmap(NULL, sz, PROT_WRITE, MAP_SHARED, fd, 0); + if (ptr == MAP_FAILED) { + MTHLogWarn(@"[Average] failed to mmap %@, size: %@", path, @(sz)); + return; + } + ftruncate(fd, sz); + _fileChar = ptr; +} + ++ (void)record { + [self setupIfNeeded]; + if (_fileChar) { + const char *record = [NSString stringWithFormat:@"\357\273\277CPU: %.1f%%\nMemory: %.1fM\nFPS: %.1f\nglFPS: %.1f\n", + _cpuTotal / MAX(_cpuCount, 1), + _memTotal / MAX(_memCount, 1), + (CGFloat)_fpsTotal / MAX(_fpsCount, 1), + (CGFloat)_glfpsTotal / MAX(_glfpsCount, 1) + ].UTF8String; + memcpy((void *)_fileChar, (void *)record, strlen(record)); + } +} + ++ (void)recordMem:(CGFloat)memory { + _memCount++; + _memTotal += memory; + [self record]; +} + ++ (void)recordCPU:(double)cpu { + _cpuCount++; + _cpuTotal += cpu * 100.f; + [self record]; +} + ++ (void)recordFPS:(int)fps { + _fpsCount++; + _fpsTotal += fps; + [self record]; +} + ++ (void)recordglFPS:(int)fps { + _glfpsCount++; + _glfpsTotal += fps; + [self record]; +} + +@end diff --git a/MTHawkeye/Core/MTHawkeyeClient.m b/MTHawkeye/Core/MTHawkeyeClient.m index 1f39814..73f2ecb 100644 --- a/MTHawkeye/Core/MTHawkeyeClient.m +++ b/MTHawkeye/Core/MTHawkeyeClient.m @@ -15,7 +15,7 @@ #import "MTHawkeyeLogMacros.h" #import "MTHawkeyeStorage.h" #import "MTHawkeyeUtility.h" - +#import "MTHawkeyeAverageStorage.h" @interface MTHawkeyeClient () @@ -203,18 +203,14 @@ - (void)doBuildInFlushStatusTasks { // record memory usage if ([MTHawkeyeUserDefaults shared].recordMemoryUsage) { - static CGFloat preResident = 0.f; static CGFloat preMemFootprint = 0.f; - CGFloat resident = MTHawkeyeAppStat.memoryAppUsed / 1024.f / 1024.f; - CGFloat memFootprint = MTHawkeyeAppStat.memoryFootprint / 1024.f / 1024.f; - if (forceFlush || (fabs(resident - preResident) > DBL_EPSILON) || (fabs(memFootprint - preMemFootprint) > DBL_EPSILON)) { - preResident = resident; + CGFloat memFootprint = MTHawkeyeAppStat.memory / 1024.f / 1024.f; + [MTHawkeyeAverageStorage recordMem:memFootprint]; + if (forceFlush || (fabs(memFootprint - preMemFootprint) > DBL_EPSILON)) { preMemFootprint = memFootprint; - NSString *residentStr = [NSString stringWithFormat:@"%.2f", resident]; NSString *memFootprintStr = [NSString stringWithFormat:@"%.2f", memFootprint]; - [[MTHawkeyeStorage shared] asyncStoreValue:residentStr withKey:time inCollection:@"mem"]; [[MTHawkeyeStorage shared] asyncStoreValue:memFootprintStr withKey:time inCollection:@"r-mem"]; } } @@ -223,6 +219,7 @@ - (void)doBuildInFlushStatusTasks { if ([MTHawkeyeUserDefaults shared].recordCPUUsage) { static double preCPUUsage = 0.f; double cpuUsage = MTHawkeyeAppStat.cpuUsedByAllThreads; + [MTHawkeyeAverageStorage recordCPU:cpuUsage]; if (forceFlush || (fabs(cpuUsage - preCPUUsage) > DBL_EPSILON)) { preCPUUsage = cpuUsage; diff --git a/MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeCore/MTHANRHawkeyeAdaptor.m b/MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeCore/MTHANRHawkeyeAdaptor.m index 975f6f4..9b82280 100644 --- a/MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeCore/MTHANRHawkeyeAdaptor.m +++ b/MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeCore/MTHANRHawkeyeAdaptor.m @@ -97,9 +97,6 @@ - (void)startANRTrace { // enable anr trace buffer, needed for tracing hard stall(stall then killed by watchdog or user) if (![MTHANRTracingBufferRunner isTracingBufferRunning]) { NSString *storagePath = [MTHawkeyeUtility currentStorePath]; - if (![[NSFileManager defaultManager] fileExistsAtPath:storagePath]) { - [MTHawkeyeStorage shared]; - } NSString *path = [storagePath stringByAppendingPathComponent:@"anr_tracing_buffer"]; [MTHANRTracingBufferRunner enableTracingBufferAtPath:path]; } diff --git a/MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeCore/MTFPSHawkeyeAdaptor.m b/MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeCore/MTFPSHawkeyeAdaptor.m index 158fd41..f85e496 100644 --- a/MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeCore/MTFPSHawkeyeAdaptor.m +++ b/MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeCore/MTFPSHawkeyeAdaptor.m @@ -14,6 +14,7 @@ #import "MTHFPSTrace.h" #import "MTHawkeyeClient.h" #import "MTHawkeyeStorage.h" +#import "MTHawkeyeAverageStorage.h" #import "MTHawkeyeUserDefaults.h" #import "MTHawkeyeUtility.h" @@ -91,6 +92,7 @@ - (void)receivedFlushStatusCommand { { static NSInteger preFPS = 0; NSInteger curFPSValue = [MTHFPSTrace shared].fpsValue; + [MTHawkeyeAverageStorage recordFPS:(int)curFPSValue]; BOOL fpsChanged = (preFPS != curFPSValue); if (fpsChanged || forceFlush) { NSString *fpsValue = [NSString stringWithFormat:@"%@", @(curFPSValue)]; @@ -103,14 +105,14 @@ - (void)receivedFlushStatusCommand { if ([MTHFPSTrace shared].gpuImageViewFPSEnable) { static NSInteger preGPUImageFPS = 0; NSInteger curGPUImageFPSValue = self.firstActiveRenderCounter.fpsValue; - BOOL gpuImageDisplaying = self.firstActiveRenderCounter.isActive; + [MTHawkeyeAverageStorage recordglFPS:(int)curGPUImageFPSValue]; BOOL gpuImageFPSChanged = (preGPUImageFPS != curGPUImageFPSValue); if (gpuImageFPSChanged || forceFlush) { // 平时记录时只记录了变化时的数据,这里补充记录退出前的最后一次数据 if (preGPUImageFPS > 0 && curGPUImageFPSValue == 0) { [[MTHawkeyeStorage shared] asyncStoreValue:[NSString stringWithFormat:@"%@", @(preGPUImageFPS)] withKey:time inCollection:@"gl-fps"]; } - + BOOL gpuImageDisplaying = self.firstActiveRenderCounter.isActive; if (gpuImageDisplaying && curGPUImageFPSValue > 0.f) { NSString *glfps = [NSString stringWithFormat:@"%@", @(curGPUImageFPSValue)]; [[MTHawkeyeStorage shared] asyncStoreValue:glfps withKey:time inCollection:@"gl-fps"]; diff --git a/MTHawkeye/UISkeleton/MTHawkeyeBuildinFloatingWidget.m b/MTHawkeye/UISkeleton/MTHawkeyeBuildinFloatingWidget.m index 66eda77..d91ed45 100644 --- a/MTHawkeye/UISkeleton/MTHawkeyeBuildinFloatingWidget.m +++ b/MTHawkeye/UISkeleton/MTHawkeyeBuildinFloatingWidget.m @@ -77,9 +77,7 @@ - (BOOL)widgetHiddenDefault { } - (void)receivedFlushStatusCommand { - NSInteger fp = (NSInteger)round(MTHawkeyeAppStat.memoryFootprint / 1024 / 1024.f); - if (fp == 0) - fp = MTHawkeyeAppStat.memoryAppUsed / 1024.f / 1024.f; + NSInteger fp = (NSInteger)round(MTHawkeyeAppStat.memory / 1024 / 1024.f); if (self.preMemFootPrint == fp) return; diff --git a/MTHawkeyeDemo/Podfile.lock b/MTHawkeyeDemo/Podfile.lock index 548b1ae..5a2c00e 100644 --- a/MTHawkeyeDemo/Podfile.lock +++ b/MTHawkeyeDemo/Podfile.lock @@ -33,15 +33,15 @@ PODS: - MTGLDebug/MRC - MTGLDebug/MRC (3.1.2): - fishhook (~> 0.2) - - MTHawkeye/Core (0.12.3): + - MTHawkeye/Core (0.12.4): - MTHawkeye/Utils - - MTHawkeye/DefaultPlugins (0.12.3): + - MTHawkeye/DefaultPlugins (0.12.4): - CocoaLumberjack - MTHawkeye/DefaultPluginsWithoutLog - - MTHawkeye/DefaultPluginsWithoutLog (0.12.3): + - MTHawkeye/DefaultPluginsWithoutLog (0.12.4): - MTHawkeye/DefaultPluginsWithoutLogAndGL - MTHawkeye/GraphicsPlugins - - MTHawkeye/DefaultPluginsWithoutLogAndGL (0.12.3): + - MTHawkeye/DefaultPluginsWithoutLogAndGL (0.12.4): - MTHawkeye/Core - MTHawkeye/EnergyPlugins - MTHawkeye/FLEXExtension @@ -50,185 +50,185 @@ PODS: - MTHawkeye/StorageMonitorPlugins - MTHawkeye/TimeConsumingPlugins - MTHawkeye/UISkeleton - - MTHawkeye/EnergyPlugins (0.12.3): - - MTHawkeye/EnergyPlugins/BackgroundTaskTrace (= 0.12.3) - - MTHawkeye/EnergyPlugins/CPUTrace (= 0.12.3) - - MTHawkeye/EnergyPlugins/BackgroundTaskTrace (0.12.3): - - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/Core (= 0.12.3) - - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/HawkeyeCore (= 0.12.3) - - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/HawkeyeUI (= 0.12.3) - - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/Core (0.12.3): + - MTHawkeye/EnergyPlugins (0.12.4): + - MTHawkeye/EnergyPlugins/BackgroundTaskTrace (= 0.12.4) + - MTHawkeye/EnergyPlugins/CPUTrace (= 0.12.4) + - MTHawkeye/EnergyPlugins/BackgroundTaskTrace (0.12.4): + - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/Core (= 0.12.4) + - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/HawkeyeCore (= 0.12.4) + - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/HawkeyeUI (= 0.12.4) + - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/Core (0.12.4): - MTHawkeye/Utils - - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/HawkeyeCore (0.12.3): + - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/Core - MTHawkeye/StackBacktrace - - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/HawkeyeUI (0.12.3): + - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/HawkeyeUI (0.12.4): - MTHawkeye/Core - MTHawkeye/EnergyPlugins/BackgroundTaskTrace/HawkeyeCore - MTHawkeye/UISkeleton - - MTHawkeye/EnergyPlugins/CPUTrace (0.12.3): - - MTHawkeye/EnergyPlugins/CPUTrace/Core (= 0.12.3) - - MTHawkeye/EnergyPlugins/CPUTrace/HawkeyeCore (= 0.12.3) - - MTHawkeye/EnergyPlugins/CPUTrace/HawkeyeUI (= 0.12.3) - - MTHawkeye/EnergyPlugins/CPUTrace/Core (0.12.3): + - MTHawkeye/EnergyPlugins/CPUTrace (0.12.4): + - MTHawkeye/EnergyPlugins/CPUTrace/Core (= 0.12.4) + - MTHawkeye/EnergyPlugins/CPUTrace/HawkeyeCore (= 0.12.4) + - MTHawkeye/EnergyPlugins/CPUTrace/HawkeyeUI (= 0.12.4) + - MTHawkeye/EnergyPlugins/CPUTrace/Core (0.12.4): - MTHawkeye/Core - MTHawkeye/StackBacktrace - - MTHawkeye/EnergyPlugins/CPUTrace/HawkeyeCore (0.12.3): + - MTHawkeye/EnergyPlugins/CPUTrace/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/EnergyPlugins/CPUTrace/Core - - MTHawkeye/EnergyPlugins/CPUTrace/HawkeyeUI (0.12.3): + - MTHawkeye/EnergyPlugins/CPUTrace/HawkeyeUI (0.12.4): - MTHawkeye/Core - MTHawkeye/EnergyPlugins/CPUTrace/HawkeyeCore - MTHawkeye/UISkeleton - - MTHawkeye/FLEXExtension (0.12.3): + - MTHawkeye/FLEXExtension (0.12.4): - FLEX (= 4.1.1) - MTHawkeye/UISkeleton - - MTHawkeye/GraphicsPlugins (0.12.3): - - MTHawkeye/GraphicsPlugins/OpenGLTrace (= 0.12.3) - - MTHawkeye/GraphicsPlugins/OpenGLTrace (0.12.3): + - MTHawkeye/GraphicsPlugins (0.12.4): + - MTHawkeye/GraphicsPlugins/OpenGLTrace (= 0.12.4) + - MTHawkeye/GraphicsPlugins/OpenGLTrace (0.12.4): - MTGLDebug - MTHawkeye/UISkeleton - - MTHawkeye/MemoryPlugins (0.12.3): - - MTHawkeye/MemoryPlugins/Allocations (= 0.12.3) - - MTHawkeye/MemoryPlugins/LivingObjectSniffer (= 0.12.3) - - MTHawkeye/MemoryPlugins/Allocations (0.12.3): - - MTHawkeye/MemoryPlugins/Allocations/Core (= 0.12.3) - - MTHawkeye/MemoryPlugins/Allocations/HawkeyeCore (= 0.12.3) - - MTHawkeye/MemoryPlugins/Allocations/HawkeyeUI (= 0.12.3) - - MTHawkeye/MemoryPlugins/Allocations/Core (0.12.3): - - MTHawkeye/MemoryPlugins/Allocations/Core/no-arc (= 0.12.3) + - MTHawkeye/MemoryPlugins (0.12.4): + - MTHawkeye/MemoryPlugins/Allocations (= 0.12.4) + - MTHawkeye/MemoryPlugins/LivingObjectSniffer (= 0.12.4) + - MTHawkeye/MemoryPlugins/Allocations (0.12.4): + - MTHawkeye/MemoryPlugins/Allocations/Core (= 0.12.4) + - MTHawkeye/MemoryPlugins/Allocations/HawkeyeCore (= 0.12.4) + - MTHawkeye/MemoryPlugins/Allocations/HawkeyeUI (= 0.12.4) + - MTHawkeye/MemoryPlugins/Allocations/Core (0.12.4): + - MTHawkeye/MemoryPlugins/Allocations/Core/no-arc (= 0.12.4) - MTHawkeye/StackBacktrace - MTHawkeye/Utils - - MTHawkeye/MemoryPlugins/Allocations/Core/no-arc (0.12.3): + - MTHawkeye/MemoryPlugins/Allocations/Core/no-arc (0.12.4): - MTHawkeye/StackBacktrace - MTHawkeye/Utils - - MTHawkeye/MemoryPlugins/Allocations/HawkeyeCore (0.12.3): + - MTHawkeye/MemoryPlugins/Allocations/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/MemoryPlugins/Allocations/Core - - MTHawkeye/MemoryPlugins/Allocations/HawkeyeUI (0.12.3): + - MTHawkeye/MemoryPlugins/Allocations/HawkeyeUI (0.12.4): - MTHawkeye/MemoryPlugins/Allocations/Core - MTHawkeye/MemoryPlugins/Allocations/HawkeyeCore - MTHawkeye/UISkeleton - - MTHawkeye/MemoryPlugins/LivingObjectSniffer (0.12.3): - - MTHawkeye/MemoryPlugins/LivingObjectSniffer/Core (= 0.12.3) - - MTHawkeye/MemoryPlugins/LivingObjectSniffer/HawkeyeCore (= 0.12.3) - - MTHawkeye/MemoryPlugins/LivingObjectSniffer/HawkeyeUI (= 0.12.3) - - MTHawkeye/MemoryPlugins/LivingObjectSniffer/Core (0.12.3): + - MTHawkeye/MemoryPlugins/LivingObjectSniffer (0.12.4): + - MTHawkeye/MemoryPlugins/LivingObjectSniffer/Core (= 0.12.4) + - MTHawkeye/MemoryPlugins/LivingObjectSniffer/HawkeyeCore (= 0.12.4) + - MTHawkeye/MemoryPlugins/LivingObjectSniffer/HawkeyeUI (= 0.12.4) + - MTHawkeye/MemoryPlugins/LivingObjectSniffer/Core (0.12.4): - MTHawkeye/Utils - - MTHawkeye/MemoryPlugins/LivingObjectSniffer/HawkeyeCore (0.12.3): + - MTHawkeye/MemoryPlugins/LivingObjectSniffer/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/MemoryPlugins/LivingObjectSniffer/Core - - MTHawkeye/MemoryPlugins/LivingObjectSniffer/HawkeyeUI (0.12.3): + - MTHawkeye/MemoryPlugins/LivingObjectSniffer/HawkeyeUI (0.12.4): - FBRetainCycleDetector - MTHawkeye/MemoryPlugins/LivingObjectSniffer/HawkeyeCore - MTHawkeye/UISkeleton - - MTHawkeye/NetworkPlugins (0.12.3): - - MTHawkeye/NetworkPlugins/HawkeyeUI (= 0.12.3) - - MTHawkeye/NetworkPlugins/Inspect (= 0.12.3) - - MTHawkeye/NetworkPlugins/Monitor (= 0.12.3) - - MTHawkeye/NetworkPlugins/HawkeyeUI (0.12.3): + - MTHawkeye/NetworkPlugins (0.12.4): + - MTHawkeye/NetworkPlugins/HawkeyeUI (= 0.12.4) + - MTHawkeye/NetworkPlugins/Inspect (= 0.12.4) + - MTHawkeye/NetworkPlugins/Monitor (= 0.12.4) + - MTHawkeye/NetworkPlugins/HawkeyeUI (0.12.4): - FLEX (= 4.1.1) - MTHawkeye/NetworkPlugins/Inspect - MTHawkeye/NetworkPlugins/Monitor - MTHawkeye/UISkeleton - - MTHawkeye/NetworkPlugins/Inspect (0.12.3): - - MTHawkeye/NetworkPlugins/Inspect/Core (= 0.12.3) - - MTHawkeye/NetworkPlugins/Inspect/HawkeyeCore (= 0.12.3) - - MTHawkeye/NetworkPlugins/Inspect/Core (0.12.3): + - MTHawkeye/NetworkPlugins/Inspect (0.12.4): + - MTHawkeye/NetworkPlugins/Inspect/Core (= 0.12.4) + - MTHawkeye/NetworkPlugins/Inspect/HawkeyeCore (= 0.12.4) + - MTHawkeye/NetworkPlugins/Inspect/Core (0.12.4): - MTHawkeye/Core - MTHawkeye/NetworkPlugins/Monitor - - MTHawkeye/NetworkPlugins/Inspect/HawkeyeCore (0.12.3): + - MTHawkeye/NetworkPlugins/Inspect/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/NetworkPlugins/Inspect/Core - - MTHawkeye/NetworkPlugins/Monitor (0.12.3): - - MTHawkeye/NetworkPlugins/Monitor/Core (= 0.12.3) - - MTHawkeye/NetworkPlugins/Monitor/HawkeyeCore (= 0.12.3) - - MTHawkeye/NetworkPlugins/Monitor/Core (0.12.3): + - MTHawkeye/NetworkPlugins/Monitor (0.12.4): + - MTHawkeye/NetworkPlugins/Monitor/Core (= 0.12.4) + - MTHawkeye/NetworkPlugins/Monitor/HawkeyeCore (= 0.12.4) + - MTHawkeye/NetworkPlugins/Monitor/Core (0.12.4): - MTHawkeye/Core - - MTHawkeye/NetworkPlugins/Monitor/HawkeyeCore (0.12.3): + - MTHawkeye/NetworkPlugins/Monitor/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/NetworkPlugins/Monitor/Core - - MTHawkeye/StackBacktrace (0.12.3): + - MTHawkeye/StackBacktrace (0.12.4): - MTHawkeye/Utils - - MTHawkeye/StorageMonitorPlugins (0.12.3): - - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher (= 0.12.3) - - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher (0.12.3): - - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/Core (= 0.12.3) - - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/HawkeyeCore (= 0.12.3) - - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/HawkeyeUI (= 0.12.3) - - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/Core (0.12.3): + - MTHawkeye/StorageMonitorPlugins (0.12.4): + - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher (= 0.12.4) + - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher (0.12.4): + - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/Core (= 0.12.4) + - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/HawkeyeCore (= 0.12.4) + - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/HawkeyeUI (= 0.12.4) + - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/Core (0.12.4): - MTHawkeye/Utils - - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/HawkeyeCore (0.12.3): + - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/Core - - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/HawkeyeUI (0.12.3): + - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/HawkeyeUI (0.12.4): - MTHawkeye/FLEXExtension - MTHawkeye/StorageMonitorPlugins/DirectoryWatcher/HawkeyeCore - MTHawkeye/UISkeleton - - MTHawkeye/TimeConsumingPlugins (0.12.3): - - MTHawkeye/TimeConsumingPlugins/ANRTrace (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/FPSTrace (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/UITimeProfiler (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/ANRTrace (0.12.3): - - MTHawkeye/TimeConsumingPlugins/ANRTrace/Core (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeCore (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeUI (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/ANRTrace/Core (0.12.3): + - MTHawkeye/TimeConsumingPlugins (0.12.4): + - MTHawkeye/TimeConsumingPlugins/ANRTrace (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/FPSTrace (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/UITimeProfiler (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/ANRTrace (0.12.4): + - MTHawkeye/TimeConsumingPlugins/ANRTrace/Core (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeCore (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeUI (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/ANRTrace/Core (0.12.4): - MTHawkeye/Core - MTHawkeye/StackBacktrace - MTHawkeye/Utils - - MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeCore (0.12.3): + - MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/TimeConsumingPlugins/ANRTrace/Core - - MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeUI (0.12.3): + - MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeUI (0.12.4): - MTHawkeye/Core - MTHawkeye/TimeConsumingPlugins/ANRTrace/HawkeyeCore - MTHawkeye/UISkeleton - - MTHawkeye/TimeConsumingPlugins/FPSTrace (0.12.3): - - MTHawkeye/TimeConsumingPlugins/FPSTrace/Core (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeCore (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeUI (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/FPSTrace/Core (0.12.3): + - MTHawkeye/TimeConsumingPlugins/FPSTrace (0.12.4): + - MTHawkeye/TimeConsumingPlugins/FPSTrace/Core (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeCore (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeUI (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/FPSTrace/Core (0.12.4): - MTHawkeye/Core - - MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeCore (0.12.3): + - MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/TimeConsumingPlugins/FPSTrace/Core - - MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeUI (0.12.3): + - MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeUI (0.12.4): - MTHawkeye/Core - MTHawkeye/TimeConsumingPlugins/FPSTrace/Core - MTHawkeye/TimeConsumingPlugins/FPSTrace/HawkeyeCore - MTHawkeye/UISkeleton - - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace (0.12.3): - - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace/Core (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace/HawkeyeCore (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace/Core (0.12.3): + - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace (0.12.4): + - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace/Core (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace/HawkeyeCore (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace/Core (0.12.4): - fishhook (~> 0.2) - MTHawkeye/Utils - - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace/HawkeyeCore (0.12.3): + - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace/Core - - MTHawkeye/TimeConsumingPlugins/UITimeProfiler (0.12.3): - - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/Core (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/HawkeyeCore (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/HawkeyeUI (= 0.12.3) - - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/Core (0.12.3): + - MTHawkeye/TimeConsumingPlugins/UITimeProfiler (0.12.4): + - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/Core (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/HawkeyeCore (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/HawkeyeUI (= 0.12.4) + - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/Core (0.12.4): - MTHawkeye/Core - - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/HawkeyeCore (0.12.3): + - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/HawkeyeCore (0.12.4): - MTHawkeye/Core - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/Core - - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/HawkeyeUI (0.12.3): + - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/HawkeyeUI (0.12.4): - MTHawkeye/Core - MTHawkeye/TimeConsumingPlugins/ObjcCallTrace - MTHawkeye/TimeConsumingPlugins/UITimeProfiler/HawkeyeCore - MTHawkeye/UISkeleton - - MTHawkeye/UISkeleton (0.12.3): + - MTHawkeye/UISkeleton (0.12.4): - MTHawkeye/Core - - MTHawkeye/Utils (0.12.3): + - MTHawkeye/Utils (0.12.4): - MTAppenderFile - - MTHawkeye/Utils/cpp (= 0.12.3) - - MTHawkeye/Utils/cpp (0.12.3): + - MTHawkeye/Utils/cpp (= 0.12.4) + - MTHawkeye/Utils/cpp (0.12.4): - MTAppenderFile DEPENDENCIES: @@ -269,8 +269,8 @@ SPEC CHECKSUMS: GYHttpMock: ad08e55ce8bde4e7f7b4d0cbc79ff23c1311658b MTAppenderFile: c7db8f33a8140ee2275a6200305fd11e609fae33 MTGLDebug: 4883ba4da36f45a88e2c2d805d2b5a5b54ba5ad1 - MTHawkeye: 3a6e2e6618ff3c78f7709156bad5fa68a124a099 + MTHawkeye: 4ca2bcc39dd2596420bdd7ff8633f2c545870189 PODFILE CHECKSUM: 996e011f38334f4027f5b3a90919d33fc05c4472 -COCOAPODS: 1.9.3 +COCOAPODS: 1.10.0