1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#include "sync.h"
29#include "sw_sync.h"
30#include "synctest.h"
31
32int test_fence_one_timeline_wait(void)
33{
34 int fence, valid, ret;
35 int timeline = sw_sync_timeline_create();
36
37 valid = sw_sync_timeline_is_valid(timeline);
38 ASSERT(valid, "Failure allocating timeline\n");
39
40 fence = sw_sync_fence_create(timeline, "allocFence", 5);
41 valid = sw_sync_fence_is_valid(fence);
42 ASSERT(valid, "Failure allocating fence\n");
43
44
45 ret = sync_wait(fence, 0);
46 ASSERT(ret == 0, "Failure waiting on fence until timeout\n");
47
48
49 ret = sw_sync_timeline_inc(timeline, 1);
50 ASSERT(ret == 0, "Failure advancing timeline\n");
51
52
53 ret = sync_wait(fence, 0);
54 ASSERT(ret == 0, "Failure waiting on fence until timeout\n");
55
56
57 ret = sw_sync_timeline_inc(timeline, 4);
58 ASSERT(ret == 0, "Failure signaling the fence\n");
59
60
61 ret = sync_wait(fence, 0);
62 ASSERT(ret > 0, "Failure waiting on fence\n");
63
64
65 ret = sw_sync_timeline_inc(timeline, 10);
66 ASSERT(ret == 0, "Failure going further\n");
67 ret = sync_wait(fence, 0);
68 ASSERT(ret > 0, "Failure waiting ahead\n");
69
70 sw_sync_fence_destroy(fence);
71 sw_sync_timeline_destroy(timeline);
72
73 return 0;
74}
75
76int test_fence_one_timeline_merge(void)
77{
78 int a, b, c, d, valid;
79 int timeline = sw_sync_timeline_create();
80
81
82 a = sw_sync_fence_create(timeline, "allocFence", 1);
83 b = sw_sync_fence_create(timeline, "allocFence", 2);
84 c = sw_sync_fence_create(timeline, "allocFence", 3);
85
86 valid = sw_sync_fence_is_valid(a) &&
87 sw_sync_fence_is_valid(b) &&
88 sw_sync_fence_is_valid(c);
89 ASSERT(valid, "Failure allocating fences\n");
90
91 d = sync_merge("mergeFence", b, a);
92 d = sync_merge("mergeFence", c, d);
93 valid = sw_sync_fence_is_valid(d);
94 ASSERT(valid, "Failure merging fences\n");
95
96
97 ASSERT(sync_fence_count_with_status(a, FENCE_STATUS_ACTIVE) == 1,
98 "a has too many active fences!\n");
99 ASSERT(sync_fence_count_with_status(a, FENCE_STATUS_ACTIVE) == 1,
100 "b has too many active fences!\n");
101 ASSERT(sync_fence_count_with_status(a, FENCE_STATUS_ACTIVE) == 1,
102 "c has too many active fences!\n");
103 ASSERT(sync_fence_count_with_status(a, FENCE_STATUS_ACTIVE) == 1,
104 "d has too many active fences!\n");
105
106
107 sw_sync_timeline_inc(timeline, 1);
108 ASSERT(sync_fence_count_with_status(a, FENCE_STATUS_SIGNALED) == 1,
109 "a did not signal!\n");
110 ASSERT(sync_fence_count_with_status(d, FENCE_STATUS_ACTIVE) == 1,
111 "d signaled too early!\n");
112
113 sw_sync_timeline_inc(timeline, 1);
114 ASSERT(sync_fence_count_with_status(b, FENCE_STATUS_SIGNALED) == 1,
115 "b did not signal!\n");
116 ASSERT(sync_fence_count_with_status(d, FENCE_STATUS_ACTIVE) == 1,
117 "d signaled too early!\n");
118
119 sw_sync_timeline_inc(timeline, 1);
120 ASSERT(sync_fence_count_with_status(c, FENCE_STATUS_SIGNALED) == 1,
121 "c did not signal!\n");
122 ASSERT(sync_fence_count_with_status(d, FENCE_STATUS_ACTIVE) == 0 &&
123 sync_fence_count_with_status(d, FENCE_STATUS_SIGNALED) == 1,
124 "d did not signal!\n");
125
126 sw_sync_fence_destroy(d);
127 sw_sync_fence_destroy(c);
128 sw_sync_fence_destroy(b);
129 sw_sync_fence_destroy(a);
130 sw_sync_timeline_destroy(timeline);
131 return 0;
132}
133