1aa259bb2f0f40e26ffe10870d106dfc97e121dc
[platform/upstream/gstreamer.git] / testsuite / refcounting / pad.c
1 #include <gst/gst.h>
2
3 #define ITERS 100000
4 #include <stdlib.h>
5 #include "mem.h"
6
7 int
8 main (int argc, gchar *argv[])
9 {
10   GstPad *pad;
11   GstPadTemplate *padtempl;
12   long usage1;
13   gint i, iters;
14
15   gst_init (&argc, &argv);
16
17   if (argc == 2)
18     iters = atoi (argv[1]);
19   else
20     iters = ITERS;
21
22   g_print ("starting pad test\n");
23   usage1 = vmsize();
24
25   pad = gst_pad_new ("padname", GST_PAD_SINK);
26   gst_object_unref (GST_OBJECT (pad));
27   g_print ("create/unref new pad %ld\n", vmsize()-usage1);
28
29   for (i=0; i<iters;i++) {
30     pad = gst_pad_new ("padname", GST_PAD_SINK);
31     gst_object_unref (GST_OBJECT (pad));
32   }
33   g_print ("create/unref %d pads %ld\n", iters, vmsize()-usage1);
34
35   pad = gst_pad_new ("padname", GST_PAD_SINK);
36   g_assert (GST_OBJECT_FLOATING (pad));
37   gst_object_ref (GST_OBJECT (pad));
38   gst_object_sink (GST_OBJECT (pad));
39   g_assert (!GST_OBJECT_FLOATING (pad));
40   gst_object_unref (GST_OBJECT (pad));
41   g_print ("create/ref/sink/unref new pad %ld\n", vmsize()-usage1);
42
43   for (i=0; i<iters;i++) {
44     pad = gst_pad_new ("padname", GST_PAD_SINK);
45     gst_object_ref (GST_OBJECT (pad));
46     gst_object_sink (GST_OBJECT (pad));
47     gst_object_unref (GST_OBJECT (pad));
48   }
49   g_print ("create/ref/sink/unref %d pads %ld\n", iters, vmsize()-usage1);
50
51   pad = gst_pad_new ("padname", GST_PAD_SINK);
52   g_assert (!GST_OBJECT_DESTROYED (pad));
53   gst_object_unref (GST_OBJECT (pad));
54   g_assert (GST_OBJECT_DESTROYED (pad));
55   gst_object_unref (GST_OBJECT (pad));
56   g_print ("create/destroy/unref pad %ld\n", vmsize()-usage1);
57   
58   for (i=0; i<iters;i++) {
59     pad = gst_pad_new ("padname", GST_PAD_SINK);
60     gst_object_unref (GST_OBJECT (pad));
61     gst_object_unref (GST_OBJECT (pad));
62   }
63   g_print ("create/destroy/unref %d pads %ld\n", iters, vmsize()-usage1);
64
65   pad = gst_pad_new ("padname", GST_PAD_SINK);
66   gst_object_ref (GST_OBJECT (pad));
67   gst_object_unref (GST_OBJECT (pad));
68   gst_object_unref (GST_OBJECT (pad));
69   g_print ("create/ref/unref/unref pad %ld\n", vmsize()-usage1);
70   
71   for (i=0; i<iters;i++) {
72     pad = gst_pad_new ("padname", GST_PAD_SINK);
73     gst_object_ref (GST_OBJECT (pad));
74     gst_object_unref (GST_OBJECT (pad));
75     gst_object_unref (GST_OBJECT (pad));
76   }
77   g_print ("create/ref/unref/unref %d pads %ld\n", iters, vmsize()-usage1);
78
79   pad = gst_pad_new ("padname", GST_PAD_SINK);
80   gst_object_ref (GST_OBJECT (pad));
81   gst_object_unref (GST_OBJECT (pad));
82   gst_object_unref (GST_OBJECT (pad));
83   gst_object_unref (GST_OBJECT (pad));
84   g_print ("create/ref/destroy/unref/unref pad %ld\n", vmsize()-usage1);
85   
86   for (i=0; i<iters;i++) {
87     pad = gst_pad_new ("padname", GST_PAD_SINK);
88     gst_object_ref (GST_OBJECT (pad));
89     gst_object_unref (GST_OBJECT (pad));
90     gst_object_unref (GST_OBJECT (pad));
91     gst_object_unref (GST_OBJECT (pad));
92   }
93   g_print ("create/ref/destroy/unref/unref %d pads %ld\n", iters, vmsize()-usage1);
94
95   for (i=0; i<iters;i++) {
96     pad = gst_pad_new ("padname", GST_PAD_SINK);
97     gst_object_ref (GST_OBJECT (pad));
98     gst_pad_set_name (pad, "testing123");
99     gst_object_unref (GST_OBJECT (pad));
100     gst_pad_set_name (pad, "testing123");
101     gst_object_unref (GST_OBJECT (pad));
102     gst_object_unref (GST_OBJECT (pad));
103   }
104   g_print ("create/ref/destroy/unref/unref %d pads %ld with name\n", iters, vmsize()-usage1);
105
106   pad = gst_pad_new ("padname", GST_PAD_SINK);
107   for (i=0; i<iters;i++) {
108     gst_pad_set_name (pad, "testing");
109   }
110   gst_object_unref (GST_OBJECT (pad));
111   g_print ("set name %d times %ld\n", iters, vmsize()-usage1);
112
113   for (i=0; i<iters;i++) {
114     padtempl = gst_pad_template_new ("sink%d", GST_PAD_SINK, GST_PAD_SOMETIMES, NULL);
115     gst_object_unref (GST_OBJECT (padtempl));
116   }
117   g_print ("%d padtemplates create/unref %ld\n", iters, vmsize()-usage1);
118
119   for (i=0; i<iters;i++) {
120     padtempl = gst_pad_template_new ("sink%d", GST_PAD_SINK, GST_PAD_SOMETIMES, NULL);
121     pad = gst_pad_new_from_template (padtempl, "sink1");
122     gst_object_unref (GST_OBJECT (pad));
123   }
124   g_print ("%d pads create/unref from padtemplate %ld\n", iters, vmsize()-usage1);
125   
126   g_print ("leaked: %ld\n", vmsize()-usage1);
127
128   return vmsize()-usage1;
129 }