Example #1
0
int
mono_counters_sample (MonoCounter *counter, void *buffer, int buffer_size)
{
	int cb = counter->type & MONO_COUNTER_CALLBACK;
	int size = -1;

	switch (mono_counter_get_type (counter)) {
	case MONO_COUNTER_INT:
		COPY_COUNTER (int, IntFunc);
		break;
	case MONO_COUNTER_UINT:
		COPY_COUNTER (guint, UIntFunc);
		break;
	case MONO_COUNTER_LONG:
	case MONO_COUNTER_TIME_INTERVAL:
		COPY_COUNTER (gint64, LongFunc);
		break;
	case MONO_COUNTER_ULONG:
		COPY_COUNTER (guint64, ULongFunc);
		break;
	case MONO_COUNTER_WORD:
		COPY_COUNTER (gssize, PtrFunc);
		break;
	case MONO_COUNTER_DOUBLE:
		COPY_COUNTER (double, DoubleFunc);
		break;
	case MONO_COUNTER_STRING:
		// FIXME : add support for string sampling
		break;
	}

	return size;
}
Example #2
0
/* lockless */
static int
sample_internal (MonoCounter *counter, void *buffer, int buffer_size)
{
	int cb = counter->type & MONO_COUNTER_CALLBACK;
	int size = -1;

	char *strval;

	switch (mono_counter_get_type (counter)) {
	case MONO_COUNTER_INT:
		COPY_COUNTER (int, IntFunc);
		break;
	case MONO_COUNTER_UINT:
		COPY_COUNTER (guint, UIntFunc);
		break;
	case MONO_COUNTER_LONG:
	case MONO_COUNTER_TIME_INTERVAL:
		COPY_COUNTER (gint64, LongFunc);
		break;
	case MONO_COUNTER_ULONG:
		COPY_COUNTER (guint64, ULongFunc);
		break;
	case MONO_COUNTER_WORD:
		COPY_COUNTER (gssize, PtrFunc);
		break;
	case MONO_COUNTER_DOUBLE:
		COPY_COUNTER (double, DoubleFunc);
		break;
	case MONO_COUNTER_STRING:
		if (buffer_size < counter->size) {
			size = -1;
		} else if (counter->size == 0) {
			size = 0;
		} else {
			strval = cb ? ((StrFunc)counter->addr) () : (char*)counter->addr;
			if (!strval) {
				size = 0;
			} else {
				size = counter->size;
				strncpy ((char *) buffer, strval, size - 1);
				((char*)buffer)[size - 1] = '\0';
			}
		}
	}

	return size;
}
Example #3
0
size_t
mono_counter_get_size (MonoCounter *counter)
{
	switch (mono_counter_get_type (counter)) {
	case MONO_COUNTER_INT:
		return sizeof (int);
	case MONO_COUNTER_UINT:
		return sizeof (guint);
	case MONO_COUNTER_LONG:
	case MONO_COUNTER_TIME_INTERVAL:
		return sizeof (gint64);
	case MONO_COUNTER_ULONG:
		return sizeof (guint64);
	case MONO_COUNTER_WORD:
		return sizeof (gssize);
	case MONO_COUNTER_DOUBLE:
		return sizeof (double);
	case MONO_COUNTER_STRING:
		return -1; // FIXME
	default:
		g_assert_not_reached ();
	}
}