Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49d44ef1 authored by Glenn Kasten's avatar Glenn Kasten Committed by Android (Google) Code Review
Browse files

Merge "Flowchart for handling of AudioTrack client paused"

parents b187de1a 3957ebae
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
paused.png : paused.dot
	dot -Tpng < $< > $@
+73 −0
Original line number Diff line number Diff line
digraph paused {
initial [label="INITIAL\n\
mIgnoreNextPausedInt = false\n\
mPaused = false\n\
mPausedInt = false"];

resume_body [label="mIgnoreNextPausedInt = true\nif (mPaused || mPausedInt)"];
resume_paused [label="mPaused = false\nmPausedInt = false\nsignal()"];
resume_paused -> resume_merged;
resume_merged [label="return"];

Application -> ATstop;
ATstop [label="AudioTrack::stop()"];
ATstop -> pause;
Application -> ATpause;
ATpause [label="AudioTrack::pause()"];
ATpause -> pause;
ATstart -> resume;
ATstart [label="AudioTrack::start()"];
destructor [label="~AudioTrack()"];
destructor -> requestExit;
requestExit [label="AudioTrackThread::requestExit()"];
requestExit -> resume;
Application -> ATstart;

resume [label="AudioTrackThread::resume()"];
resume -> resume_body;

resume_body -> resume_paused [label="true"];
resume_body -> resume_merged [label="false"];

pause [label="mPaused = true"];
pause -> return;

threadLoop [label="AudioTrackThread::threadLoop()\nENTRY"];
threadLoop -> threadLoop_1;
threadLoop_1 [label="if (mPaused)"];
threadLoop_1 -> threadLoop_1_true [label="true"];
threadLoop_1 -> threadLoop_2 [label="false"];
threadLoop_1_true [label="wait()\nreturn true"];
threadLoop_2 [label="if (mIgnoreNextPausedInt)"];
threadLoop_2 -> threadLoop_2_true [label="true"];
threadLoop_2 -> threadLoop_3 [label="false"];
threadLoop_2_true [label="mIgnoreNextPausedInt = false\nmPausedInt = false"];
threadLoop_2_true -> threadLoop_3;
threadLoop_3 [label="if (mPausedInt)"];
threadLoop_3 -> threadLoop_3_true [label="true"];
threadLoop_3 -> threadLoop_4 [label="false"];
threadLoop_3_true [label="wait()\nmPausedInt = false\nreturn true"];
threadLoop_4 [label="if (exitPending)"];
threadLoop_4 -> threadLoop_4_true [label="true"];
threadLoop_4 -> threadLoop_5 [label="false"];
threadLoop_4_true [label="return false"];
threadLoop_5 [label="ns = processAudioBuffer()"];
threadLoop_5 -> threadLoop_6;
threadLoop_6 [label="case ns"];
threadLoop_6 -> threadLoop_6_0 [label="0"];
threadLoop_6 -> threadLoop_6_NS_INACTIVE [label="NS_INACTIVE"];
threadLoop_6 -> threadLoop_6_NS_NEVER [label="NS_NEVER"];
threadLoop_6 -> threadLoop_6_NS_WHENEVER [label="NS_WHENEVER"];
threadLoop_6 -> threadLoop_6_default [label="default"];
threadLoop_6_default [label="if (ns < 0)"];
threadLoop_6_default -> threadLoop_6_default_true [label="true"];
threadLoop_6_default -> threadLoop_6_default_false [label="false"];
threadLoop_6_default_true [label="FATAL"];
threadLoop_6_default_false [label="pauseInternal(ns)\nmPausedInternal = true\nmPausedNs = ns\nreturn true"];
threadLoop_6_0 [label="return true"];
threadLoop_6_NS_INACTIVE [label="pauseInternal()\nmPausedInternal = true\nmPausedNs = 0\nreturn true"];
threadLoop_6_NS_NEVER [label="return false"];
threadLoop_6_NS_WHENEVER [label="ns = 1s"];
threadLoop_6_NS_WHENEVER -> threadLoop_6_default_false;

}