LCOV - code coverage report
Current view: top level - adcore/epoll - adx_sock_epoll.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 91.4 % 58 53
Test Date: 2026-07-28 10:54:24 Functions: 100.0 % 10 10

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2025 Huawei Technologies Co., Ltd.
       3              :  * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
       4              :  * CANN Open Software License Agreement Version 2.0 (the "License").
       5              :  * Please refer to the License for details. You may not use this file except in compliance with the License.
       6              :  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
       7              :  * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
       8              :  * See LICENSE in the root of the software repository for the full text of the License.
       9              :  */
      10              : #include "adx_sock_epoll.h"
      11              : #include <sys/epoll.h>
      12              : #include "hdc_log.h"
      13              : #include "extra_config.h"
      14              : namespace Adx {
      15            7 : int32_t AdxSockEpoll::EpollCreate(const int32_t size)
      16              : {
      17            7 :     if (size <= 0) {
      18            1 :         IDE_LOGE("epoll create size(%d) input error", size);
      19            1 :         return IDE_DAEMON_ERROR;
      20              :     }
      21              : 
      22            6 :     epMaxSize_ = size;
      23            6 :     int32_t fd = epoll_create(DEFAULT_EPOLL_SIZE);
      24            6 :     if (fd < 0) {
      25            1 :         return IDE_DAEMON_ERROR;
      26              :     }
      27              : 
      28            5 :     ep_ = fd;
      29            5 :     return IDE_DAEMON_OK;
      30              : }
      31              : 
      32            1 : int32_t AdxSockEpoll::EpollDestroy()
      33              : {
      34            1 :     return IDE_DAEMON_OK;
      35              : }
      36            4 : int32_t AdxSockEpoll::EpollCtl(EpollHandle handle, EpollEvent &event, int32_t op)
      37              : {
      38            4 :     if (ep_ == -1 || handle == ADX_INVALID_HANDLE) {
      39            1 :         IDE_LOGE("sock epoll ctl input error");
      40            1 :         return IDE_DAEMON_ERROR;
      41              :     }
      42              : 
      43            3 :     auto fd = static_cast<int32_t>(handle);
      44            3 :     if (fd < 0) {
      45            0 :         IDE_LOGE("sock epoll ctl handle error");
      46            0 :         return IDE_DAEMON_ERROR;
      47              :     }
      48            3 :     struct epoll_event ev = {0};
      49            3 :     ev.events = EpollEventToHdcEvent(event.events);
      50            3 :     ev.data.fd = fd;
      51            3 :     int32_t ret = epoll_ctl(ep_, op, fd, &ev);
      52            3 :     if (ret < 0) {
      53            0 :         IDE_LOGE("sock epoll ctl process error %d", ret);
      54              :     }
      55            3 :     return IDE_DAEMON_OK;
      56              : }
      57              : 
      58            1 : int32_t AdxSockEpoll::EpollAdd(EpollHandle target, EpollEvent &event)
      59              : {
      60            1 :     return EpollCtl(target, event, EPOLL_CTL_ADD);
      61              : }
      62              : 
      63            1 : int32_t AdxSockEpoll::EpollDel(EpollHandle target, EpollEvent &event)
      64              : {
      65            1 :     return EpollCtl(target, event, EPOLL_CTL_DEL);
      66              : }
      67              : 
      68            3 : int32_t AdxSockEpoll::EpollWait(std::vector<EpollEvent> &events, int32_t size, int32_t timeout)
      69              : {
      70            3 :     if (ep_ < 0) {
      71            0 :         IDE_LOGW("epoll wait init");
      72            0 :         return IDE_DAEMON_ERROR;
      73              :     }
      74              : 
      75            3 :     struct epoll_event epEvent[DEFAULT_EPOLL_SIZE] = { {0} };
      76            3 :     int32_t ret = epoll_wait(ep_, epEvent, size, timeout);
      77            3 :     if (ret < 0) {
      78            2 :         IDE_LOGE("epoll wait process error");
      79            2 :         return IDE_DAEMON_ERROR;
      80              :     }
      81              : 
      82            2 :     for (int32_t i = 0; i < ret && i < epMaxSize_; i++) {
      83            1 :         events[i].events = HdcEventToEpollEvent(epEvent[i].events);
      84            1 :         events[i].data = epEvent[i].data.fd;
      85              :     }
      86              : 
      87            1 :     return ret;
      88              : }
      89              : 
      90            1 : int32_t AdxSockEpoll::EpollErrorHandle()
      91              : {
      92            1 :     return IDE_DAEMON_OK;
      93              : }
      94              : 
      95            1 : int32_t AdxSockEpoll::EpollGetSize()
      96              : {
      97            1 :     return epMaxSize_;
      98              : }
      99              : 
     100            3 : uint32_t AdxSockEpoll::EpollEventToHdcEvent(uint32_t events) const
     101              : {
     102            3 :     uint32_t transed = ((events & ADX_EPOLL_DATA_IN) != 0) ? EPOLLIN : 0;
     103            3 :     transed |= ((events & ADX_EPOLL_CONN_IN) != 0) ? EPOLLIN : 0;
     104            3 :     transed |= ((events & ADX_EPOLL_HANG_UP) != 0) ? EPOLLHUP : 0;
     105            3 :     return transed;
     106              : }
     107              : 
     108            1 : uint32_t AdxSockEpoll::HdcEventToEpollEvent(uint32_t events) const
     109              : {
     110            1 :     uint32_t transed = ((events & EPOLLIN) != 0) ? ADX_EPOLL_DATA_IN : 0;
     111            1 :     transed |= ((events & EPOLLIN) != 0) ? ADX_EPOLL_CONN_IN : 0;
     112            1 :     transed |= ((events & EPOLLHUP) != 0) ? ADX_EPOLL_HANG_UP : 0;
     113              : 
     114            1 :     return transed;
     115              : }
     116              : }
        

Generated by: LCOV version 2.0-1