Driver: Implement audio scheduler (#179)
This PR implements a custom scheduler for audio threads, which reduces thread use and (often) memory consumption. To save threads and memory (e.g., packet buffer allocations), Songbird parks Mixer tasks which do not have any live Tracks. These are now all co-located on a single async 'Idle' task. This task is responsible for managing UDP keepalive messages for each task, maintaining event state, and executing any Mixer task messages. Whenever any message arrives which adds a `Track`, the mixer task is moved to a live thread. The Idle task inspects task counts and execution time on each thread, choosing the first live thread with room, and creating a new one if needed. Each live thread is responsible for running as many live mixers as it can in a single tick every 20ms: this currently defaults to 16 mixers per thread, but is user-configurable. A live thread also stores RTP packet blocks to be written into by each sub-task. Each live thread has a conservative limit of 18ms that it will aim to stay under: if all work takes longer than this, it will offload the task with the highest mixing cost once per tick onto another (possibly new) live worker thread.
This commit is contained in:
329
images/scheduler.svg
Normal file
329
images/scheduler.svg
Normal file
@@ -0,0 +1,329 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 1375 1307" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
|
||||
<g transform="matrix(1,0,0,1,-2132,-380)">
|
||||
<g transform="matrix(0.960543,0,0,1,2128.12,-622.183)">
|
||||
<path d="M89.27,1672.76L1407.47,1672.76" style="fill:none;stroke:rgb(186,186,186);stroke-width:3.97px;stroke-dasharray:39.71,39.71,0,0;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1783.91,-585.183)">
|
||||
<text x="409.473px" y="1589.56px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">As<tspan x="460.973px " y="1589.56px ">y</tspan>nc</text>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1783.91,-468.47)">
|
||||
<text x="409.473px" y="1589.56px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">S<tspan x="435.723px " y="1589.56px ">y</tspan>nc</text>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1536.27,-1077.6)">
|
||||
<g transform="matrix(1.75342,0,0,1.61288,854.748,-134.087)">
|
||||
<rect x="101.876" y="1143.29" width="184.054" height="163.884" style="fill:rgb(255,193,74);stroke:rgb(62,62,62);stroke-width:2.31px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,931.504,566.618)">
|
||||
<text x="140.064px" y="1193.29px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Idl<tspan x="198.864px " y="1193.29px ">e</tspan> Mix<tspan x="316.764px 344.264px 363.064px " y="1193.29px 1193.29px 1193.29px ">ers</tspan></text>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,91.9551,9.9189)">
|
||||
<g opacity="0.5">
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.793,1148.74)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:black;stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="806.428px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;stroke:black;stroke-opacity:0;stroke-width:1.98px;stroke-linecap:butt;stroke-miterlimit:2;">...</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.011,1098.98)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:black;stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;stroke:black;stroke-opacity:0;stroke-width:1.98px;stroke-linecap:butt;stroke-miterlimit:2;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.047,1049.39)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:black;stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;stroke:black;stroke-opacity:0;stroke-width:1.98px;stroke-linecap:butt;stroke-miterlimit:2;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,31.9551,9.9189)">
|
||||
<g opacity="0.69">
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.793,1148.74)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="806.428px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">...</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.011,1098.98)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.047,1049.39)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,-28.0449,9.9189)">
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.793,1148.74)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="806.428px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">...</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.011,1098.98)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.047,1049.39)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1289.87,-560.521)">
|
||||
<g transform="matrix(2.86943,0,0,1.72283,741.053,-259.784)">
|
||||
<rect x="101.876" y="1143.29" width="184.054" height="163.884" style="fill:rgb(234,234,234);stroke:rgb(62,62,62);stroke-width:1.65px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,193.864,60.8467)">
|
||||
<g transform="matrix(1.75342,0,0,1.27206,854.748,255.576)">
|
||||
<rect x="101.876" y="1143.29" width="184.054" height="163.884" style="fill:rgb(219,219,219);stroke:rgb(62,62,62);stroke-width:2.54px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,931.504,566.618)">
|
||||
<text x="160.901px" y="1183.91px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:37.5px;">Thr<tspan x="216.364px " y="1183.91px ">e</tspan>ad P<tspan x="310.789px " y="1183.91px ">o</tspan>ol</text>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,767.748,1105.66)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="806.428px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">...</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,-31.0449,9.9189)">
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.047,1049.39)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="770.503px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Seek</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,854.011,1048.98)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="719.778px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">C<tspan x="747.278px " y="1473.58px ">o</tspan>mpose</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,931.504,566.618)">
|
||||
<g id="Live">
|
||||
<text x="140.085px" y="1190.16px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:45.833px;">Liv<tspan x="197.926px " y="1190.16px ">e</tspan> Mix<tspan x="306.001px 331.21px 348.443px " y="1190.16px 1190.16px 1190.16px ">ers</tspan> Thr<tspan x="449.78px " y="1190.16px ">e</tspan>ad #</text>
|
||||
<text x="563.218px" y="1190.16px" style="font-family:'FiraSans-Italic', 'Fira Sans', sans-serif;font-style:italic;font-size:45.833px;">1</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,-28.0449,19.9189)">
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.793,1148.74)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="806.428px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">...</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.011,1098.98)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.047,1049.39)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1929.87,-560.521)">
|
||||
<g transform="matrix(2.86943,0,0,1.72283,741.053,-259.784)">
|
||||
<rect x="101.876" y="1143.29" width="184.054" height="163.884" style="fill:rgb(234,234,234);stroke:rgb(62,62,62);stroke-width:1.65px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,193.864,60.8467)">
|
||||
<g transform="matrix(1.75342,0,0,1.27206,854.748,255.576)">
|
||||
<rect x="101.876" y="1143.29" width="184.054" height="163.884" style="fill:rgb(219,219,219);stroke:rgb(62,62,62);stroke-width:2.54px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,931.504,566.618)">
|
||||
<text x="160.901px" y="1183.91px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:37.5px;">Thr<tspan x="216.364px " y="1183.91px ">e</tspan>ad P<tspan x="310.789px " y="1183.91px ">o</tspan>ol</text>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,767.748,1105.66)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="806.428px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">...</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,-31.0449,9.9189)">
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.047,1049.39)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="770.503px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Seek</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,854.011,1048.98)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="719.778px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">C<tspan x="747.278px " y="1473.58px ">o</tspan>mpose</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,931.504,566.618)">
|
||||
<g id="Live1" serif:id="Live">
|
||||
<text x="136.578px" y="1190.16px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:45.833px;">Liv<tspan x="194.42px " y="1190.16px ">e</tspan> Mix<tspan x="302.495px 327.703px 344.937px " y="1190.16px 1190.16px 1190.16px ">ers</tspan> Thr<tspan x="446.274px " y="1190.16px ">e</tspan>ad #</text>
|
||||
<text x="559.712px" y="1190.16px" style="font-family:'FiraSans-Italic', 'Fira Sans', sans-serif;font-style:italic;font-size:45.833px;">n</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,-28.0449,19.9189)">
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.793,1148.74)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="806.428px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">...</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.011,1098.98)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.506003,0,0,0.506003,744.047,1049.39)">
|
||||
<g transform="matrix(1.01835,0,0,1.01835,-11.9813,-27.0542)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:white;stroke:rgb(62,62,62);stroke-width:7.56px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,9,40.3406)">
|
||||
<text x="762.453px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Mix<tspan x="839.603px " y="1473.58px ">e</tspan>r</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,1738.24,98.1256)">
|
||||
<g transform="matrix(0.924892,0,0,0.924892,52.9138,113.02)">
|
||||
<ellipse cx="829.267" cy="1498.79" rx="134.889" ry="73.117" style="fill:rgb(255,193,74);stroke:rgb(62,62,62);stroke-width:4.21px;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,-3,40.3406)">
|
||||
<text x="725.078px" y="1473.58px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:50px;">Disposer</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,197.756,-121.243)">
|
||||
<text x="2142px" y="812.69px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:45.833px;">New</text>
|
||||
<text x="2056.32px" y="858.523px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:45.833px;">Mix<tspan x="2127.04px 2152.24px 2168.1px " y="858.523px 858.523px 858.523px ">er/</tspan>Driv<tspan x="2274.16px " y="858.523px ">e</tspan>r</text>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,-54,0)">
|
||||
<g transform="matrix(0.595906,-0.803054,0.803054,0.595906,473.641,2339.83)">
|
||||
<text x="2195.9px" y="837.915px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:41.667px;">Cr<tspan x="2234.9px " y="837.915px ">e</tspan>at<tspan x="2295.11px " y="837.915px ">e</tspan></text>
|
||||
</g>
|
||||
<g transform="matrix(-0.39895,0.55751,-0.616407,-0.441096,2749.77,876.339)">
|
||||
<path d="M212.72,146.182L212.72,132.063L519.412,132.063L519.412,103.825L540.487,139.123L519.412,174.421L519.412,146.182L212.72,146.182Z" style="fill:rgb(62,62,62);"/>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,30,0)">
|
||||
<g transform="matrix(0.597416,-0.801932,0.801932,0.597416,474.195,2407.65)">
|
||||
<text x="2237.19px" y="855.933px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:37.5px;">Schedul<tspan x="2373.02px " y="855.933px ">e</tspan> Mix<tspan x="2461.44px " y="855.933px ">e</tspan>r</text>
|
||||
</g>
|
||||
<g transform="matrix(-0.39895,0.55751,-0.616407,-0.441096,2839.77,876.339)">
|
||||
<path d="M212.72,146.182L212.72,132.063L519.412,132.063L519.412,103.825L540.487,139.123L519.412,174.421L519.412,146.182L212.72,146.182Z" style="fill:rgb(0,145,255);"/>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(-0.204144,0.285279,-0.616407,-0.441096,2849.16,1445.1)">
|
||||
<path d="M212.72,146.182L212.72,132.063L499.302,132.063L499.302,103.825L540.487,139.123L499.302,174.421L499.302,146.182L212.72,146.182Z" style="fill:rgb(0,145,255);"/>
|
||||
</g>
|
||||
<g transform="matrix(-0.757756,0.466024,-0.397074,-0.645643,3152.8,1402.47)">
|
||||
<path d="M212.72,146.182L212.72,132.063L524.246,132.063L524.246,103.825L540.487,139.123L524.246,174.421L524.246,146.182L212.72,146.182Z" style="fill:rgb(0,145,255);"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,30,0)">
|
||||
<g transform="matrix(0.592937,-0.805249,0.805249,0.592937,936.176,2440.92)">
|
||||
<text x="2058.5px" y="551.43px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:41.667px;">Deschedul<tspan x="2255.92px " y="551.43px ">e</tspan></text>
|
||||
</g>
|
||||
<g transform="matrix(-0.39895,0.55751,-0.616407,-0.441096,2929.77,876.339)">
|
||||
<path d="M251.747,146.182L251.747,174.421L212.72,139.123L251.747,103.825L251.747,132.063L540.487,132.063L540.487,146.182L251.747,146.182Z" style="fill:rgb(0,145,255);"/>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,554.954,389.188)">
|
||||
<text x="2256.37px" y="574.853px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:41.667px;">M<tspan x="2289.33px 2312.83px 2332.91px " y="574.853px 574.853px 574.853px ">ove</tspan> Mix<tspan x="2431.16px " y="574.853px ">e</tspan>r</text>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,37.8377,-12.6126)">
|
||||
<text x="2840.19px" y="1319.22px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:64.865px;">...</text>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,2011.31,633.864)">
|
||||
<path d="M212.72,146.182L212.72,132.063L521.426,132.063L521.426,103.825L540.487,139.123L521.426,174.421L521.426,146.182L212.72,146.182Z" style="fill:rgb(62,62,62);"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,530,0)">
|
||||
<g transform="matrix(-0.39895,0.55751,-0.616407,-0.441096,2249.77,876.339)">
|
||||
<path d="M212.72,146.182L212.72,132.063L519.412,132.063L519.412,103.825L540.487,139.123L519.412,174.421L519.412,146.182L212.72,146.182Z" style="fill:rgb(62,62,62);"/>
|
||||
</g>
|
||||
<g transform="matrix(0.595906,-0.803054,0.803054,0.595906,-21.9714,2325.42)">
|
||||
<text x="2184.79px" y="837.915px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:41.667px;">Destr<tspan x="2284.71px 2308.63px " y="837.915px 837.915px ">oy</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,-0,-0,1,2132,380)">
|
||||
<path d="M926.251,688.123L929.33,726.605L896.697,705.978L926.251,688.123Z" style="fill:rgb(0,145,255);"/>
|
||||
<path d="M612.214,726.605C612.214,726.605 754.971,452.986 915.045,702.961" style="fill:none;stroke:rgb(0,145,255);stroke-width:11.51px;stroke-linecap:butt;"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,2112.36,364.866)">
|
||||
<g transform="matrix(1,0,0,1,299,-52.947)">
|
||||
<path d="M212.72,146.182L212.72,132.063L521.426,132.063L521.426,103.825L540.487,139.123L521.426,174.421L521.426,146.182L212.72,146.182Z" style="fill:rgb(62,62,62);"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,-168.926,12.6064)">
|
||||
<text x="235.411px" y="98.782px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:75px;">Int<tspan x="327.811px 369.061px 396.511px " y="98.782px 98.782px 98.782px ">era</tspan>ction</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,2112.36,443.866)">
|
||||
<g transform="matrix(1,0,0,1,299,-52.947)">
|
||||
<path d="M212.72,146.182L212.72,132.063L521.426,132.063L521.426,103.825L540.487,139.123L521.426,174.421L521.426,146.182L212.72,146.182Z" style="fill:rgb(0,145,255);"/>
|
||||
</g>
|
||||
<g transform="matrix(1,0,0,1,-168.926,12.6064)">
|
||||
<text x="235.411px" y="98.782px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:75px;">M<tspan x="294.736px " y="98.782px ">e</tspan>ssag<tspan x="485.086px " y="98.782px ">e</tspan>s</text>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.849915,-0.52692,0.52692,0.849915,-377.877,1731.84)">
|
||||
<text x="2720.74px" y="1522.82px" style="font-family:'FiraSans-Regular', 'Fira Sans', sans-serif;font-size:41.667px;">T<tspan x="2738.95px 2754.2px " y="1522.82px 1522.82px ">ra</tspan>ck cl<tspan x="2860.87px " y="1522.82px ">e</tspan>anup</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 26 KiB |
Reference in New Issue
Block a user