2005-01-08 Ben Maurer <bmaurer@ximian.com>
authorBen Maurer <benm@mono-cvs.ximian.com>
Sun, 9 Jan 2005 01:59:55 +0000 (01:59 -0000)
committerBen Maurer <benm@mono-cvs.ximian.com>
Sun, 9 Jan 2005 01:59:55 +0000 (01:59 -0000)
* object.c (mono_object_get_size): New function to get the size of
an object instance.

* profiler.c (simple_allocation): Use above.

svn path=/trunk/mono/; revision=38558

mono/metadata/ChangeLog
mono/metadata/object.c
mono/metadata/object.h
mono/metadata/profiler.c

index 1454ff11950b6cbd3ea1a68c03b0bbe64016f7c8..19026b4c75572bea81117eafcb4a1105fae05912 100644 (file)
@@ -1,3 +1,10 @@
+2005-01-08  Ben Maurer  <bmaurer@ximian.com>
+
+       * object.c (mono_object_get_size): New function to get the size of
+       an object instance.
+
+       * profiler.c (simple_allocation): Use above.
+
 2005-01-08  Sebastien Pouliot  <sebastien@ximian.com>
 
        * appdomain.c: Replaced ves_icall_System_AppDomain_getDomainByID by
index e356aedfa19aa1adf3cff25f94e72897ec237593..04fda1c93cf945f2de2493035a0ae3fbd698f43e 100644 (file)
@@ -2118,9 +2118,9 @@ mono_object_clone (MonoObject *obj)
 
        size = obj->vtable->klass->instance_size;
        o = mono_object_allocate (size);
-       mono_profiler_allocation (o, obj->vtable->klass);
-
        memcpy (o, obj, size);
+       
+       mono_profiler_allocation (o, obj->vtable->klass);
 
        if (obj->vtable->klass->has_finalize)
                mono_object_register_finalizer (o);
@@ -2572,6 +2572,24 @@ mono_object_get_class (MonoObject *obj)
 {
        return mono_object_class (obj);
 }
+/**
+ * mono_object_get_size:
+ * @o: object to query
+ * 
+ * Returns: the size, in bytes, of @o
+ */
+guint
+mono_object_get_size (MonoObject* o)
+{
+       MonoClass* klass = mono_object_class (o);
+       
+       if (klass == mono_defaults.string_class)
+               return sizeof (MonoString) + 2 * mono_string_length ((MonoString*) o) + 2;
+       else if (klass->parent == mono_defaults.array_class)
+               return sizeof (MonoArray) + mono_array_element_size (klass) * mono_array_length ((MonoArray*) o);
+       else
+               return mono_class_instance_size (klass);
+}
 
 /**
  * mono_object_unbox:
index b8aa360a05d0e7dcc944e4b45c1a8b0cdead6b01..33396bad7d5c4e0509608c15980af66c6f602f6f 100644 (file)
@@ -161,6 +161,9 @@ mono_monitor_try_enter       (MonoObject *obj, guint32 ms);
 gboolean
 mono_monitor_enter           (MonoObject *obj);
 
+guint
+mono_object_get_size         (MonoObject *o);
+
 void 
 mono_monitor_exit            (MonoObject *obj);
 
index 6dd31b9cccd743bb4d27f23a3457fcc6fb509e85..f15abfe4f7d72d597787b5d3c1cd26e018667913 100644 (file)
@@ -1010,13 +1010,7 @@ simple_allocation (MonoProfiler *prof, MonoObject *obj, MonoClass *klass)
                profile_info->alloc_info = tmp;
        }
        tmp->count++;
-       if (klass == mono_defaults.string_class) {
-               tmp->mem += sizeof (MonoString) + 2 * mono_string_length ((MonoString*)obj) + 2;
-       } else if (klass->parent == mono_defaults.array_class) {
-               tmp->mem += sizeof (MonoArray) + mono_array_element_size (klass) * mono_array_length ((MonoArray*)obj);
-       } else {
-               tmp->mem += mono_class_instance_size (klass);
-       }
+       tmp->mem += mono_object_get_size (obj);
 }
 
 static void