brintos

brintos / linux-shallow public Read only

0
0
Text · 3.4 KiB · d69b752 Raw
92 lines · c
1/*2 *  sync fence wait tests3 *  Copyright 2015-2016 Collabora Ltd.4 *5 *  Based on the implementation from the Android Open Source Project,6 *7 *  Copyright 2012 Google, Inc8 *9 *  Permission is hereby granted, free of charge, to any person obtaining a10 *  copy of this software and associated documentation files (the "Software"),11 *  to deal in the Software without restriction, including without limitation12 *  the rights to use, copy, modify, merge, publish, distribute, sublicense,13 *  and/or sell copies of the Software, and to permit persons to whom the14 *  Software is furnished to do so, subject to the following conditions:15 *16 *  The above copyright notice and this permission notice shall be included in17 *  all copies or substantial portions of the Software.18 *19 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR20 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,21 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL22 *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR23 *  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,24 *  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR25 *  OTHER DEALINGS IN THE SOFTWARE.26 */27 28#include "sync.h"29#include "sw_sync.h"30#include "synctest.h"31 32int test_fence_multi_timeline_wait(void)33{34	int timelineA, timelineB, timelineC;35	int fenceA, fenceB, fenceC, merged;36	int valid, active, signaled, ret;37 38	timelineA = sw_sync_timeline_create();39	timelineB = sw_sync_timeline_create();40	timelineC = sw_sync_timeline_create();41 42	fenceA = sw_sync_fence_create(timelineA, "fenceA", 5);43	fenceB = sw_sync_fence_create(timelineB, "fenceB", 5);44	fenceC = sw_sync_fence_create(timelineC, "fenceC", 5);45 46	merged = sync_merge("mergeFence", fenceB, fenceA);47	merged = sync_merge("mergeFence", fenceC, merged);48 49	valid = sw_sync_fence_is_valid(merged);50	ASSERT(valid, "Failure merging fence from various timelines\n");51 52	/* Confirm fence isn't signaled */53	active = sync_fence_count_with_status(merged, FENCE_STATUS_ACTIVE);54	ASSERT(active == 3, "Fence signaled too early!\n");55 56	ret = sync_wait(merged, 0);57	ASSERT(ret == 0,58	       "Failure waiting on fence until timeout\n");59 60	ret = sw_sync_timeline_inc(timelineA, 5);61	active = sync_fence_count_with_status(merged, FENCE_STATUS_ACTIVE);62	signaled = sync_fence_count_with_status(merged, FENCE_STATUS_SIGNALED);63	ASSERT(active == 2 && signaled == 1,64	       "Fence did not signal properly!\n");65 66	ret = sw_sync_timeline_inc(timelineB, 5);67	active = sync_fence_count_with_status(merged, FENCE_STATUS_ACTIVE);68	signaled = sync_fence_count_with_status(merged, FENCE_STATUS_SIGNALED);69	ASSERT(active == 1 && signaled == 2,70	       "Fence did not signal properly!\n");71 72	ret = sw_sync_timeline_inc(timelineC, 5);73	active = sync_fence_count_with_status(merged, FENCE_STATUS_ACTIVE);74	signaled = sync_fence_count_with_status(merged, FENCE_STATUS_SIGNALED);75	ASSERT(active == 0 && signaled == 3,76	       "Fence did not signal properly!\n");77 78	/* confirm you can successfully wait */79	ret = sync_wait(merged, 100);80	ASSERT(ret > 0, "Failure waiting on signaled fence\n");81 82	sw_sync_fence_destroy(merged);83	sw_sync_fence_destroy(fenceC);84	sw_sync_fence_destroy(fenceB);85	sw_sync_fence_destroy(fenceA);86	sw_sync_timeline_destroy(timelineC);87	sw_sync_timeline_destroy(timelineB);88	sw_sync_timeline_destroy(timelineA);89 90	return 0;91}92