From 35a85de7b7495878ae4dcb73449f18c28131496c Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期五, 03 二月 2023 17:17:16 +0800 Subject: [PATCH] add go test,complete --- ctest/main.c | 134 ++++++++++++++++++++++++++++---------------- 1 files changed, 85 insertions(+), 49 deletions(-) diff --git a/ctest/main.c b/ctest/main.c index 940becf..551ebc5 100644 --- a/ctest/main.c +++ b/ctest/main.c @@ -2,13 +2,17 @@ #include <string.h> #include <stdlib.h> #include <errno.h> +#include <sys/time.h> #include "shmparser/shmparser.h" static char* timestamp = "2023-1-31 10:05:56.998"; static char* cid = "cameraid"; static char* cname = "cameraname"; -static struct stimg pack_image(const int w, const int h, +static int printlog = 1; +static int savepic = 0; + +static struct stimg* pack_image(const int w, const int h, const unsigned char* data, const uint64_t size) { int width = w, height = h; @@ -21,22 +25,27 @@ static void print_image(void* shm, const char* file){ struct stimg* img = shm2image(shm); - char fmt[128] = {0}; - sprintf(fmt, "imag2 id [%%lu] data size [%%lu] width [%%d] height [%%d] " - "time [%%%d.%ds] cid [%%%d.%ds] cname [%%%d.%ds]", - img->timestamp_size, img->timestamp_size, - img->camera_id_size, img->camera_id_size, - img->camera_name_size, img->camera_name_size); + if (printlog){ + char fmt[128] = {0}; + sprintf(fmt, "imag2 id [%%lu] data size [%%lu] width [%%d] height [%%d] " + "time [%%%d.%ds] cid [%%%d.%ds] cname [%%%d.%ds]", + img->timestamp_size, img->timestamp_size, + img->camera_id_size, img->camera_id_size, + img->camera_name_size, img->camera_name_size); - printf(fmt, img->id, img->data_size, img->width, img->height, img->timestamp, img->camera_id, img->camera_name); - printf("\n"); + printf(fmt, img->id, img->data_size, img->width, img->height, img->timestamp, img->camera_id, img->camera_name); + printf("\n"); + } - // FILE* fp = fopen(file, "wb"); - // long pos = 0; - // while (pos != img->data_size) { - // pos += fwrite(img->data+pos, 1, img->data_size-pos, fp); - // } - // fclose(fp); + if (savepic){ + FILE* fp = fopen(file, "wb"); + long pos = 0; + while (pos != img->data_size) { + pos += fwrite(img->data+pos, 1, img->data_size-pos, fp); + } + fclose(fp); + } + free_stimg(img); } @@ -64,7 +73,7 @@ fclose(fp); } -static void test_image(char* shm, const int order){ +static void test_image(void* shm, const int order){ const char* pics[] = { "../opic/720x576.jpg", @@ -85,8 +94,9 @@ }else{ w = 1920, h = 1080; } - struct stimg img = pack_image(w, h, d, s); - image2shm(shm, &img); + struct stimg* img = pack_image(w, h, d, s); + image2shm(shm, img); + free_stimg(img); free(d); char file[128] = {0}; sprintf(file, "../npic/%dx%d.%d", w, h, i); @@ -101,8 +111,9 @@ }else{ w = 1920, h = 1080; } - struct stimg img = pack_image(w, h, d, s); - image2shm(shm, &img); + struct stimg* img = pack_image(w, h, d, s); + image2shm(shm, img); + free_stimg(img); free(d); char file[128] = {0}; sprintf(file, "../npic/%dx%d.%d", w, h, i); @@ -112,35 +123,53 @@ static void test_rule(void* shm); +static int test_once(void* shm, const int count){ + + struct timeval s, e; + gettimeofday(&s, NULL); + + for(int i = 0; i < count; i++) + test_rule(shm); + + for(int i = 0; i < count; i++){ + test_image(shm, 0); + // test_image(shm, 1); + } + for(int i = 0; i < count; i++){ + // test_image(shm, 0); + test_image(shm, 1); + } + for(int i = 0; i < count; i++){ + test_image(shm, 0); + test_image(shm, 1); + } + for(int i = 0; i < count; i++){ + test_image(shm, 1); + test_image(shm, 0); + } + + for(int i = 0; i < count; i++) + test_rule(shm); + + gettimeofday(&e, NULL); + + return (e.tv_sec- s.tv_sec)*1000 + (e.tv_usec - s.tv_usec)/1000; +} + int main(int argc, char const *argv[]) { char* shm = (char*)malloc(10*1024*1024); - char* orig = shm; - for(int i = 0; i < 1000; i++) - test_rule(shm); - for(int i = 0; i < 1000; i++){ - // test_image(shm, 0); - test_image(shm, 1); + int cntPerTest = 1000; + int cntRun = 1; + int avg = 0; + for(int i = 1; i <= cntRun; i++){ + int tm = test_once(shm, cntPerTest); + if (avg == 0) avg = tm; + else avg = (double)avg / (double) i * (double)(i-1) + (double)tm / (double)i; } - for(int i = 0; i < 1000; i++){ - // test_image(shm, 0); - test_image(shm, 1); - } - for(int i = 0; i < 1000; i++){ - test_image(shm, 0); - test_image(shm, 1); - } - for(int i = 0; i < 1000; i++){ - test_image(shm, 1); - test_image(shm, 0); - } - printf("shm %p next address %p\n", orig, shm); - // char* shm2 = (char*)malloc(10*1024*1024); - char* shm2 = shm; - for(int i = 0; i < 1000; i++) - test_rule(shm2); + printf("run %d time test, each %d use %d ms\n", cntPerTest*cntRun, cntPerTest, avg); return 0; } @@ -149,7 +178,7 @@ Target* tgts = (Target*)calloc(size, sizeof(Target)); for(int i = 0; i < size; i++){ tgts[i].id = i + 1002; - tgts[i].confidence = 99; + tgts[i].confidence = 99-i; TRect rc = {0,0,1920,1080}; memcpy(&tgts[i].rect, &rc, sizeof(TRect)); memcpy(tgts[i].type, "pack_target", 11); @@ -191,6 +220,10 @@ } for(size_t i = 0; i < sdkcnt; i++){ + for(int j = 0; j < resarray[i].count; j++){ + free(resarray[i].targets[j].feature); + free(resarray[i].targets[j].attribute); + } free(resarray[i].targets); } free(resarray); @@ -205,18 +238,21 @@ static void print_rule(void* shm){ struct strule* rule = shm2rule(shm); - printf("<rule> handletrack [%s] datatype [%s]\n", rule->handletrack, rule->datatype); + if (printlog) + printf("<rule> handletrack [%s] datatype [%s]\n", rule->handletrack, rule->datatype); for(int i = 0; i < rule->sdk_count; i++){ struct stsdk* sdk = &rule->sdk[i]; - printf("\t<sdk> [%d] type [%s] tgts [%d] id [%s] name [%s] timestamp [%s]\n", - i, sdk->sdktype, sdk->tgt_count, sdk->sdkid, sdk->sdkname, sdk->timestamp); + if (printlog){ + printf("\t<sdk> [%d] type [%s] tgts [%d] id [%s] name [%s] timestamp [%s]\n", + i, sdk->sdktype, sdk->tgt_count, sdk->sdkid, sdk->sdkname, sdk->timestamp); - print_targets(sdk->tgt, sdk->tgt_count); + print_targets(sdk->tgt, sdk->tgt_count); + } } - free(rule); + free_strule(rule); } static void test_rule(void* shm){ -- Gitblit v1.8.0