Test reading with and without malloc
This commit is contained in:
parent
4b905a56a5
commit
3a0917ed58
@ -33,12 +33,24 @@ struct reptester {
|
|||||||
reptest_results results;
|
reptest_results results;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct reptest_func {
|
enum alloc_type {
|
||||||
const char *name;
|
ALLOC_TYPE_WITHOUT_MALLOC,
|
||||||
void (*func)(reptester *tester);
|
ALLOC_TYPE_WITH_MALLOC,
|
||||||
|
|
||||||
|
COUNT_ALLOC_TYPE,
|
||||||
};
|
};
|
||||||
|
|
||||||
void run_func_test(reptester *tester, reptest_func func_obj);
|
typedef void (*reptest_func)(reptester *tester, alloc_type type);
|
||||||
|
|
||||||
|
struct func_data {
|
||||||
|
const char *names[COUNT_ALLOC_TYPE];
|
||||||
|
reptest_func func;
|
||||||
|
};
|
||||||
|
|
||||||
|
void handle_alloc(reptester *tester, alloc_type type);
|
||||||
|
void handle_free(reptester *tester, alloc_type type);
|
||||||
|
void run_func_test(reptester *tester, reptest_func func, const char *func_name,
|
||||||
|
alloc_type type);
|
||||||
void print_results(reptester *tester, const char *name);
|
void print_results(reptester *tester, const char *name);
|
||||||
|
|
||||||
#endif // !REPTESTER_H
|
#endif // !REPTESTER_H
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
#define ARR_LEN(ARR) sizeof(ARR) / sizeof(*ARR)
|
#define ARR_LEN(ARR) sizeof(ARR) / sizeof(*ARR)
|
||||||
|
|
||||||
void test_fread(reptester *tester);
|
void test_fread(reptester *tester, alloc_type type);
|
||||||
void test_read(reptester *tester);
|
void test_read(reptester *tester, alloc_type type);
|
||||||
u64 get_file_length(FILE *fp);
|
u64 get_file_length(FILE *fp);
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
@ -53,7 +53,8 @@ int main(int argc, char *argv[]) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
reptest_func funcs[] = {{"FREAD", test_fread}, {"READ", test_read}};
|
func_data funcs[] = {{{"READ", "READ WITH MALLOC"}, test_read},
|
||||||
|
{{"FREAD", "FREAD WITH MALLOC"}, test_fread}};
|
||||||
|
|
||||||
tester.params.read_size = get_file_length(fp);
|
tester.params.read_size = get_file_length(fp);
|
||||||
tester.params.read_count = 1;
|
tester.params.read_count = 1;
|
||||||
@ -62,7 +63,9 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
for (u64 i = 0; i < waves; ++i) {
|
for (u64 i = 0; i < waves; ++i) {
|
||||||
for (u64 j = 0; j < ARR_LEN(funcs); ++j) {
|
for (u64 j = 0; j < ARR_LEN(funcs); ++j) {
|
||||||
run_func_test(&tester, funcs[j]);
|
for (u64 k = 0; k < COUNT_ALLOC_TYPE; ++k) {
|
||||||
|
run_func_test(&tester, funcs[j].func, funcs[j].names[k], (alloc_type)k);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,12 +76,14 @@ int main(int argc, char *argv[]) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_fread(reptester *tester) {
|
void test_fread(reptester *tester, alloc_type type) {
|
||||||
FILE *fp = fopen(tester->params.filename, "rb");
|
FILE *fp = fopen(tester->params.filename, "rb");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handle_alloc(tester, type);
|
||||||
|
|
||||||
u64 start = read_cpu_timer();
|
u64 start = read_cpu_timer();
|
||||||
u64 obj_count = fread(tester->params.buffer, tester->params.read_size,
|
u64 obj_count = fread(tester->params.buffer, tester->params.read_size,
|
||||||
tester->params.read_count, fp);
|
tester->params.read_count, fp);
|
||||||
@ -93,15 +98,19 @@ void test_fread(reptester *tester) {
|
|||||||
read_time,
|
read_time,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handle_free(tester, type);
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_read(reptester *tester) {
|
void test_read(reptester *tester, alloc_type type) {
|
||||||
FILE *fp = fopen(tester->params.filename, "rb");
|
FILE *fp = fopen(tester->params.filename, "rb");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handle_alloc(tester, type);
|
||||||
|
|
||||||
i32 fd = fileno(fp);
|
i32 fd = fileno(fp);
|
||||||
|
|
||||||
u64 start = read_cpu_timer();
|
u64 start = read_cpu_timer();
|
||||||
@ -116,6 +125,8 @@ void test_read(reptester *tester) {
|
|||||||
read_time,
|
read_time,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handle_free(tester, type);
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,39 @@
|
|||||||
#include "repetition_testing/reptester.h"
|
#include "repetition_testing/reptester.h"
|
||||||
#include "profiler/timer.h"
|
#include "profiler/timer.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
void run_func_test(reptester *tester, reptest_func func_obj) {
|
void handle_alloc(reptester *tester, alloc_type type) {
|
||||||
|
switch (type) {
|
||||||
|
case ALLOC_TYPE_WITH_MALLOC:
|
||||||
|
if (!(tester->params.buffer)) {
|
||||||
|
tester->params.buffer = (char *)malloc(tester->params.read_size + 1);
|
||||||
|
memset(tester->params.buffer, 0, tester->params.read_size + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handle_free(reptester *tester, alloc_type type) {
|
||||||
|
switch (type) {
|
||||||
|
case ALLOC_TYPE_WITH_MALLOC:
|
||||||
|
if (tester->params.buffer) {
|
||||||
|
free(tester->params.buffer);
|
||||||
|
tester->params.buffer = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void run_func_test(reptester *tester, reptest_func func, const char *func_name,
|
||||||
|
alloc_type type) {
|
||||||
tester->test_start_time = read_cpu_timer();
|
tester->test_start_time = read_cpu_timer();
|
||||||
tester->test_time_secs = 0.0;
|
tester->test_time_secs = 0.0;
|
||||||
tester->current_run = 1;
|
tester->current_run = 1;
|
||||||
@ -12,8 +43,13 @@ void run_func_test(reptester *tester, reptest_func func_obj) {
|
|||||||
tester->total = 0;
|
tester->total = 0;
|
||||||
tester->results = {};
|
tester->results = {};
|
||||||
|
|
||||||
|
if (type == ALLOC_TYPE_WITHOUT_MALLOC && !(tester->params.buffer)) {
|
||||||
|
tester->params.buffer = (char *)malloc(tester->params.read_size + 1);
|
||||||
|
memset(tester->params.buffer, 0, tester->params.read_size + 1);
|
||||||
|
}
|
||||||
|
|
||||||
while (tester->test_time_secs <= tester->wait_time_secs) {
|
while (tester->test_time_secs <= tester->wait_time_secs) {
|
||||||
func_obj.func(tester);
|
func(tester, type);
|
||||||
|
|
||||||
if (tester->results.bytes_read <
|
if (tester->results.bytes_read <
|
||||||
tester->params.read_size * tester->params.read_count) {
|
tester->params.read_size * tester->params.read_count) {
|
||||||
@ -39,7 +75,12 @@ void run_func_test(reptester *tester, reptest_func func_obj) {
|
|||||||
++(tester->current_run);
|
++(tester->current_run);
|
||||||
}
|
}
|
||||||
|
|
||||||
print_results(tester, func_obj.name);
|
if (type == ALLOC_TYPE_WITHOUT_MALLOC && tester->params.buffer) {
|
||||||
|
free(tester->params.buffer);
|
||||||
|
tester->params.buffer = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
print_results(tester, func_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_results(reptester *tester, const char *name) {
|
void print_results(reptester *tester, const char *name) {
|
||||||
|
Loading…
Reference in New Issue
Block a user