Beispiel #1
0
/* This callback is called when a search result arrives or a search completes */
void dht_callback_func( void *closure, int event, const UCHAR *info_hash, const void *data, size_t data_len ) {
	struct results_t *results;
	IP addr;
	size_t i;

	results = results_find( info_hash );
	if( results == NULL ) {
		return;
	}

	switch( event ) {
		case DHT_EVENT_VALUES:
			if( gconf->af == AF_INET ) {
				dht_addr4_t *data4 = (dht_addr4_t *) data;
				for( i = 0; i < (data_len / sizeof(dht_addr4_t)); i++ ) {
					to_addr( &addr, &data4[i].addr, 4, data4[i].port );
					results_add_addr( results, &addr );
				}
			}
			break;
		case DHT_EVENT_VALUES6:
			if( gconf->af == AF_INET6 ) {
				dht_addr6_t *data6 = (dht_addr6_t *) data;
				for( i = 0; i < (data_len / sizeof(dht_addr6_t)); i++ ) {
					to_addr( &addr, &data6[i].addr, 16, data6[i].port );
					results_add_addr( results, &addr );
				}
			}
			break;
		case DHT_EVENT_SEARCH_DONE:
		case DHT_EVENT_SEARCH_DONE6:
			results_done( results, 1 );
			break;
	}
}
Beispiel #2
0
int results_compare(struct ts_results *tsr1, struct ts_results *tsr2)
{
	int i;
	struct ts_plugin_results *tspr1, *tspr2;

	if (!tsr1 || !tsr2) {
		CRITICAL("Null energy result list\n");
		return -1;
	}

	if (tsr1->nr_results != tsr2->nr_results)
		WARNING("There is a different number of results\n");

	tspr1 = tsr1->tspr;
	tspr2 = tsr2->tspr;

	if (!tspr1 || !tspr2) {
		CRITICAL("No plugin results !\n");
		return -1;
	}

	for (i = 0; i < tsr1->nr_results; i++) {

		struct ts_plugin_results *tspr;
		char *name = basename(tsr1->tspr[i].path);

		tspr = results_find(tspr1[i].path, tsr2);
		if (!tspr) {
			WARNING("Failed to find plugin '%s' result to compare\n", name);
			continue;
		}

		DEBUG("'%s': %.0lf / %.0lf usecs\n",
		      name, tspr1[i].duration, tspr->duration);
		DEBUG("'%s': %lf / %lf uJ\n", name, tspr1[i].energy, tspr->energy);

		NOTICE("'%s': %+.2lf%% usecs / %+.2lf%% uJ\n",
		       name, ratio(tspr1[i].duration, tspr->duration),
		       ratio(tspr1[i].energy, tspr->energy));
	}

	DEBUG("Overall time: %.0lf / %.0lf usecs\n",
	      tsr1->duration, tsr2->duration);
	DEBUG("Overall energy: %lf / %lf uJ\n", tsr1->energy, tsr2->energy);

	NOTICE("Overall: %+.2lf%% usecs / %+.2lf%% uJ\n",
	       ratio(tsr1->duration, tsr2->duration),
	       ratio(tsr1->energy, tsr2->energy));

	return 0;
}