Refinements to array and class object size computation.
* Rename dvmArrayObjectLength to dvmArrayObjectSize. In the context
of arrays length may refer to the length of the array data and not
the size of the array object instance.
* Add a new method dvmClassObjectSize which computes the total size of
a class object including its static fields.
Change-Id: I693ec8e66dfa5df35c9f35474c80411ea917c899
diff --git a/vm/oo/Array.c b/vm/oo/Array.c
index c76ea53..c1f5c3a 100644
--- a/vm/oo/Array.c
+++ b/vm/oo/Array.c
@@ -786,13 +786,14 @@
return 0; /* Quiet the compiler. */
}
-size_t dvmArrayObjectLength(const ArrayObject *array)
+size_t dvmArrayObjectSize(const ArrayObject *array)
{
- size_t length;
+ size_t size;
- length = offsetof(ArrayObject, contents);
- length += array->length * arrayElementWidth(array);
- return length;
+ assert(array != NULL);
+ size = offsetof(ArrayObject, contents);
+ size += array->length * arrayElementWidth(array);
+ return size;
}
/*
diff --git a/vm/oo/Array.h b/vm/oo/Array.h
index 17bdb22..36a847e 100644
--- a/vm/oo/Array.h
+++ b/vm/oo/Array.h
@@ -152,6 +152,9 @@
bool dvmUnboxObjectArray(ArrayObject* dstArray, const ArrayObject* srcArray,
ClassObject* dstElemClass);
-size_t dvmArrayObjectLength(const ArrayObject *array);
+/*
+ * Returns the size of the given array object in bytes.
+ */
+size_t dvmArrayObjectSize(const ArrayObject *array);
#endif /*_DALVIK_OO_ARRAY*/
diff --git a/vm/oo/Class.c b/vm/oo/Class.c
index bbb8a35..b7211ec 100644
--- a/vm/oo/Class.c
+++ b/vm/oo/Class.c
@@ -4952,3 +4952,13 @@
return dvmCompareDescriptorAndMethodProto(descriptor, method);
}
+
+size_t dvmClassObjectSize(const ClassObject *clazz)
+{
+ size_t size;
+
+ assert(clazz != NULL);
+ size = offsetof(ClassObject, sfields);
+ size += sizeof(StaticField) * clazz->sfieldCount;
+ return size;
+}
diff --git a/vm/oo/Class.h b/vm/oo/Class.h
index 59e0da4..34fbff1 100644
--- a/vm/oo/Class.h
+++ b/vm/oo/Class.h
@@ -273,4 +273,9 @@
int dvmCompareNameDescriptorAndMethod(const char* name,
const char* descriptor, const Method* method);
+/*
+ * Returns the size of the given class object in bytes.
+ */
+size_t dvmClassObjectSize(const ClassObject *clazz);
+
#endif /*_DALVIK_OO_CLASS*/