<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
		"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
<!ENTITY version SYSTEM "version.xml">
]>
<refentry id="cairo-cairo-surface-observer">
<refmeta>
<refentrytitle role="top_of_page" id="cairo-cairo-surface-observer.top_of_page">cairo-surface-observer</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>CAIRO Library</refmiscinfo>
</refmeta>
<refnamediv>
<refname>cairo-surface-observer</refname>
<refpurpose></refpurpose>
</refnamediv>

<refsect1 id="cairo-cairo-surface-observer.functions" role="functions_proto">
<title role="functions_proto.title">Functions</title>
<informaltable pgwide="1" frame="none">
<tgroup cols="2">
<colspec colname="functions_return" colwidth="150px"/>
<colspec colname="functions_name"/>
<tbody>
<row><entry role="function_type"><link linkend="cairo-surface-t"><returnvalue>cairo_surface_t</returnvalue></link>&#160;*
</entry><entry role="function_name"><link linkend="cairo-surface-create-observer">cairo_surface_create_observer</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
</entry><entry role="function_name"><link linkend="cairo-surface-observer-add-fill-callback">cairo_surface_observer_add_fill_callback</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
</entry><entry role="function_name"><link linkend="cairo-surface-observer-add-finish-callback">cairo_surface_observer_add_finish_callback</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
</entry><entry role="function_name"><link linkend="cairo-surface-observer-add-flush-callback">cairo_surface_observer_add_flush_callback</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
</entry><entry role="function_name"><link linkend="cairo-surface-observer-add-glyphs-callback">cairo_surface_observer_add_glyphs_callback</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
</entry><entry role="function_name"><link linkend="cairo-surface-observer-add-mask-callback">cairo_surface_observer_add_mask_callback</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
</entry><entry role="function_name"><link linkend="cairo-surface-observer-add-paint-callback">cairo_surface_observer_add_paint_callback</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
</entry><entry role="function_name"><link linkend="cairo-surface-observer-add-stroke-callback">cairo_surface_observer_add_stroke_callback</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
</entry><entry role="function_name"><phrase role="c_punctuation">(</phrase><link linkend="cairo-surface-observer-callback-t">*cairo_surface_observer_callback_t</link><phrase role="c_punctuation">)</phrase>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="double"><returnvalue>double</returnvalue></link>
</entry><entry role="function_name"><link linkend="cairo-surface-observer-elapsed">cairo_surface_observer_elapsed</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
<row><entry role="function_type"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
</entry><entry role="function_name"><link linkend="cairo-surface-observer-print">cairo_surface_observer_print</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>

</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 id="cairo-cairo-surface-observer.other" role="other_proto">
<title role="other_proto.title">Types and Values</title>
<informaltable role="enum_members_table" pgwide="1" frame="none">
<tgroup cols="2">
<colspec colname="name" colwidth="150px"/>
<colspec colname="description"/>
<tbody>
<row><entry role="define_keyword">#define</entry><entry role="function_name"><link linkend="CAIRO-HAS-OBSERVER-SURFACE:CAPS">CAIRO_HAS_OBSERVER_SURFACE</link></entry></row>
<row><entry role="datatype_keyword">enum</entry><entry role="function_name"><link linkend="cairo-surface-observer-mode-t">cairo_surface_observer_mode_t</link></entry></row>

</tbody>
</tgroup>
</informaltable>
</refsect1>


<refsect1 id="cairo-cairo-surface-observer.description" role="desc">
<title role="desc.title">Description</title>

</refsect1>
<refsect1 id="cairo-cairo-surface-observer.functions_details" role="details">
<title role="details.title">Functions</title>
<refsect2 id="cairo-surface-create-observer" role="function" condition="since:1.12">
<title>cairo_surface_create_observer&#160;()</title>
<indexterm zone="cairo-surface-create-observer" role="1.12"><primary sortas="surface_create_observer">cairo_surface_create_observer</primary></indexterm>
<programlisting language="C"><link linkend="cairo-surface-t"><returnvalue>cairo_surface_t</returnvalue></link>&#160;*
cairo_surface_create_observer (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *target</parameter>,
                               <parameter><link linkend="cairo-surface-observer-mode-t"><type>cairo_surface_observer_mode_t</type></link> mode</parameter>);</programlisting>
<para>Create a new surface that exists solely to watch another is doing. In
the process it will log operations and times, which are fast, which are
slow, which are frequent, etc.</para>
<para>The <parameter>mode</parameter>
 parameter can be set to either CAIRO_SURFACE_OBSERVER_NORMAL
or CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS, to control whether or not
the internal observer should record operations.</para>
<refsect3 id="cairo-surface-create-observer.parameters" role="parameters">
<title>Parameters</title>
<informaltable role="parameters_table" pgwide="1" frame="none">
<tgroup cols="3">
<colspec colname="parameters_name" colwidth="150px"/>
<colspec colname="parameters_description"/>
<colspec colname="parameters_annotations" colwidth="200px"/>
<tbody>
<row><entry role="parameter_name"><para>target</para></entry>
<entry role="parameter_description"><para>an existing surface for which the observer will watch</para></entry>
<entry role="parameter_annotations"></entry></row>
<row><entry role="parameter_name"><para>mode</para></entry>
<entry role="parameter_description"><para>sets the mode of operation (normal vs. record)</para></entry>
<entry role="parameter_annotations"></entry></row>
</tbody></tgroup></informaltable>
</refsect3><refsect3 id="cairo-surface-create-observer.returns" role="returns">
<title>Returns</title>
<para> a pointer to the newly allocated surface. The caller
owns the surface and should call <link linkend="cairo-surface-destroy"><function>cairo_surface_destroy()</function></link> when done
with it.</para>
<para>This function always returns a valid pointer, but it will return a
pointer to a "nil" surface if <parameter>other</parameter>
is already in an error state
or any other error occurs.</para>
</refsect3><para role="since">Since: <link linkend="api-index-1.12">1.12</link></para></refsect2>
<refsect2 id="cairo-surface-observer-add-fill-callback" role="function">
<title>cairo_surface_observer_add_fill_callback&#160;()</title>
<indexterm zone="cairo-surface-observer-add-fill-callback"><primary sortas="surface_observer_add_fill_callback">cairo_surface_observer_add_fill_callback</primary></indexterm>
<programlisting language="C"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
cairo_surface_observer_add_fill_callback
                               (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *abstract_surface</parameter>,
                                <parameter><link linkend="cairo-surface-observer-callback-t"><type>cairo_surface_observer_callback_t</type></link> func</parameter>,
                                <parameter><link linkend="void"><type>void</type></link> *data</parameter>);</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-add-finish-callback" role="function">
<title>cairo_surface_observer_add_finish_callback&#160;()</title>
<indexterm zone="cairo-surface-observer-add-finish-callback"><primary sortas="surface_observer_add_finish_callback">cairo_surface_observer_add_finish_callback</primary></indexterm>
<programlisting language="C"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
cairo_surface_observer_add_finish_callback
                               (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *abstract_surface</parameter>,
                                <parameter><link linkend="cairo-surface-observer-callback-t"><type>cairo_surface_observer_callback_t</type></link> func</parameter>,
                                <parameter><link linkend="void"><type>void</type></link> *data</parameter>);</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-add-flush-callback" role="function">
<title>cairo_surface_observer_add_flush_callback&#160;()</title>
<indexterm zone="cairo-surface-observer-add-flush-callback"><primary sortas="surface_observer_add_flush_callback">cairo_surface_observer_add_flush_callback</primary></indexterm>
<programlisting language="C"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
cairo_surface_observer_add_flush_callback
                               (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *abstract_surface</parameter>,
                                <parameter><link linkend="cairo-surface-observer-callback-t"><type>cairo_surface_observer_callback_t</type></link> func</parameter>,
                                <parameter><link linkend="void"><type>void</type></link> *data</parameter>);</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-add-glyphs-callback" role="function">
<title>cairo_surface_observer_add_glyphs_callback&#160;()</title>
<indexterm zone="cairo-surface-observer-add-glyphs-callback"><primary sortas="surface_observer_add_glyphs_callback">cairo_surface_observer_add_glyphs_callback</primary></indexterm>
<programlisting language="C"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
cairo_surface_observer_add_glyphs_callback
                               (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *abstract_surface</parameter>,
                                <parameter><link linkend="cairo-surface-observer-callback-t"><type>cairo_surface_observer_callback_t</type></link> func</parameter>,
                                <parameter><link linkend="void"><type>void</type></link> *data</parameter>);</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-add-mask-callback" role="function">
<title>cairo_surface_observer_add_mask_callback&#160;()</title>
<indexterm zone="cairo-surface-observer-add-mask-callback"><primary sortas="surface_observer_add_mask_callback">cairo_surface_observer_add_mask_callback</primary></indexterm>
<programlisting language="C"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
cairo_surface_observer_add_mask_callback
                               (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *abstract_surface</parameter>,
                                <parameter><link linkend="cairo-surface-observer-callback-t"><type>cairo_surface_observer_callback_t</type></link> func</parameter>,
                                <parameter><link linkend="void"><type>void</type></link> *data</parameter>);</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-add-paint-callback" role="function">
<title>cairo_surface_observer_add_paint_callback&#160;()</title>
<indexterm zone="cairo-surface-observer-add-paint-callback"><primary sortas="surface_observer_add_paint_callback">cairo_surface_observer_add_paint_callback</primary></indexterm>
<programlisting language="C"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
cairo_surface_observer_add_paint_callback
                               (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *abstract_surface</parameter>,
                                <parameter><link linkend="cairo-surface-observer-callback-t"><type>cairo_surface_observer_callback_t</type></link> func</parameter>,
                                <parameter><link linkend="void"><type>void</type></link> *data</parameter>);</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-add-stroke-callback" role="function">
<title>cairo_surface_observer_add_stroke_callback&#160;()</title>
<indexterm zone="cairo-surface-observer-add-stroke-callback"><primary sortas="surface_observer_add_stroke_callback">cairo_surface_observer_add_stroke_callback</primary></indexterm>
<programlisting language="C"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
cairo_surface_observer_add_stroke_callback
                               (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *abstract_surface</parameter>,
                                <parameter><link linkend="cairo-surface-observer-callback-t"><type>cairo_surface_observer_callback_t</type></link> func</parameter>,
                                <parameter><link linkend="void"><type>void</type></link> *data</parameter>);</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-callback-t" role="function">
<title>cairo_surface_observer_callback_t&#160;()</title>
<indexterm zone="cairo-surface-observer-callback-t"><primary sortas="surface_observer_callback_t">cairo_surface_observer_callback_t</primary></indexterm>
<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
<phrase role="c_punctuation">(</phrase>*cairo_surface_observer_callback_t<phrase role="c_punctuation">)</phrase> (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *observer</parameter>,
                                      <parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *target</parameter>,
                                      <parameter><link linkend="void"><type>void</type></link> *data</parameter>);</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-elapsed" role="function">
<title>cairo_surface_observer_elapsed&#160;()</title>
<indexterm zone="cairo-surface-observer-elapsed"><primary sortas="surface_observer_elapsed">cairo_surface_observer_elapsed</primary></indexterm>
<programlisting language="C"><link linkend="double"><returnvalue>double</returnvalue></link>
cairo_surface_observer_elapsed (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *surface</parameter>);</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-print" role="function">
<title>cairo_surface_observer_print&#160;()</title>
<indexterm zone="cairo-surface-observer-print"><primary sortas="surface_observer_print">cairo_surface_observer_print</primary></indexterm>
<programlisting language="C"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
cairo_surface_observer_print (<parameter><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> *surface</parameter>,
                              <parameter><link linkend="cairo-write-func-t"><type>cairo_write_func_t</type></link> write_func</parameter>,
                              <parameter><link linkend="void"><type>void</type></link> *closure</parameter>);</programlisting>
</refsect2>

</refsect1>
<refsect1 id="cairo-cairo-surface-observer.other_details" role="details">
<title role="details.title">Types and Values</title>
<refsect2 id="CAIRO-HAS-OBSERVER-SURFACE:CAPS" role="macro">
<title>CAIRO_HAS_OBSERVER_SURFACE</title>
<indexterm zone="CAIRO-HAS-OBSERVER-SURFACE:CAPS"><primary sortas="HAS_OBSERVER_SURFACE">CAIRO_HAS_OBSERVER_SURFACE</primary></indexterm>
<programlisting language="C">#define CAIRO_HAS_OBSERVER_SURFACE 1
</programlisting>
</refsect2>
<refsect2 id="cairo-surface-observer-mode-t" role="enum" condition="since:1.12">
<title>enum cairo_surface_observer_mode_t</title>
<indexterm zone="cairo-surface-observer-mode-t" role="1.12"><primary sortas="surface_observer_mode_t">cairo_surface_observer_mode_t</primary></indexterm>
<para>Whether operations should be recorded.</para>
<refsect3 id="cairo-surface-observer-mode-t.members" role="enum_members">
<title>Members</title>
<informaltable role="enum_members_table" pgwide="1" frame="none">
<tgroup cols="3">
<colspec colname="enum_members_name" colwidth="300px"/>
<colspec colname="enum_members_description"/>
<colspec colname="enum_members_annotations" colwidth="200px"/>
<tbody>
<row role="constant"><entry role="enum_member_name"><para id="CAIRO-SURFACE-OBSERVER-NORMAL:CAPS">CAIRO_SURFACE_OBSERVER_NORMAL</para></entry>
<entry role="enum_member_description"><para>no recording is done</para>
</entry>
<entry role="enum_member_annotations"></entry>
</row>
<row role="constant"><entry role="enum_member_name"><para id="CAIRO-SURFACE-OBSERVER-RECORD-OPERATIONS:CAPS">CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS</para></entry>
<entry role="enum_member_description"><para>operations are recorded</para>
</entry>
<entry role="enum_member_annotations"></entry>
</row>
</tbody></tgroup></informaltable>
</refsect3><para role="since">Since: <link linkend="api-index-1.12">1.12</link></para></refsect2>

</refsect1>

</refentry>
