cache mqttdevid to avoid lots of calls across jni boundary

This commit is contained in:
Eric House 2024-12-03 21:07:45 -08:00
parent a60451d84c
commit 1a8979c549
2 changed files with 37 additions and 31 deletions

View file

@ -193,16 +193,17 @@ getMQTTDevID( XW_DUtilCtxt* dutil, XWEnv xwe, XP_Bool forceNew, MQTTDevID* devID
*devID = bogusID;
#else
MQTTDevID tmp = 0;
XP_U32 len = sizeof(tmp);
/* Use the cached value if present and if we're not forcing new */
if ( !dutil->devID || forceNew ) {
XP_U32 len = sizeof(dutil->devID);
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 */
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;
@ -223,16 +224,19 @@ getMQTTDevID( XW_DUtilCtxt* dutil, XWEnv xwe, XP_Bool forceNew, MQTTDevID* devID
}
XP_LOGFF( "average bits set: %d", total / NUM_RUNS );
dutil_storePtr( dutil, xwe, MQTT_DEVID_KEY, &tmp, sizeof(tmp) );
dutil->devID = tmp;
dutil_storePtr( dutil, xwe, MQTT_DEVID_KEY, &dutil->devID, sizeof(dutil->devID) );
}
# ifdef DEBUG
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) */
XP_LOGFF( "generated id: %s; key: %s", buf, MQTT_DEVID_KEY );
# endif
}
*devID = tmp;
XP_ASSERT( dutil->devID );
*devID = dutil->devID;
#endif
// LOG_RETURNF( MQTTDevID_FMT " key: %s", *devID, MQTT_DEVID_KEY );
}
@ -247,6 +251,7 @@ dvc_getMQTTDevID( XW_DUtilCtxt* dutil, XWEnv xwe, MQTTDevID* devID )
void
dvc_setMQTTDevID( XW_DUtilCtxt* dutil, XWEnv xwe, const MQTTDevID* devID )
{
dutil->devID = *devID;
dutil_storePtr( dutil, xwe, MQTT_DEVID_KEY, devID, sizeof(*devID) );
}

View file

@ -119,6 +119,7 @@ typedef struct _DUtilVtable {
struct XW_DUtilCtxt {
DUtilVtable vtable;
MQTTDevID devID;
void* closure;
void* devCtxt; /* owned by device.c */
void* statsState; /* owned by stats.c */