138 lines
3.9 KiB
C
138 lines
3.9 KiB
C
|
/*
|
||
|
* Copyright 2015 Rockchip Electronics Co. LTD
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
#define MODULE_TAG "mpp_eventfd_test"
|
||
|
|
||
|
#include "mpp_log.h"
|
||
|
#include "mpp_time.h"
|
||
|
#include "mpp_common.h"
|
||
|
#include "mpp_thread.h"
|
||
|
#include "mpp_eventfd.h"
|
||
|
|
||
|
#define WR_VAL 1
|
||
|
#define RD_VAL 10
|
||
|
|
||
|
static RK_S32 data_fd = -1;
|
||
|
static RK_S32 sync_fd = -1;
|
||
|
static RK_U64 wr_val_base = WR_VAL;
|
||
|
static RK_U64 rd_val_base = RD_VAL;
|
||
|
static RK_U64 wr_val = WR_VAL;
|
||
|
static RK_U64 rd_val = RD_VAL;
|
||
|
static RK_S32 wr_ret = -1;
|
||
|
static RK_S32 rd_ret = -1;
|
||
|
static RK_S64 wr_timeout = -1;
|
||
|
static RK_S64 rd_timeout = -1;
|
||
|
|
||
|
void reset_test()
|
||
|
{
|
||
|
wr_val = wr_val_base;
|
||
|
rd_val = rd_val_base;
|
||
|
wr_ret = -1;
|
||
|
rd_ret = -1;
|
||
|
rd_val_base++;
|
||
|
|
||
|
mpp_eventfd_write(data_fd, 0);
|
||
|
mpp_eventfd_read(data_fd, NULL, 0);
|
||
|
|
||
|
mpp_log("eventfd test on writing %lld -> %lld\n", wr_val, rd_val);
|
||
|
}
|
||
|
|
||
|
void *thread_read(void *arg)
|
||
|
{
|
||
|
(void) arg;
|
||
|
mpp_eventfd_write(sync_fd, 1);
|
||
|
|
||
|
rd_ret = mpp_eventfd_read(data_fd, &rd_val, rd_timeout);
|
||
|
mpp_log("eventfd read %d timeout %d ret %lld val %lld\n", data_fd, rd_timeout, rd_ret, rd_val);
|
||
|
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
pthread_t td;
|
||
|
|
||
|
mpp_log("eventfd test start\n");
|
||
|
|
||
|
data_fd = mpp_eventfd_get(0);
|
||
|
sync_fd = mpp_eventfd_get(0);
|
||
|
|
||
|
mpp_log("eventfd get data_fd %d sync_fd %d\n", data_fd, sync_fd);
|
||
|
|
||
|
reset_test();
|
||
|
rd_timeout = -1;
|
||
|
wr_timeout = 0;
|
||
|
|
||
|
pthread_create(&td, NULL, thread_read, NULL);
|
||
|
mpp_eventfd_read(sync_fd, NULL, -1);
|
||
|
mpp_log("eventfd write %d val %lld\n", data_fd, wr_val);
|
||
|
wr_ret = mpp_eventfd_write(data_fd, wr_val);
|
||
|
pthread_join(td, NULL);
|
||
|
mpp_log("eventfd block mode test wr: %lld ret %d rd: %lld ret %d - %s\n",
|
||
|
wr_val, wr_ret, rd_val, rd_ret,
|
||
|
(wr_val == rd_val) ? "success" : "failed");
|
||
|
|
||
|
reset_test();
|
||
|
rd_timeout = 0;
|
||
|
wr_timeout = 100;
|
||
|
|
||
|
pthread_create(&td, NULL, thread_read, NULL);
|
||
|
mpp_eventfd_read(sync_fd, NULL, -1);
|
||
|
msleep(wr_timeout);
|
||
|
mpp_log("eventfd write %d val %lld\n", data_fd, wr_val);
|
||
|
wr_ret = mpp_eventfd_write(data_fd, wr_val);
|
||
|
pthread_join(td, NULL);
|
||
|
mpp_log("eventfd non-block mode test wr: %lld ret %d rd: %lld ret %d - %s\n",
|
||
|
wr_val, wr_ret, rd_val, rd_ret,
|
||
|
(wr_val != rd_val) ? "success" : "failed");
|
||
|
|
||
|
reset_test();
|
||
|
rd_timeout = 100;
|
||
|
wr_timeout = 1;
|
||
|
|
||
|
pthread_create(&td, NULL, thread_read, NULL);
|
||
|
mpp_eventfd_read(sync_fd, NULL, -1);
|
||
|
msleep(wr_timeout);
|
||
|
mpp_log("eventfd write %d val %lld\n", data_fd, wr_val);
|
||
|
wr_ret = mpp_eventfd_write(data_fd, wr_val);
|
||
|
pthread_join(td, NULL);
|
||
|
mpp_log("eventfd timeout mode test wr: %lld ret %d rd: %lld ret %d - %s\n",
|
||
|
wr_val, wr_ret, rd_val, rd_ret,
|
||
|
(wr_val == rd_val) ? "success" : "failed");
|
||
|
|
||
|
reset_test();
|
||
|
rd_timeout = 1;
|
||
|
wr_timeout = 100;
|
||
|
|
||
|
pthread_create(&td, NULL, thread_read, NULL);
|
||
|
mpp_eventfd_read(sync_fd, NULL, -1);
|
||
|
msleep(wr_timeout);
|
||
|
mpp_log("eventfd write %d val %lld\n", data_fd, wr_val);
|
||
|
wr_ret = mpp_eventfd_write(data_fd, wr_val);
|
||
|
pthread_join(td, NULL);
|
||
|
mpp_log("eventfd timeout mode test wr: %lld ret %d rd: %lld ret %d - %s\n",
|
||
|
wr_val, wr_ret, rd_val, rd_ret,
|
||
|
(wr_val != rd_val) ? "success" : "failed");
|
||
|
|
||
|
mpp_eventfd_put(data_fd);
|
||
|
mpp_eventfd_put(sync_fd);
|
||
|
|
||
|
mpp_log("eventfd test done\n");
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|