func.c
text/x-csrc
Filename: func.c
Type: text/x-csrc
Part: 0
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, µsecs);
duration = (float) microsecs / 1000000 + secs;
PG_RETURN_FLOAT4(nLoops / duration);
}