Datum
extlock_bench(PG_FUNCTION_ARGS)
{
	Oid relid = PG_GETARG_OID(0);
	int nLoops = PG_GETARG_INT32(1);
	Relation rel;
	TimestampTz start, end;
	int i;
	long secs;
	int microsecs;
	float duration;

	rel = relation_open(relid, AccessShareLock);

	/* Start time */
	start = GetCurrentTimestamp();

	/* Bench */
	for (i = 0; i < nLoops; i++)
	{
#ifdef EXTENSION_LOCK_H
		LockRelationForExtension(rel, RELEXT_EXCLUSIVE);
		UnlockRelationForExtension(rel, RELEXT_EXCLUSIVE);
#else
		LockRelationForExtension(rel, ExclusiveLock);
		UnlockRelationForExtension(rel, ExclusiveLock);
#endif
	}

	/* End time */
	end = GetCurrentTimestamp();

	relation_close(rel, AccessShareLock);

	TimestampDifference(start, end, &secs, &microsecs);
	duration = (float) microsecs / 1000000 + secs;

	PG_RETURN_FLOAT4(nLoops / duration);
}
