Matter SDK Coverage Report
Current view: top level - system - SystemStats.cpp (source / functions) Coverage Total Hit
Test: SHA:b879ecb8e99e175eea0a293a888bda853da2b19c Lines: 22.2 % 18 4
Test Date: 2025-01-17 19:00:11 Functions: 40.0 % 5 2

            Line data    Source code
       1              : /*
       2              :  *
       3              :  *    Copyright (c) 2020 Project CHIP Authors
       4              :  *    Copyright (c) 2016-2017 Nest Labs, Inc.
       5              :  *
       6              :  *    Licensed under the Apache License, Version 2.0 (the "License");
       7              :  *    you may not use this file except in compliance with the License.
       8              :  *    You may obtain a copy of the License at
       9              :  *
      10              :  *        http://www.apache.org/licenses/LICENSE-2.0
      11              :  *
      12              :  *    Unless required by applicable law or agreed to in writing, software
      13              :  *    distributed under the License is distributed on an "AS IS" BASIS,
      14              :  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      15              :  *    See the License for the specific language governing permissions and
      16              :  *    limitations under the License.
      17              :  */
      18              : 
      19              : /**
      20              :  * @file
      21              :  *  This file implements the CHIP API to collect statistics
      22              :  *  on the state of CHIP, Inet and System resources
      23              :  */
      24              : 
      25              : // Include local headers
      26              : #include <system/SystemTimer.h>
      27              : 
      28              : // Include module header
      29              : #include <system/SystemStats.h>
      30              : 
      31              : #include <lib/support/SafeInt.h>
      32              : #include <platform/LockTracker.h>
      33              : 
      34              : #include <string.h>
      35              : 
      36              : namespace chip {
      37              : namespace System {
      38              : namespace Stats {
      39              : 
      40              : static const Label sStatsStrings[chip::System::Stats::kNumEntries] = {
      41              : #if CHIP_SYSTEM_CONFIG_USE_LWIP && CHIP_SYSTEM_CONFIG_LWIP_PBUF_FROM_CUSTOM_POOL
      42              : #define LWIP_PBUF_MEMPOOL(name, num, payload, desc) "SystemLayer_Num" desc,
      43              : #include "lwippools.h"
      44              : #undef LWIP_PBUF_MEMPOOL
      45              : #else
      46              :     "Packet Buffers",
      47              : #endif
      48              :     "Timers",
      49              : #if INET_CONFIG_NUM_TCP_ENDPOINTS
      50              :     "TCP endpoints",
      51              : #endif
      52              : #if INET_CONFIG_NUM_UDP_ENDPOINTS
      53              :     "UDP endpoints",
      54              : #endif
      55              :     "Exchange contexts",
      56              :     "Unsolicited message handlers",
      57              :     "Platform events",
      58              : };
      59              : 
      60              : count_t sResourcesInUse[kNumEntries];
      61              : count_t sHighWatermarks[kNumEntries];
      62              : 
      63            0 : const Label * GetStrings()
      64              : {
      65            0 :     return sStatsStrings;
      66              : }
      67              : 
      68     13407081 : count_t * GetResourcesInUse()
      69              : {
      70     13407081 :     return sResourcesInUse;
      71              : }
      72              : 
      73      6704707 : count_t * GetHighWatermarks()
      74              : {
      75      6704707 :     return sHighWatermarks;
      76              : }
      77              : 
      78            0 : void UpdateSnapshot(Snapshot & aSnapshot)
      79              : {
      80            0 :     memcpy(&aSnapshot.mResourcesInUse, &sResourcesInUse, sizeof(aSnapshot.mResourcesInUse));
      81            0 :     memcpy(&aSnapshot.mHighWatermarks, &sHighWatermarks, sizeof(aSnapshot.mHighWatermarks));
      82              : 
      83              :     SYSTEM_STATS_UPDATE_LWIP_PBUF_COUNTS();
      84            0 : }
      85              : 
      86            0 : bool Difference(Snapshot & result, Snapshot & after, Snapshot & before)
      87              : {
      88              :     int i;
      89            0 :     bool leak = false;
      90              : 
      91            0 :     for (i = 0; i < kNumEntries; i++)
      92              :     {
      93              :         // TODO: These casts can be bogus.  https://github.com/project-chip/connectedhomeip/issues/2949
      94            0 :         result.mResourcesInUse[i] = static_cast<count_t>(after.mResourcesInUse[i] - before.mResourcesInUse[i]);
      95            0 :         result.mHighWatermarks[i] = static_cast<count_t>(after.mHighWatermarks[i] - before.mHighWatermarks[i]);
      96              : 
      97            0 :         if (result.mResourcesInUse[i] > 0)
      98              :         {
      99            0 :             leak = true;
     100              :         }
     101              :     }
     102              : 
     103            0 :     return leak;
     104              : }
     105              : 
     106              : #if CHIP_SYSTEM_CONFIG_USE_LWIP && LWIP_STATS && MEMP_STATS
     107              : 
     108              : void UpdateLwipPbufCounts(void)
     109              : {
     110              : #if CHIP_SYSTEM_CONFIG_LWIP_PBUF_FROM_CUSTOM_POOL
     111              :     size_t lwip_pool_idx = PBUF_CUSTOM_POOL_IDX_END;
     112              :     size_t system_idx    = 0;
     113              : 
     114              :     while (lwip_pool_idx <= PBUF_CUSTOM_POOL_IDX_START)
     115              :     {
     116              :         chip::System::Stats::GetResourcesInUse()[system_idx] = MEMP_STATS_GET(used, lwip_pool_idx);
     117              :         chip::System::Stats::GetHighWatermarks()[system_idx] = MEMP_STATS_GET(max, lwip_pool_idx);
     118              :         lwip_pool_idx++;
     119              :         system_idx++;
     120              :     }
     121              : 
     122              : #else // CHIP_SYSTEM_CONFIG_LWIP_PBUF_FROM_CUSTOM_POOL
     123              : 
     124              :     chip::System::Stats::GetResourcesInUse()[kSystemLayer_NumPacketBufs] = MEMP_STATS_GET(used, MEMP_PBUF_POOL);
     125              :     chip::System::Stats::GetHighWatermarks()[kSystemLayer_NumPacketBufs] = MEMP_STATS_GET(max, MEMP_PBUF_POOL);
     126              : 
     127              : #endif // CHIP_SYSTEM_CONFIG_LWIP_PBUF_FROM_CUSTOM_POOL
     128              : }
     129              : #endif // CHIP_SYSTEM_CONFIG_USE_LWIP && LWIP_STATS && MEMP_STATS
     130              : 
     131              : } // namespace Stats
     132              : } // namespace System
     133              : } // namespace chip
        

Generated by: LCOV version 2.0-1