mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-15 08:47:56 +01:00
cache mqttdevid to avoid lots of calls across jni boundary
This commit is contained in:
parent
a60451d84c
commit
1a8979c549
2 changed files with 37 additions and 31 deletions
|
@ -193,46 +193,50 @@ getMQTTDevID( XW_DUtilCtxt* dutil, XWEnv xwe, XP_Bool forceNew, MQTTDevID* devID
|
||||||
*devID = bogusID;
|
*devID = bogusID;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
/* Use the cached value if present and if we're not forcing new */
|
||||||
MQTTDevID tmp = 0;
|
if ( !dutil->devID || forceNew ) {
|
||||||
XP_U32 len = sizeof(tmp);
|
XP_U32 len = sizeof(dutil->devID);
|
||||||
if ( !forceNew ) {
|
if ( !forceNew ) {
|
||||||
dutil_loadPtr( dutil, xwe, MQTT_DEVID_KEY, &tmp, &len );
|
dutil_loadPtr( dutil, xwe, MQTT_DEVID_KEY, &dutil->devID, &len );
|
||||||
}
|
|
||||||
|
|
||||||
/* XP_LOGFF( "len: %d; sizeof(tmp): %zu", len, sizeof(tmp) ); */
|
|
||||||
if ( forceNew || len != sizeof(tmp) ) { /* not found, or bogus somehow */
|
|
||||||
int total = 0;
|
|
||||||
for ( int ii = 0; ii < NUM_RUNS; ++ii ) {
|
|
||||||
tmp = XP_RANDOM();
|
|
||||||
tmp <<= 27;
|
|
||||||
tmp ^= XP_RANDOM();
|
|
||||||
tmp <<= 27;
|
|
||||||
tmp ^= XP_RANDOM();
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
MQTTDevID tmp2 = tmp;
|
|
||||||
while ( 0 != tmp2 ) {
|
|
||||||
if ( 0 != (1 & tmp2) ) {
|
|
||||||
++count;
|
|
||||||
++total;
|
|
||||||
}
|
|
||||||
tmp2 >>= 1;
|
|
||||||
}
|
|
||||||
XP_LOGFF( "got: %" PRIX64 " (set: %d/%zd)", tmp, count, sizeof(tmp2)*8 );
|
|
||||||
}
|
}
|
||||||
XP_LOGFF( "average bits set: %d", total / NUM_RUNS );
|
|
||||||
|
|
||||||
dutil_storePtr( dutil, xwe, MQTT_DEVID_KEY, &tmp, sizeof(tmp) );
|
/* XP_LOGFF( "len: %d; sizeof(tmp): %zu", len, sizeof(tmp) ); */
|
||||||
|
if ( forceNew || len != sizeof(dutil->devID) ) { /* not found, or bogus somehow */
|
||||||
|
int total = 0;
|
||||||
|
MQTTDevID tmp;
|
||||||
|
for ( int ii = 0; ii < NUM_RUNS; ++ii ) {
|
||||||
|
tmp = XP_RANDOM();
|
||||||
|
tmp <<= 27;
|
||||||
|
tmp ^= XP_RANDOM();
|
||||||
|
tmp <<= 27;
|
||||||
|
tmp ^= XP_RANDOM();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
MQTTDevID tmp2 = tmp;
|
||||||
|
while ( 0 != tmp2 ) {
|
||||||
|
if ( 0 != (1 & tmp2) ) {
|
||||||
|
++count;
|
||||||
|
++total;
|
||||||
|
}
|
||||||
|
tmp2 >>= 1;
|
||||||
|
}
|
||||||
|
XP_LOGFF( "got: %" PRIX64 " (set: %d/%zd)", tmp, count, sizeof(tmp2)*8 );
|
||||||
|
}
|
||||||
|
XP_LOGFF( "average bits set: %d", total / NUM_RUNS );
|
||||||
|
|
||||||
|
dutil->devID = tmp;
|
||||||
|
dutil_storePtr( dutil, xwe, MQTT_DEVID_KEY, &dutil->devID, sizeof(dutil->devID) );
|
||||||
|
}
|
||||||
|
|
||||||
# ifdef DEBUG
|
# ifdef DEBUG
|
||||||
XP_UCHAR buf[32];
|
XP_UCHAR buf[32];
|
||||||
formatMQTTDevID( &tmp, buf, VSIZE(buf) );
|
formatMQTTDevID( &dutil->devID, buf, VSIZE(buf) );
|
||||||
/* This log statement is required by discon_ok2.py!!! (keep in sync) */
|
/* This log statement is required by discon_ok2.py!!! (keep in sync) */
|
||||||
XP_LOGFF( "generated id: %s; key: %s", buf, MQTT_DEVID_KEY );
|
XP_LOGFF( "generated id: %s; key: %s", buf, MQTT_DEVID_KEY );
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
*devID = tmp;
|
XP_ASSERT( dutil->devID );
|
||||||
|
*devID = dutil->devID;
|
||||||
#endif
|
#endif
|
||||||
// LOG_RETURNF( MQTTDevID_FMT " key: %s", *devID, MQTT_DEVID_KEY );
|
// LOG_RETURNF( MQTTDevID_FMT " key: %s", *devID, MQTT_DEVID_KEY );
|
||||||
}
|
}
|
||||||
|
@ -247,6 +251,7 @@ dvc_getMQTTDevID( XW_DUtilCtxt* dutil, XWEnv xwe, MQTTDevID* devID )
|
||||||
void
|
void
|
||||||
dvc_setMQTTDevID( XW_DUtilCtxt* dutil, XWEnv xwe, const MQTTDevID* devID )
|
dvc_setMQTTDevID( XW_DUtilCtxt* dutil, XWEnv xwe, const MQTTDevID* devID )
|
||||||
{
|
{
|
||||||
|
dutil->devID = *devID;
|
||||||
dutil_storePtr( dutil, xwe, MQTT_DEVID_KEY, devID, sizeof(*devID) );
|
dutil_storePtr( dutil, xwe, MQTT_DEVID_KEY, devID, sizeof(*devID) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,6 +119,7 @@ typedef struct _DUtilVtable {
|
||||||
|
|
||||||
struct XW_DUtilCtxt {
|
struct XW_DUtilCtxt {
|
||||||
DUtilVtable vtable;
|
DUtilVtable vtable;
|
||||||
|
MQTTDevID devID;
|
||||||
void* closure;
|
void* closure;
|
||||||
void* devCtxt; /* owned by device.c */
|
void* devCtxt; /* owned by device.c */
|
||||||
void* statsState; /* owned by stats.c */
|
void* statsState; /* owned by stats.c */
|
||||||
|
|
Loading…
Add table
Reference in a new issue