MCPcopy Create free account
hub / github.com/F-Stack/f-stack / objectComputeSize

Function objectComputeSize

app/redis-6.2.6/src/object.c:808–970  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

806 * are checked and averaged to estimate the total size. */
807#define OBJ_COMPUTE_SIZE_DEF_SAMPLES 5 /* Default sample size. */
808size_t objectComputeSize(robj *o, size_t sample_size) {
809 sds ele, ele2;
810 dict *d;
811 dictIterator *di;
812 struct dictEntry *de;
813 size_t asize = 0, elesize = 0, samples = 0;
814
815 if (o->type == OBJ_STRING) {
816 if(o->encoding == OBJ_ENCODING_INT) {
817 asize = sizeof(*o);
818 } else if(o->encoding == OBJ_ENCODING_RAW) {
819 asize = sdsZmallocSize(o->ptr)+sizeof(*o);
820 } else if(o->encoding == OBJ_ENCODING_EMBSTR) {
821 asize = sdslen(o->ptr)+2+sizeof(*o);
822 } else {
823 serverPanic("Unknown string encoding");
824 }
825 } else if (o->type == OBJ_LIST) {
826 if (o->encoding == OBJ_ENCODING_QUICKLIST) {
827 quicklist *ql = o->ptr;
828 quicklistNode *node = ql->head;
829 asize = sizeof(*o)+sizeof(quicklist);
830 do {
831 elesize += sizeof(quicklistNode)+ziplistBlobLen(node->zl);
832 samples++;
833 } while ((node = node->next) && samples < sample_size);
834 asize += (double)elesize/samples*ql->len;
835 } else if (o->encoding == OBJ_ENCODING_ZIPLIST) {
836 asize = sizeof(*o)+ziplistBlobLen(o->ptr);
837 } else {
838 serverPanic("Unknown list encoding");
839 }
840 } else if (o->type == OBJ_SET) {
841 if (o->encoding == OBJ_ENCODING_HT) {
842 d = o->ptr;
843 di = dictGetIterator(d);
844 asize = sizeof(*o)+sizeof(dict)+(sizeof(struct dictEntry*)*dictSlots(d));
845 while((de = dictNext(di)) != NULL && samples < sample_size) {
846 ele = dictGetKey(de);
847 elesize += sizeof(struct dictEntry) + sdsZmallocSize(ele);
848 samples++;
849 }
850 dictReleaseIterator(di);
851 if (samples) asize += (double)elesize/samples*dictSize(d);
852 } else if (o->encoding == OBJ_ENCODING_INTSET) {
853 intset *is = o->ptr;
854 asize = sizeof(*o)+sizeof(*is)+(size_t)is->encoding*is->length;
855 } else {
856 serverPanic("Unknown set encoding");
857 }
858 } else if (o->type == OBJ_ZSET) {
859 if (o->encoding == OBJ_ENCODING_ZIPLIST) {
860 asize = sizeof(*o)+(ziplistBlobLen(o->ptr));
861 } else if (o->encoding == OBJ_ENCODING_SKIPLIST) {
862 d = ((zset*)o->ptr)->dict;
863 zskiplist *zsl = ((zset*)o->ptr)->zsl;
864 zskiplistNode *znode = zsl->header->level[0].forward;
865 asize = sizeof(*o)+sizeof(zset)+sizeof(zskiplist)+sizeof(dict)+

Callers 1

memoryCommandFunction · 0.85

Calls 14

sdsZmallocSizeFunction · 0.85
sdslenFunction · 0.85
ziplistBlobLenFunction · 0.85
zmalloc_sizeFunction · 0.85
raxStartFunction · 0.85
raxSeekFunction · 0.85
raxNextFunction · 0.85
lpBytesFunction · 0.85
raxStopFunction · 0.85
raxSizeFunction · 0.85
dictGetIteratorFunction · 0.70

Tested by

no test coverage detected