#include #define ITERS 100000 #include #include "mem.h" int main (int argc, gchar * argv[]) { GstObject *object, *object2; long usage1; gint i, iters; gst_init (&argc, &argv); if (argc == 2) iters = atoi (argv[1]); else iters = ITERS; g_print ("starting test with %d iterations\n", iters); usage1 = vmsize (); object = gst_object_new (); gst_object_unref (object); g_print ("create/unref new object %ld\n", vmsize () - usage1); for (i = 0; i < iters; i++) { object = gst_object_new (); gst_object_unref (object); } g_print ("create/unref %d object %ld\n", iters, vmsize () - usage1); object = gst_object_new (); g_assert (GST_OBJECT_FLOATING (object)); gst_object_ref (object); gst_object_sink (object); g_assert (!GST_OBJECT_FLOATING (object)); gst_object_unref (object); g_print ("create/ref/sink/unref new object %ld\n", vmsize () - usage1); for (i = 0; i < iters; i++) { object = gst_object_new (); gst_object_ref (object); gst_object_sink (object); gst_object_unref (object); } g_print ("create/ref/sink/unref %d object %ld\n", iters, vmsize () - usage1); object = gst_object_new (); g_assert (!GST_OBJECT_DESTROYED (object)); gst_object_unref (object); g_assert (GST_OBJECT_DESTROYED (object)); gst_object_unref (object); g_print ("create/destroy/unref new object %ld\n", vmsize () - usage1); for (i = 0; i < iters; i++) { object = gst_object_new (); gst_object_unref (object); gst_object_unref (object); } g_print ("destroy/unref %d object %ld\n", iters, vmsize () - usage1); object = gst_object_new (); gst_object_ref (object); gst_object_unref (object); gst_object_unref (object); g_print ("create/ref/unref/unref new object %ld\n", vmsize () - usage1); for (i = 0; i < iters; i++) { object = gst_object_new (); gst_object_ref (object); gst_object_unref (object); gst_object_unref (object); } g_print ("create/ref/unref/unref %d object %ld\n", iters, vmsize () - usage1); object = gst_object_new (); gst_object_ref (object); gst_object_unref (object); gst_object_unref (object); gst_object_unref (object); g_print ("create/ref/destroy/unref/unref new object %ld\n", vmsize () - usage1); for (i = 0; i < iters; i++) { object = gst_object_new (); gst_object_ref (object); gst_object_unref (object); gst_object_unref (object); gst_object_unref (object); } g_print ("create/ref/destroy/unref/unref %d object %ld\n", iters, vmsize () - usage1); for (i = 0; i < iters; i++) { object = gst_object_new (); gst_object_ref (object); gst_object_set_name (object, "testing123"); gst_object_unref (object); gst_object_set_name (object, "testing123"); gst_object_unref (object); gst_object_unref (object); } g_print ("create/ref/destroy/unref/unref %d object with name %ld\n", iters, vmsize () - usage1); object = gst_object_new (); for (i = 0; i < iters; i++) { gst_object_set_name (object, "testing"); } gst_object_unref (object); g_print ("create/set name/unref %d object %ld\n", iters, vmsize () - usage1); object = gst_object_new (); object2 = gst_object_new (); g_assert (GST_OBJECT_FLOATING (object)); g_assert (GST_OBJECT_FLOATING (object2)); gst_object_set_parent (object, object2); g_assert (GST_OBJECT_FLOATING (object2)); g_assert (!GST_OBJECT_FLOATING (object)); g_print ("parentage flags set_parent ok %ld\n", vmsize () - usage1); gst_object_ref (object); gst_object_unparent (object); g_assert (GST_OBJECT_FLOATING (object2)); g_assert (!GST_OBJECT_FLOATING (object)); g_assert (gst_object_get_parent (object) == NULL); g_print ("parentage flags unparent ok %ld\n", vmsize () - usage1); gst_object_set_parent (object, object2); g_assert (GST_OBJECT_FLOATING (object2)); g_assert (!GST_OBJECT_FLOATING (object)); g_assert (gst_object_get_parent (object) == object2); gst_object_unref (object); g_assert (GST_OBJECT_DESTROYED (object)); g_assert (!GST_OBJECT_FLOATING (object)); g_assert (gst_object_get_parent (object) == NULL); gst_object_unref (object); g_print ("parentage flags destroy ok %ld\n", vmsize () - usage1); for (i = 0; i < iters; i++) { object = gst_object_new (); object2 = gst_object_new (); gst_object_set_parent (object2, object); gst_object_unref (object); gst_object_unref (object2); } g_print ("create/unref %d 2 parented objects %ld\n", iters, vmsize () - usage1); g_print ("leaked: %ld\n", vmsize () - usage1); return (vmsize () - usage1 ? -1 : 0); }