Skip to content

Commit c63f9b8

Browse files
authored
Merge pull request #448 from vinser52/svinogra_ipc_tests
Improve tests for IPC
2 parents 167898c + bf87d40 commit c63f9b8

9 files changed

+182
-116
lines changed

test/common/pool_trace.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,8 @@
88
#include "pool_trace.h"
99
#include <umf/memory_pool_ops.h>
1010

11-
typedef struct umf_pool_trace_params_priv {
12-
umf_memory_pool_handle_t hUpstreamPool;
13-
void (*trace)(const char *);
14-
} umf_pool_trace_params_priv_t;
15-
1611
typedef struct trace_pool {
17-
umf_pool_trace_params_priv_t params;
12+
umf_pool_trace_params_t params;
1813
} trace_pool_t;
1914

2015
static umf_result_t traceInitialize(umf_memory_provider_handle_t provider,
@@ -26,7 +21,8 @@ static umf_result_t traceInitialize(umf_memory_provider_handle_t provider,
2621

2722
umf_pool_trace_params_t *pub_params = params;
2823
trace_pool->params.hUpstreamPool = pub_params->hUpstreamPool;
29-
trace_pool->params.trace = pub_params->trace;
24+
trace_pool->params.trace_context = pub_params->trace_context;
25+
trace_pool->params.trace_handler = pub_params->trace_handler;
3026

3127
(void)provider;
3228
assert(provider);
@@ -40,50 +36,56 @@ static void traceFinalize(void *pool) { free(pool); }
4036
static void *traceMalloc(void *pool, size_t size) {
4137
trace_pool_t *trace_pool = (trace_pool_t *)pool;
4238

43-
trace_pool->params.trace("malloc");
39+
trace_pool->params.trace_handler(trace_pool->params.trace_context,
40+
"malloc");
4441
return umfPoolMalloc(trace_pool->params.hUpstreamPool, size);
4542
}
4643

4744
static void *traceCalloc(void *pool, size_t num, size_t size) {
4845
trace_pool_t *trace_pool = (trace_pool_t *)pool;
4946

50-
trace_pool->params.trace("calloc");
47+
trace_pool->params.trace_handler(trace_pool->params.trace_context,
48+
"calloc");
5149
return umfPoolCalloc(trace_pool->params.hUpstreamPool, num, size);
5250
}
5351

5452
static void *traceRealloc(void *pool, void *ptr, size_t size) {
5553
trace_pool_t *trace_pool = (trace_pool_t *)pool;
5654

57-
trace_pool->params.trace("realloc");
55+
trace_pool->params.trace_handler(trace_pool->params.trace_context,
56+
"realloc");
5857
return umfPoolRealloc(trace_pool->params.hUpstreamPool, ptr, size);
5958
}
6059

6160
static void *traceAlignedMalloc(void *pool, size_t size, size_t alignment) {
6261
trace_pool_t *trace_pool = (trace_pool_t *)pool;
6362

64-
trace_pool->params.trace("aligned_malloc");
63+
trace_pool->params.trace_handler(trace_pool->params.trace_context,
64+
"aligned_malloc");
6565
return umfPoolAlignedMalloc(trace_pool->params.hUpstreamPool, size,
6666
alignment);
6767
}
6868

6969
static size_t traceMallocUsableSize(void *pool, void *ptr) {
7070
trace_pool_t *trace_pool = (trace_pool_t *)pool;
7171

72-
trace_pool->params.trace("malloc_usable_size");
72+
trace_pool->params.trace_handler(trace_pool->params.trace_context,
73+
"malloc_usable_size");
7374
return umfPoolMallocUsableSize(trace_pool->params.hUpstreamPool, ptr);
7475
}
7576

7677
static umf_result_t traceFree(void *pool, void *ptr) {
7778
trace_pool_t *trace_pool = (trace_pool_t *)pool;
7879

79-
trace_pool->params.trace("free");
80+
trace_pool->params.trace_handler(trace_pool->params.trace_context, "free");
8081
return umfPoolFree(trace_pool->params.hUpstreamPool, ptr);
8182
}
8283

8384
static umf_result_t traceGetLastStatus(void *pool) {
8485
trace_pool_t *trace_pool = (trace_pool_t *)pool;
8586

86-
trace_pool->params.trace("get_last_native_error");
87+
trace_pool->params.trace_handler(trace_pool->params.trace_context,
88+
"get_last_native_error");
8789
return umfPoolGetLastAllocationError(trace_pool->params.hUpstreamPool);
8890
}
8991

test/common/pool_trace.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
extern "C" {
1212
#endif
1313

14+
typedef void (*trace_handler_t)(void *, const char *);
1415
typedef struct umf_pool_trace_params {
1516
umf_memory_pool_handle_t hUpstreamPool;
16-
void (*trace)(const char *);
17+
void *trace_context;
18+
trace_handler_t trace_handler;
1719
} umf_pool_trace_params_t;
1820

1921
extern umf_memory_pool_ops_t UMF_TRACE_POOL_OPS;

test/common/provider_trace.c

Lines changed: 70 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -6,171 +6,186 @@
66
#include <stdlib.h>
77

88
#include "provider_trace.h"
9+
#include <umf/memory_provider.h>
910
#include <umf/memory_provider_ops.h>
1011

11-
typedef struct umf_provider_trace_params_priv_t {
12-
umf_memory_provider_handle_t hUpstreamProvider;
13-
void (*trace)(const char *);
14-
} umf_provider_trace_params_priv_t;
15-
1612
static umf_result_t traceInitialize(void *params, void **pool) {
17-
umf_provider_trace_params_priv_t *trace_pool =
18-
(umf_provider_trace_params_priv_t *)malloc(
19-
sizeof(umf_provider_trace_params_priv_t));
13+
umf_provider_trace_params_t *trace_pool =
14+
(umf_provider_trace_params_t *)malloc(
15+
sizeof(umf_provider_trace_params_t));
2016
if (NULL == trace_pool) {
2117
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY;
2218
}
2319

2420
umf_provider_trace_params_t *pub_params = params;
2521
trace_pool->hUpstreamProvider = pub_params->hUpstreamProvider;
26-
trace_pool->trace = pub_params->trace;
22+
trace_pool->own_upstream = pub_params->own_upstream;
23+
trace_pool->trace_context = pub_params->trace_context;
24+
trace_pool->trace_handler = pub_params->trace_handler;
2725

2826
*pool = trace_pool;
2927

3028
return UMF_RESULT_SUCCESS;
3129
}
3230

33-
static void traceFinalize(void *pool) { free(pool); }
31+
static void traceFinalize(void *provider) {
32+
umf_provider_trace_params_t *traceProvider =
33+
(umf_provider_trace_params_t *)provider;
34+
if (traceProvider->own_upstream) {
35+
umfMemoryProviderDestroy(traceProvider->hUpstreamProvider);
36+
}
37+
free(provider);
38+
}
3439

3540
static umf_result_t traceAlloc(void *provider, size_t size, size_t alignment,
3641
void **ptr) {
37-
umf_provider_trace_params_priv_t *traceProvider =
38-
(umf_provider_trace_params_priv_t *)provider;
42+
umf_provider_trace_params_t *traceProvider =
43+
(umf_provider_trace_params_t *)provider;
3944

40-
traceProvider->trace("alloc");
45+
traceProvider->trace_handler(traceProvider->trace_context, "alloc");
4146
return umfMemoryProviderAlloc(traceProvider->hUpstreamProvider, size,
4247
alignment, ptr);
4348
}
4449

4550
static umf_result_t traceFree(void *provider, void *ptr, size_t size) {
46-
umf_provider_trace_params_priv_t *traceProvider =
47-
(umf_provider_trace_params_priv_t *)provider;
51+
umf_provider_trace_params_t *traceProvider =
52+
(umf_provider_trace_params_t *)provider;
4853

49-
traceProvider->trace("free");
54+
traceProvider->trace_handler(traceProvider->trace_context, "free");
5055
return umfMemoryProviderFree(traceProvider->hUpstreamProvider, ptr, size);
5156
}
5257

5358
static void traceGetLastError(void *provider, const char **ppMsg,
5459
int32_t *pError) {
55-
umf_provider_trace_params_priv_t *traceProvider =
56-
(umf_provider_trace_params_priv_t *)provider;
60+
umf_provider_trace_params_t *traceProvider =
61+
(umf_provider_trace_params_t *)provider;
5762

58-
traceProvider->trace("get_last_native_error");
63+
traceProvider->trace_handler(traceProvider->trace_context,
64+
"get_last_native_error");
5965
umfMemoryProviderGetLastNativeError(traceProvider->hUpstreamProvider, ppMsg,
6066
pError);
6167
}
6268

6369
static umf_result_t traceGetRecommendedPageSize(void *provider, size_t size,
6470
size_t *pageSize) {
65-
umf_provider_trace_params_priv_t *traceProvider =
66-
(umf_provider_trace_params_priv_t *)provider;
71+
umf_provider_trace_params_t *traceProvider =
72+
(umf_provider_trace_params_t *)provider;
6773

68-
traceProvider->trace("get_recommended_page_size");
74+
traceProvider->trace_handler(traceProvider->trace_context,
75+
"get_recommended_page_size");
6976
return umfMemoryProviderGetRecommendedPageSize(
7077
traceProvider->hUpstreamProvider, size, pageSize);
7178
}
7279

7380
static umf_result_t traceGetPageSize(void *provider, void *ptr,
7481

7582
size_t *pageSize) {
76-
umf_provider_trace_params_priv_t *traceProvider =
77-
(umf_provider_trace_params_priv_t *)provider;
83+
umf_provider_trace_params_t *traceProvider =
84+
(umf_provider_trace_params_t *)provider;
7885

79-
traceProvider->trace("get_min_page_size");
86+
traceProvider->trace_handler(traceProvider->trace_context,
87+
"get_min_page_size");
8088
return umfMemoryProviderGetMinPageSize(traceProvider->hUpstreamProvider,
8189
ptr, pageSize);
8290
}
8391

8492
static const char *traceName(void *provider) {
85-
umf_provider_trace_params_priv_t *traceProvider =
86-
(umf_provider_trace_params_priv_t *)provider;
93+
umf_provider_trace_params_t *traceProvider =
94+
(umf_provider_trace_params_t *)provider;
8795

88-
traceProvider->trace("name");
96+
traceProvider->trace_handler(traceProvider->trace_context, "name");
8997
return umfMemoryProviderGetName(traceProvider->hUpstreamProvider);
9098
}
9199

92100
static umf_result_t tracePurgeLazy(void *provider, void *ptr, size_t size) {
93-
umf_provider_trace_params_priv_t *traceProvider =
94-
(umf_provider_trace_params_priv_t *)provider;
101+
umf_provider_trace_params_t *traceProvider =
102+
(umf_provider_trace_params_t *)provider;
95103

96-
traceProvider->trace("purge_lazy");
104+
traceProvider->trace_handler(traceProvider->trace_context, "purge_lazy");
97105
return umfMemoryProviderPurgeLazy(traceProvider->hUpstreamProvider, ptr,
98106
size);
99107
}
100108

101109
static umf_result_t tracePurgeForce(void *provider, void *ptr, size_t size) {
102-
umf_provider_trace_params_priv_t *traceProvider =
103-
(umf_provider_trace_params_priv_t *)provider;
110+
umf_provider_trace_params_t *traceProvider =
111+
(umf_provider_trace_params_t *)provider;
104112

105-
traceProvider->trace("purge_force");
113+
traceProvider->trace_handler(traceProvider->trace_context, "purge_force");
106114
return umfMemoryProviderPurgeForce(traceProvider->hUpstreamProvider, ptr,
107115
size);
108116
}
109117

110118
static umf_result_t traceAllocationMerge(void *provider, void *lowPtr,
111119
void *highPtr, size_t totalSize) {
112-
umf_provider_trace_params_priv_t *traceProvider =
113-
(umf_provider_trace_params_priv_t *)provider;
120+
umf_provider_trace_params_t *traceProvider =
121+
(umf_provider_trace_params_t *)provider;
114122

115-
traceProvider->trace("allocation_merge");
123+
traceProvider->trace_handler(traceProvider->trace_context,
124+
"allocation_merge");
116125
return umfMemoryProviderAllocationMerge(traceProvider->hUpstreamProvider,
117126
lowPtr, highPtr, totalSize);
118127
}
119128

120129
static umf_result_t traceAllocationSplit(void *provider, void *ptr,
121130
size_t totalSize, size_t firstSize) {
122-
umf_provider_trace_params_priv_t *traceProvider =
123-
(umf_provider_trace_params_priv_t *)provider;
131+
umf_provider_trace_params_t *traceProvider =
132+
(umf_provider_trace_params_t *)provider;
124133

125-
traceProvider->trace("allocation_split");
134+
traceProvider->trace_handler(traceProvider->trace_context,
135+
"allocation_split");
126136
return umfMemoryProviderAllocationSplit(traceProvider->hUpstreamProvider,
127137
ptr, totalSize, firstSize);
128138
}
129139

130140
static umf_result_t traceGetIpcHandleSize(void *provider, size_t *pSize) {
131-
umf_provider_trace_params_priv_t *traceProvider =
132-
(umf_provider_trace_params_priv_t *)provider;
141+
umf_provider_trace_params_t *traceProvider =
142+
(umf_provider_trace_params_t *)provider;
133143

134-
traceProvider->trace("get_ipc_handle_size");
144+
traceProvider->trace_handler(traceProvider->trace_context,
145+
"get_ipc_handle_size");
135146
return umfMemoryProviderGetIPCHandleSize(traceProvider->hUpstreamProvider,
136147
pSize);
137148
}
138149

139150
static umf_result_t traceGetIpcHandle(void *provider, const void *ptr,
140151
size_t size, void *ipcHandle) {
141-
umf_provider_trace_params_priv_t *traceProvider =
142-
(umf_provider_trace_params_priv_t *)provider;
152+
umf_provider_trace_params_t *traceProvider =
153+
(umf_provider_trace_params_t *)provider;
143154

144-
traceProvider->trace("get_ipc_handle");
155+
traceProvider->trace_handler(traceProvider->trace_context,
156+
"get_ipc_handle");
145157
return umfMemoryProviderGetIPCHandle(traceProvider->hUpstreamProvider, ptr,
146158
size, ipcHandle);
147159
}
148160

149161
static umf_result_t tracePutIpcHandle(void *provider, void *ipcHandle) {
150-
umf_provider_trace_params_priv_t *traceProvider =
151-
(umf_provider_trace_params_priv_t *)provider;
162+
umf_provider_trace_params_t *traceProvider =
163+
(umf_provider_trace_params_t *)provider;
152164

153-
traceProvider->trace("put_ipc_handle");
165+
traceProvider->trace_handler(traceProvider->trace_context,
166+
"put_ipc_handle");
154167
return umfMemoryProviderPutIPCHandle(traceProvider->hUpstreamProvider,
155168
ipcHandle);
156169
}
157170

158171
static umf_result_t traceOpenIpcHandle(void *provider, void *ipcHandle,
159172
void **ptr) {
160-
umf_provider_trace_params_priv_t *traceProvider =
161-
(umf_provider_trace_params_priv_t *)provider;
173+
umf_provider_trace_params_t *traceProvider =
174+
(umf_provider_trace_params_t *)provider;
162175

163-
traceProvider->trace("open_ipc_handle");
176+
traceProvider->trace_handler(traceProvider->trace_context,
177+
"open_ipc_handle");
164178
return umfMemoryProviderOpenIPCHandle(traceProvider->hUpstreamProvider,
165179
ipcHandle, ptr);
166180
}
167181

168182
static umf_result_t traceCloseIpcHandle(void *provider, void *ptr,
169183
size_t size) {
170-
umf_provider_trace_params_priv_t *traceProvider =
171-
(umf_provider_trace_params_priv_t *)provider;
184+
umf_provider_trace_params_t *traceProvider =
185+
(umf_provider_trace_params_t *)provider;
172186

173-
traceProvider->trace("close_ipc_handle");
187+
traceProvider->trace_handler(traceProvider->trace_context,
188+
"close_ipc_handle");
174189
return umfMemoryProviderCloseIPCHandle(traceProvider->hUpstreamProvider,
175190
ptr, size);
176191
}

test/common/provider_trace.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,20 @@
55
#ifndef UMF_TRACE_PROVIDER_H
66
#define UMF_TRACE_PROVIDER_H
77

8+
#include <stdbool.h>
9+
810
#include <umf/memory_provider.h>
911

1012
#if defined(__cplusplus)
1113
extern "C" {
1214
#endif
1315

16+
typedef void (*trace_handler_t)(void *, const char *);
1417
typedef struct umf_provider_trace_params {
1518
umf_memory_provider_handle_t hUpstreamProvider;
16-
void (*trace)(const char *);
19+
bool own_upstream;
20+
void *trace_context;
21+
trace_handler_t trace_handler;
1722
} umf_provider_trace_params_t;
1823

1924
extern umf_memory_provider_ops_t UMF_TRACE_PROVIDER_OPS;

0 commit comments

Comments
 (0)