<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.9.1" xml:lang="en-US">
  <compounddef id="classtf_1_1TFProfObserver" kind="class" language="C++" prot="public">
    <compoundname>tf::TFProfObserver</compoundname>
    <basecompoundref refid="classtf_1_1ObserverInterface" prot="public" virt="non-virtual">tf::ObserverInterface</basecompoundref>
    <includes refid="observer_8hpp" local="no">taskflow/core/observer.hpp</includes>
    <innerclass refid="structtf_1_1TFProfObserver_1_1Summary" prot="private">tf::TFProfObserver::Summary</innerclass>
    <innerclass refid="structtf_1_1TFProfObserver_1_1TaskSummary" prot="private">tf::TFProfObserver::TaskSummary</innerclass>
    <innerclass refid="structtf_1_1TFProfObserver_1_1WorkerSummary" prot="private">tf::TFProfObserver::WorkerSummary</innerclass>
      <sectiondef kind="friend">
      <memberdef kind="friend" id="classtf_1_1TFProfObserver_1a763b2f90bc53f92d680a635fe28e858e" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>class</type>
        <definition>friend class Executor</definition>
        <argsstring></argsstring>
        <name>Executor</name>
        <param>
          <type><ref refid="classtf_1_1Executor" kindref="compound">Executor</ref></type>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="443" column="3" bodyfile="taskflow/core/observer.hpp" bodystart="443" bodyend="-1"/>
      </memberdef>
      <memberdef kind="friend" id="classtf_1_1TFProfObserver_1a7857257f009bf5cae6bda4505fffbd2d" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>class</type>
        <definition>friend class TFProfManager</definition>
        <argsstring></argsstring>
        <name>TFProfManager</name>
        <param>
          <type>TFProfManager</type>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="444" column="3" bodyfile="taskflow/core/observer.hpp" bodystart="444" bodyend="-1"/>
      </memberdef>
      </sectiondef>
      <sectiondef kind="private-attrib">
      <memberdef kind="variable" id="classtf_1_1TFProfObserver_1a38776d45d5d762b56c28c034d71170a9" prot="private" static="no" mutable="no">
        <type>Timeline</type>
        <definition>Timeline tf::TFProfObserver::_timeline</definition>
        <argsstring></argsstring>
        <name>_timeline</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="522" column="14" bodyfile="taskflow/core/observer.hpp" bodystart="522" bodyend="-1"/>
      </memberdef>
      <memberdef kind="variable" id="classtf_1_1TFProfObserver_1a07f9db5edc30436d8ec55bdaecca5aaa" prot="private" static="no" mutable="no">
        <type><ref refid="cpp/container/vector" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::vector</ref>&lt; <ref refid="cpp/container/stack" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::stack</ref>&lt; <ref refid="namespacetf_1a8cff4bbd797dde4dfab096c3cc657833" kindref="member">observer_stamp_t</ref> &gt; &gt;</type>
        <definition>std::vector&lt;std::stack&lt;observer_stamp_t&gt; &gt; tf::TFProfObserver::_stacks</definition>
        <argsstring></argsstring>
        <name>_stacks</name>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="524" column="17" bodyfile="taskflow/core/observer.hpp" bodystart="524" bodyend="-1"/>
      </memberdef>
      </sectiondef>
      <sectiondef kind="public-func">
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1a9f1e839e2a8d3abd0b91ac454f0d078b" prot="public" static="no" const="yes" explicit="no" inline="yes" virt="non-virtual">
        <type>void</type>
        <definition>void tf::TFProfObserver::dump</definition>
        <argsstring>(std::ostream &amp;ostream) const</argsstring>
        <name>dump</name>
        <param>
          <type><ref refid="cpp/io/basic_ostream" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::ostream</ref> &amp;</type>
          <declname>ostream</declname>
        </param>
        <briefdescription>
<para>dumps the timelines into a <ulink url="https://taskflow.github.io/tfprof/">Taskflow Profiler</ulink> format through an output stream </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="488" column="10" bodyfile="taskflow/core/observer.hpp" bodystart="725" bodyend="795"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1a59e82cb3f9b0ada38aa1ddea14f14d02" prot="public" static="no" const="yes" explicit="no" inline="yes" virt="non-virtual">
        <type><ref refid="cpp/string/basic_string" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::string</ref></type>
        <definition>std::string tf::TFProfObserver::dump</definition>
        <argsstring>() const</argsstring>
        <name>dump</name>
        <briefdescription>
<para>dumps the timelines into a JSON string </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="493" column="17" bodyfile="taskflow/core/observer.hpp" bodystart="798" bodyend="802"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1a6102cedbaf2e40f8b8ff916827297198" prot="public" static="no" const="yes" explicit="no" inline="yes" virt="non-virtual">
        <type>void</type>
        <definition>void tf::TFProfObserver::summary</definition>
        <argsstring>(std::ostream &amp;ostream) const</argsstring>
        <name>summary</name>
        <param>
          <type><ref refid="cpp/io/basic_ostream" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::ostream</ref> &amp;</type>
          <declname>ostream</declname>
        </param>
        <briefdescription>
<para>shows the summary report through an output stream </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="498" column="10" bodyfile="taskflow/core/observer.hpp" bodystart="805" bodyend="893"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1a6f12a927a328bd594cf6c3c3a6bfe992" prot="public" static="no" const="yes" explicit="no" inline="yes" virt="non-virtual">
        <type><ref refid="cpp/string/basic_string" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::string</ref></type>
        <definition>std::string tf::TFProfObserver::summary</definition>
        <argsstring>() const</argsstring>
        <name>summary</name>
        <briefdescription>
<para>returns the summary report in a string </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="503" column="17" bodyfile="taskflow/core/observer.hpp" bodystart="896" bodyend="900"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1a5e1f63034a96a5a79cef6da412efd203" prot="public" static="no" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>void</type>
        <definition>void tf::TFProfObserver::clear</definition>
        <argsstring>()</argsstring>
        <name>clear</name>
        <briefdescription>
<para>clears the timeline data </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="508" column="10" bodyfile="taskflow/core/observer.hpp" bodystart="713" bodyend="722"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1a8b3b0bee8762af654cfebd2bb2ee98ed" prot="public" static="no" const="yes" explicit="no" inline="yes" virt="non-virtual">
        <type>size_t</type>
        <definition>size_t tf::TFProfObserver::num_tasks</definition>
        <argsstring>() const</argsstring>
        <name>num_tasks</name>
        <briefdescription>
<para>queries the number of tasks observed </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="513" column="12" bodyfile="taskflow/core/observer.hpp" bodystart="903" bodyend="911"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1a62ccf28199e35748903559848072fc29" prot="public" static="no" const="yes" explicit="no" inline="yes" virt="non-virtual">
        <type>size_t</type>
        <definition>size_t tf::TFProfObserver::num_workers</definition>
        <argsstring>() const</argsstring>
        <name>num_workers</name>
        <briefdescription>
<para>queries the number of observed workers </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="518" column="12" bodyfile="taskflow/core/observer.hpp" bodystart="914" bodyend="920"/>
      </memberdef>
      </sectiondef>
      <sectiondef kind="private-func">
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1aa030d8154dd03aea3b8fa8ce42e1151b" prot="private" static="no" const="no" explicit="no" inline="yes" final="yes" virt="virtual">
        <type>void</type>
        <definition>void tf::TFProfObserver::set_up</definition>
        <argsstring>(size_t num_workers) override final</argsstring>
        <name>set_up</name>
        <reimplements refid="classtf_1_1ObserverInterface_1a41e6e62f12bf9d9dc4fa74632f6825d9">set_up</reimplements>
        <param>
          <type>size_t</type>
          <declname>num_workers</declname>
        </param>
        <briefdescription>
<para>constructor-like method to call when the executor observer is fully created </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>num_workers</parametername>
</parameternamelist>
<parameterdescription>
<para>the number of the worker threads in the executor </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="526" column="17" bodyfile="taskflow/core/observer.hpp" bodystart="681" bodyend="686"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1a5debfce27f7e012d22872c134b261c63" prot="private" static="no" const="no" explicit="no" inline="yes" final="yes" virt="virtual">
        <type>void</type>
        <definition>void tf::TFProfObserver::on_entry</definition>
        <argsstring>(WorkerView, TaskView) override final</argsstring>
        <name>on_entry</name>
        <reimplements refid="classtf_1_1ObserverInterface_1a8225fcacb03089677a1efc4b16b734cc">on_entry</reimplements>
        <param>
          <type><ref refid="classtf_1_1WorkerView" kindref="compound">WorkerView</ref></type>
          <declname>wv</declname>
        </param>
        <param>
          <type><ref refid="classtf_1_1TaskView" kindref="compound">TaskView</ref></type>
          <declname>task_view</declname>
        </param>
        <briefdescription>
<para>method to call before a worker thread executes a closure </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>wv</parametername>
</parameternamelist>
<parameterdescription>
<para>an immutable view of this worker thread </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>task_view</parametername>
</parameternamelist>
<parameterdescription>
<para>a constant wrapper object to the task </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="527" column="17" bodyfile="taskflow/core/observer.hpp" bodystart="689" bodyend="691"/>
      </memberdef>
      <memberdef kind="function" id="classtf_1_1TFProfObserver_1af3a1630b5b1db5341a239a5d4c12c891" prot="private" static="no" const="no" explicit="no" inline="yes" final="yes" virt="virtual">
        <type>void</type>
        <definition>void tf::TFProfObserver::on_exit</definition>
        <argsstring>(WorkerView, TaskView) override final</argsstring>
        <name>on_exit</name>
        <reimplements refid="classtf_1_1ObserverInterface_1aa22f5378154653f08d9a58326bda4754">on_exit</reimplements>
        <param>
          <type><ref refid="classtf_1_1WorkerView" kindref="compound">WorkerView</ref></type>
          <declname>wv</declname>
        </param>
        <param>
          <type><ref refid="classtf_1_1TaskView" kindref="compound">TaskView</ref></type>
          <declname>task_view</declname>
        </param>
        <briefdescription>
<para>method to call after a worker thread executed a closure </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>wv</parametername>
</parameternamelist>
<parameterdescription>
<para>an immutable view of this worker thread </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>task_view</parametername>
</parameternamelist>
<parameterdescription>
<para>a constant wrapper object to the task </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="taskflow/core/observer.hpp" line="528" column="17" bodyfile="taskflow/core/observer.hpp" bodystart="694" bodyend="710"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>class to create an observer based on the built-in taskflow profiler format </para>
    </briefdescription>
    <detaileddescription>
<para>A <ref refid="classtf_1_1TFProfObserver" kindref="compound">tf::TFProfObserver</ref> inherits <ref refid="classtf_1_1ObserverInterface" kindref="compound">tf::ObserverInterface</ref> and defines methods to dump the observed thread activities into a format that can be visualized through <ulink url="https://taskflow.github.io/tfprof/">Taskflow Profiler</ulink>.</para>
<para><programlisting filename=".cpp"><codeline><highlight class="normal"><ref refid="classtf_1_1Taskflow" kindref="compound">tf::Taskflow</ref><sp/>taskflow;</highlight></codeline>
<codeline><highlight class="normal"><ref refid="classtf_1_1Executor" kindref="compound">tf::Executor</ref><sp/>executor;</highlight></codeline>
<codeline><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal"></highlight><highlight class="comment">//<sp/>insert<sp/>tasks<sp/>into<sp/>taskflow</highlight><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal"></highlight><highlight class="comment">//<sp/>...</highlight><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/></highlight></codeline>
<codeline><highlight class="normal"></highlight><highlight class="comment">//<sp/>create<sp/>a<sp/>custom<sp/>observer</highlight><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal"><ref refid="cpp/memory/shared_ptr" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::shared_ptr&lt;tf::TFProfObserver&gt;</ref><sp/>observer<sp/>=<sp/>executor.<ref refid="classtf_1_1Executor_1ab5a793a0f2ce41cd49ca45e9f0a6962c" kindref="member">make_observer</ref>&lt;<ref refid="classtf_1_1TFProfObserver" kindref="compound">tf::TFProfObserver</ref>&gt;();</highlight></codeline>
<codeline><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal"></highlight><highlight class="comment">//<sp/>run<sp/>the<sp/>taskflow</highlight><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal">executor.<ref refid="classtf_1_1Executor_1a8d08f0cb79e7b3780087975d13368a96" kindref="member">run</ref>(taskflow).wait();</highlight></codeline>
<codeline><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal"></highlight><highlight class="comment">//<sp/>dump<sp/>the<sp/>thread<sp/>activities<sp/>to<sp/>Taskflow<sp/>Profiler<sp/>format.</highlight><highlight class="normal"></highlight></codeline>
<codeline><highlight class="normal">observer-&gt;dump(<ref refid="cpp/io/basic_ostream" kindref="compound" external="/home/thuang295/Code/taskflow/doxygen/cppreference-doxygen-web.tag.xml">std::cout</ref>);</highlight></codeline>
</programlisting> </para>
    </detaileddescription>
    <inheritancegraph>
      <node id="2">
        <label>tf::ObserverInterface</label>
        <link refid="classtf_1_1ObserverInterface"/>
      </node>
      <node id="1">
        <label>tf::TFProfObserver</label>
        <link refid="classtf_1_1TFProfObserver"/>
        <childnode refid="2" relation="public-inheritance">
        </childnode>
      </node>
    </inheritancegraph>
    <collaborationgraph>
      <node id="2">
        <label>tf::ObserverInterface</label>
        <link refid="classtf_1_1ObserverInterface"/>
      </node>
      <node id="1">
        <label>tf::TFProfObserver</label>
        <link refid="classtf_1_1TFProfObserver"/>
        <childnode refid="2" relation="public-inheritance">
        </childnode>
      </node>
    </collaborationgraph>
    <location file="taskflow/core/observer.hpp" line="441" column="1" bodyfile="taskflow/core/observer.hpp" bodystart="441" bodyend="529"/>
    <listofallmembers>
      <member refid="classtf_1_1TFProfObserver_1a07f9db5edc30436d8ec55bdaecca5aaa" prot="private" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>_stacks</name></member>
      <member refid="classtf_1_1TFProfObserver_1a38776d45d5d762b56c28c034d71170a9" prot="private" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>_timeline</name></member>
      <member refid="classtf_1_1TFProfObserver_1a5e1f63034a96a5a79cef6da412efd203" prot="public" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>clear</name></member>
      <member refid="classtf_1_1TFProfObserver_1a9f1e839e2a8d3abd0b91ac454f0d078b" prot="public" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>dump</name></member>
      <member refid="classtf_1_1TFProfObserver_1a59e82cb3f9b0ada38aa1ddea14f14d02" prot="public" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>dump</name></member>
      <member refid="classtf_1_1TFProfObserver_1a763b2f90bc53f92d680a635fe28e858e" prot="private" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>Executor</name></member>
      <member refid="classtf_1_1TFProfObserver_1a8b3b0bee8762af654cfebd2bb2ee98ed" prot="public" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>num_tasks</name></member>
      <member refid="classtf_1_1TFProfObserver_1a62ccf28199e35748903559848072fc29" prot="public" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>num_workers</name></member>
      <member refid="classtf_1_1TFProfObserver_1a5debfce27f7e012d22872c134b261c63" prot="private" virt="virtual"><scope>tf::TFProfObserver</scope><name>on_entry</name></member>
      <member refid="classtf_1_1TFProfObserver_1af3a1630b5b1db5341a239a5d4c12c891" prot="private" virt="virtual"><scope>tf::TFProfObserver</scope><name>on_exit</name></member>
      <member refid="classtf_1_1TFProfObserver_1aa030d8154dd03aea3b8fa8ce42e1151b" prot="private" virt="virtual"><scope>tf::TFProfObserver</scope><name>set_up</name></member>
      <member refid="classtf_1_1TFProfObserver_1a6102cedbaf2e40f8b8ff916827297198" prot="public" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>summary</name></member>
      <member refid="classtf_1_1TFProfObserver_1a6f12a927a328bd594cf6c3c3a6bfe992" prot="public" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>summary</name></member>
      <member refid="classtf_1_1TFProfObserver_1a7857257f009bf5cae6bda4505fffbd2d" prot="private" virt="non-virtual"><scope>tf::TFProfObserver</scope><name>TFProfManager</name></member>
      <member refid="classtf_1_1ObserverInterface_1adfd71c3af3ae2ea4f41eed26c1b6f604" prot="public" virt="virtual"><scope>tf::TFProfObserver</scope><name>~ObserverInterface</name></member>
    </listofallmembers>
  </compounddef>
</doxygen>
