|
19 | 19 | #import "MTRDeviceControllerFactory_Internal.h" |
20 | 20 | #import "MTRDeviceController_Internal.h" |
21 | 21 | #import "MTRError_Internal.h" |
| 22 | +#import "MTRMetricKeys.h" |
| 23 | +#import "MTRMetricsCollector.h" |
22 | 24 | #import "MTROTAUnsolicitedBDXMessageHandler.h" |
23 | 25 | #import "NSStringSpanConversion.h" |
24 | 26 |
|
|
28 | 30 | using namespace chip; |
29 | 31 | using namespace chip::bdx; |
30 | 32 | using namespace chip::app; |
| 33 | +using namespace chip::Tracing::DarwinFramework; |
31 | 34 |
|
32 | 35 | constexpr uint16_t kMaxBdxBlockSize = 1024; |
33 | 36 |
|
@@ -199,6 +202,11 @@ - (void)SetOtaImageTransferHandler:(MTROTAImageTransferHandler *)otaImageTransfe |
199 | 202 | auto * controller = [[MTRDeviceControllerFactory sharedInstance] runningControllerForFabricIndex:mPeer.GetFabricIndex()]; |
200 | 203 | VerifyOrReturnError(controller != nil, CHIP_ERROR_INCORRECT_STATE); |
201 | 204 |
|
| 205 | + mNumBytesProcessed = 0; |
| 206 | + |
| 207 | + MATTER_LOG_METRIC_BEGIN(kMetricOTATransfer); |
| 208 | + MATTER_LOG_METRIC(kMetricOTATransferOffset, uint32_t(mTransfer.GetStartOffset())); |
| 209 | + |
202 | 210 | MTROTAImageTransferHandlerWrapper * __weak weakWrapper = mOTAImageTransferHandlerWrapper; |
203 | 211 |
|
204 | 212 | auto completionHandler = ^(NSError * _Nullable error) { |
@@ -284,8 +292,24 @@ - (void)SetOtaImageTransferHandler:(MTROTAImageTransferHandler *)otaImageTransfe |
284 | 292 | return; |
285 | 293 | } |
286 | 294 |
|
| 295 | + auto * device = [MTRDevice deviceWithNodeID:nodeId controller:controller]; |
| 296 | + |
| 297 | + MATTER_LOG_METRIC(kMetricOTADeviceVendorID, device.vendorID.unsignedIntValue); |
| 298 | + MATTER_LOG_METRIC(kMetricOTADeviceProductID, device.productID.unsignedIntValue); |
| 299 | + MATTER_LOG_METRIC(kMetricOTADeviceUsesThread, mIsPeerNodeAKnownThreadDevice); |
| 300 | + MATTER_LOG_METRIC(kMetricOTATNumBytesProcessed, uint32_t(mNumBytesProcessed)); |
| 301 | + MATTER_LOG_METRIC_END(kMetricOTATransfer, error); |
| 302 | + |
| 303 | + // Always collect the metrics to avoid unbounded growth of the stats in the collector |
| 304 | + MTRMetrics * metrics = [[MTRMetricsCollector sharedInstance] metricSnapshotForCategory:@("ota") removeMetrics:YES]; |
287 | 305 | auto nsError = [MTRError errorForCHIPErrorCode:error]; |
288 | | - if ([strongDelegate respondsToSelector:@selector(handleBDXTransferSessionEndForNodeID:controller:error:)]) { |
| 306 | + if ([strongDelegate respondsToSelector:@selector(handleBDXTransferSessionEndForNodeID:controller:metrics:error:)]) { |
| 307 | + dispatch_async(delegateQueue, ^{ |
| 308 | + [strongDelegate handleBDXTransferSessionEndForNodeID:nodeId controller:controller |
| 309 | + metrics:metrics |
| 310 | + error:nsError]; |
| 311 | + }); |
| 312 | + } else if ([strongDelegate respondsToSelector:@selector(handleBDXTransferSessionEndForNodeID:controller:error:)]) { |
289 | 313 | dispatch_async(delegateQueue, ^{ |
290 | 314 | [strongDelegate handleBDXTransferSessionEndForNodeID:nodeId |
291 | 315 | controller:controller |
@@ -330,6 +354,9 @@ - (void)SetOtaImageTransferHandler:(MTROTAImageTransferHandler *)otaImageTransfe |
330 | 354 | MTROTAImageTransferHandlerWrapper * __weak weakWrapper = mOTAImageTransferHandlerWrapper; |
331 | 355 |
|
332 | 356 | auto respondWithBlock = ^(NSData * _Nullable data, BOOL isEOF) { |
| 357 | + if (data) { |
| 358 | + mNumBytesProcessed += data.length; |
| 359 | + } |
333 | 360 | [controller |
334 | 361 | asyncDispatchToMatterQueue:^() { |
335 | 362 | assertChipStackLockedByCurrentThread(); |
|
0 commit comments