Skip to content

Instantly share code, notes, and snippets.

@BigRedEye
Last active September 7, 2021 04:35
Show Gist options
  • Save BigRedEye/4cef5aeba06817780d403ef397829bdd to your computer and use it in GitHub Desktop.
Save BigRedEye/4cef5aeba06817780d403ef397829bdd to your computer and use it in GitHub Desktop.
Stupid driver

Rust is faster than {C,C++,You name it}

The benchmark itself is slow, actual difference in performance is much higher.

$ make benchmark
...
/usr/bin/clang++ --version
clang version 12.0.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

/usr/bin/clang --version
clang version 12.0.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

rustc --version
rustc 1.54.0 (a178d0322 2021-07-26)
...
hyperfine \
	'benchmark/target/release/benchmark ./libmydriver-c.so' \
	'benchmark/target/release/benchmark ./libmydriver-c-fast.so' \
	'benchmark/target/release/benchmark ./libmydriver-cpp.so' \
	'benchmark/target/release/benchmark ./libmydriver-rs.so'
Benchmark #1: benchmark/target/release/benchmark ./libmydriver-c.so
  Time (mean ± σ):      1.417 s ±  0.015 s    [User: 1.415 s, System: 0.002 s]
  Range (min … max):    1.395 s …  1.452 s    10 runs
 
Benchmark #2: benchmark/target/release/benchmark ./libmydriver-c-fast.so
  Time (mean ± σ):     343.1 ms ±  19.8 ms    [User: 340.3 ms, System: 2.9 ms]
  Range (min … max):   321.7 ms … 376.5 ms    10 runs
 
Benchmark #3: benchmark/target/release/benchmark ./libmydriver-cpp.so
  Time (mean ± σ):     308.0 ms ±  15.3 ms    [User: 307.5 ms, System: 0.9 ms]
  Range (min … max):   290.5 ms … 338.2 ms    10 runs
 
Benchmark #4: benchmark/target/release/benchmark ./libmydriver-rs.so
  Time (mean ± σ):      1.249 s ±  0.026 s    [User: 1.249 s, System: 0.001 s]
  Range (min … max):    1.206 s …  1.276 s    10 runs
 
Summary
  'benchmark/target/release/benchmark ./libmydriver-cpp.so' ran
    1.11 ± 0.08 times faster than 'benchmark/target/release/benchmark ./libmydriver-c-fast.so'
    4.06 ± 0.22 times faster than 'benchmark/target/release/benchmark ./libmydriver-rs.so'
    4.60 ± 0.23 times faster than 'benchmark/target/release/benchmark ./libmydriver-c.so'

Building

Run make fold_dirs before build (gist does not support directories)

# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "benchmark"
version = "0.1.0"
dependencies = [
"libloading",
]
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "libloading"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a"
dependencies = [
"cfg-if",
"winapi",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[package]
name = "benchmark"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
libloading = "0.7.0"
use libloading::{Library, Symbol};
#[derive(Debug)]
#[repr(C)]
struct Data {
port: [i8; 20],
status: i32,
value: [i8; 256],
}
type GetBulk = fn() -> i32;
type GetNextResult = fn() -> &'static Data;
fn benchmark(library_path: &str, iterations: u64) {
let lib = unsafe { Library::new(library_path) }.unwrap();
let get_bulk: Symbol<GetBulk> = unsafe { lib.get(b"get_bulk") }.unwrap();
let get_next_result: Symbol<GetNextResult> = unsafe { lib.get(b"get_next_result") }.unwrap();
let free_result: Symbol<fn()> = unsafe { lib.get(b"free_result") }.unwrap();
let start = std::time::Instant::now();
for _ in 0..iterations {
let count = get_bulk();
assert_eq!(count, 100);
for x in 0..count {
let data = get_next_result();
let port = unsafe { std::ffi::CStr::from_ptr(data.port.as_ptr()) }
.to_str()
.unwrap();
let value = unsafe { std::ffi::CStr::from_ptr(data.value.as_ptr()) }
.to_str()
.unwrap();
assert_eq!(data.status, x);
debug_assert_eq!(port, format!("PORT {}", x + 1));
debug_assert_eq!(value, format!("VALUE FOR {}", x + 1));
}
free_result();
}
let spent = start.elapsed();
println!(
"{}: {} ({} iters/s)",
library_path.rsplit("/").next().unwrap(),
spent.as_secs_f64(),
(iterations as f64 / spent.as_secs_f64()) as u64
);
}
fn main() {
for path in std::env::args().skip(1) {
benchmark(&path, 100000);
}
}
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Data {
char port[20];
int status;
char value[256];
};
struct Data *Result;
int current_result = 0;
static int itoa(int val, char* buf) {
const unsigned int radix = 10;
char* p;
unsigned int a; //every digit
int len;
char* b; //start of the digit char
char temp;
unsigned int u;
p = buf;
if (val < 0) {
*p++ = '-';
val = 0 - val;
}
u = (unsigned int)val;
b = p;
do {
a = u % radix;
u /= radix;
*p++ = a + '0';
} while (u > 0);
len = (int)(p - buf);
*p-- = 0;
//swap
do {
temp = *p;
*p = *b;
*b = temp;
--p;
++b;
} while (b < p);
return len;
}
static void fill_buf_impl(char* buf, char* prefix, size_t prefix_len, int value) {
memcpy(buf, prefix, prefix_len);
int len = itoa(value, buf + prefix_len);
buf[prefix_len + len] = '\0';
}
#define fill_buf(buf, str, value) fill_buf_impl(buf, str, sizeof(str) - 1, value);
int get_bulk() {
int n = 100;
Result = malloc(n * sizeof(struct Data));
for (int i=0; i<n; i++) {
int i_label = i + 1;
fill_buf(Result[i].port, "PORT ", i_label);
Result[i].status = i;
fill_buf(Result[i].value, "VALUE FOR ", i_label);
}
return n;
}
struct Data *get_next_result() {
return &Result[current_result++];
}
void free_result() {
free(Result);
current_result = 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Data {
char port[20];
int status;
char value[256];
};
struct Data *Result;
int current_result = 0;
int get_bulk() {
int n = 100;
Result = malloc(n * sizeof(struct Data));
for (int i=0; i<n; i++) {
int i_label = i + 1;
sprintf(Result[i].port, "PORT %u", i_label);
Result[i].status = i;
sprintf(Result[i].value, "VALUE FOR %u", i_label);
}
return n;
}
struct Data *get_next_result() {
return &Result[current_result++];
}
void free_result() {
free(Result);
current_result = 0;
}
#include <charconv>
#include <cstddef>
#include <cstdlib>
#include <cstring>
#include <cassert>
namespace {
struct Data {
char port[20];
int status;
char value[256];
};
struct Data *Result = nullptr;
int current_result = 0;
template <size_t N, size_t M>
size_t format_prefix(char (&buf)[N], const char (&prefix)[M], int value) {
constexpr size_t kPrefixSizeWithoutNul = M - 1;
std::memcpy(buf, prefix, kPrefixSizeWithoutNul);
auto [ptr, errc] = std::to_chars(buf + kPrefixSizeWithoutNul, buf + N, value);
assert(errc == std::errc{});
*ptr++ = '\0';
return ptr - buf;
}
} // namespace
extern "C" int get_bulk() {
int n = 100;
Result = (Data*)std::malloc(sizeof(Data) * n);
for (int i = 0; i < n; i++) {
int i_label = i + 1;
Result[i].status = i;
format_prefix(Result[i].port, "PORT ", i_label);
format_prefix(Result[i].value, "VALUE FOR ", i_label);
}
return n;
}
extern "C" Data *get_next_result() {
return &Result[current_result++];
}
extern "C" void free_result() {
std::free(Result);
current_result = 0;
}
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "driver_rs"
version = "0.1.0"
[package]
name = "driver_rs"
version = "0.1.0"
edition = "2018"
[lib]
crate-type = ["cdylib"]
bench = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
/* build with
cargo build --release
*/
type PortName = [i8; 20];
type StateStatus = i32;
type StateValue = [i8; 256];
#[derive(Debug)]
#[repr(C)]
pub struct Data {
port: PortName,
status: StateStatus,
value: StateValue,
}
impl Data {
fn new() -> Self {
Self {
port: [0; 20],
status: -0xff,
value: [0; 256],
}
}
}
struct DataResult {
data: Vec<Data>,
current: usize,
}
impl DataResult {
unsafe fn get_next(&mut self) -> &Data {
match self.data.get(self.current) {
Some(v) => {
self.current += 1;
v
}
None => panic!("Result overflow"),
}
}
fn clear(&mut self) {
self.data.clear();
self.current = 0;
}
}
fn fill_c_string(s: &str, buf: &mut [i8]) {
let b = s.as_bytes();
if b.len() > buf.len() - 1 {
panic!("string overflow");
} else {
for i in 0..b.len() {
buf[i] = b[i] as i8;
}
buf[b.len()] = 0;
}
}
static mut D: DataResult = DataResult {
data: Vec::new(),
current: 0,
};
#[no_mangle]
pub unsafe fn get_bulk() -> i32 {
let n = 100;
D.clear();
for i in 0..n {
let i_label = i + 1;
let mut d = Data::new();
d.status = i;
fill_c_string(&format!("PORT {}", i_label), &mut d.port);
fill_c_string(&format!("VALUE FOR {}", i_label), &mut d.value);
D.data.push(d);
}
n
}
#[no_mangle]
pub unsafe fn get_next_result<'a>() -> &'a Data {
D.get_next()
}
#[no_mangle]
pub unsafe fn free_result() {
D.clear();
}
#!/usr/bin/env bash
case $1 in
pack)
PACKED=`echo $2 | sed -s 's@/@%@g'`
mv $2 $PACKED
;;
unpack)
UNPACKED=`echo $2 | sed -s 's@%@/@g'`
mkdir -p `dirname $UNPACKED`
mv $2 $UNPACKED
;;
esac
flatten_dirs:
find . -type f -wholename '*/*' -not -path './.git/*' | sed 's@^\./@@g' | grep / | xargs -n1 ./gistify.sh pack
fold_dirs:
ls | grep '%' | xargs -n1 ./gistify.sh unpack
driver_c:
$(CC) -c driver.c -o driver-c.o -Wall -Werror -fpic -std=c17 -O3
$(CC) driver-c.o -o libmydriver-c.so -shared -O3
rm driver-c.o
driver_c_fast:
$(CC) -c driver-fast.c -o driver-c-fast.o -Wall -Werror -fpic -std=c17 -O3
$(CC) driver-c-fast.o -o libmydriver-c-fast.so -shared -O3
rm driver-c-fast.o
driver_cpp:
$(CXX) -c driver.cpp -o driver-cxx.o -Wall -Werror -fpic -std=c++20 -O3
$(CXX) driver-cxx.o -o libmydriver-cpp.so -shared -O3
rm driver-cxx.o
driver_rust:
cd driver_rs && cargo build --release
cp driver_rs/target/release/libdriver_rs.so libmydriver-rs.so
bench:
cd benchmark && cargo build --release
clean:
rm *.so
rm -rf driver_rs/target
rm -rf benchmark/target
rm -rf perf/data
build: driver_rust driver_c driver_c_fast driver_cpp bench
versions:
$(CXX) --version
$(CC) --version
rustc --version
hyperfine: build versions
hyperfine \
'benchmark/target/release/benchmark ./libmydriver-c.so' \
'benchmark/target/release/benchmark ./libmydriver-c-fast.so' \
'benchmark/target/release/benchmark ./libmydriver-cpp.so' \
'benchmark/target/release/benchmark ./libmydriver-rs.so'
perf_record: build
mkdir -p perf/data
perf record -o perf/data/c -g --call-graph=dwarf -F500 -- benchmark/target/release/benchmark ./libmydriver-c.so
perf record -o perf/data/c-fast -g --call-graph=dwarf -F500 -- benchmark/target/release/benchmark ./libmydriver-c-fast.so
perf record -o perf/data/cpp -g --call-graph=dwarf -F500 -- benchmark/target/release/benchmark ./libmydriver-cpp.so
perf record -o perf/data/rs -g --call-graph=dwarf -F500 -- benchmark/target/release/benchmark ./libmydriver-rs.so
perf_flamegraph: perf_record
mkdir -p perf/svg
perf script -i perf/data/c | stackcollapse-perf.pl | flamegraph.pl > perf/svg/c.svg
perf script -i perf/data/c-fast | stackcollapse-perf.pl | flamegraph.pl > perf/svg/c-fast.svg
perf script -i perf/data/cpp | stackcollapse-perf.pl | flamegraph.pl > perf/svg/cpp.svg
perf script -i perf/data/rs | stackcollapse-perf.pl | flamegraph.pl > perf/svg/rs.svg
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="1200" height="534" onload="init(evt)" viewBox="0 0 1200 534" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. -->
<!-- NOTES: -->
<defs >
<linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
<stop stop-color="#eeeeee" offset="5%" />
<stop stop-color="#eeeeb0" offset="95%" />
</linearGradient>
</defs>
<style type="text/css">
.func_g:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
</style>
<script type="text/ecmascript">
<![CDATA[
var details, searchbtn, matchedtxt, svg;
function init(evt) {
details = document.getElementById("details").firstChild;
searchbtn = document.getElementById("search");
matchedtxt = document.getElementById("matched");
svg = document.getElementsByTagName("svg")[0];
searching = 0;
}
// mouse-over for info
function s(node) { // show
info = g_to_text(node);
details.nodeValue = "Function: " + info;
}
function c() { // clear
details.nodeValue = ' ';
}
// ctrl-F for search
window.addEventListener("keydown",function (e) {
if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
e.preventDefault();
search_prompt();
}
})
// functions
function find_child(parent, name, attr) {
var children = parent.childNodes;
for (var i=0; i<children.length;i++) {
if (children[i].tagName == name)
return (attr != undefined) ? children[i].attributes[attr].value : children[i];
}
return;
}
function orig_save(e, attr, val) {
if (e.attributes["_orig_"+attr] != undefined) return;
if (e.attributes[attr] == undefined) return;
if (val == undefined) val = e.attributes[attr].value;
e.setAttribute("_orig_"+attr, val);
}
function orig_load(e, attr) {
if (e.attributes["_orig_"+attr] == undefined) return;
e.attributes[attr].value = e.attributes["_orig_"+attr].value;
e.removeAttribute("_orig_"+attr);
}
function g_to_text(e) {
var text = find_child(e, "title").firstChild.nodeValue;
return (text)
}
function g_to_func(e) {
var func = g_to_text(e);
// if there's any manipulation we want to do to the function
// name before it's searched, do it here before returning.
return (func);
}
function update_text(e) {
var r = find_child(e, "rect");
var t = find_child(e, "text");
var w = parseFloat(r.attributes["width"].value) -3;
var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,"");
t.attributes["x"].value = parseFloat(r.attributes["x"].value) +3;
// Smaller than this size won't fit anything
if (w < 2*12*0.59) {
t.textContent = "";
return;
}
t.textContent = txt;
// Fit in full text width
if (/^ *$/.test(txt) || t.getSubStringLength(0, txt.length) < w)
return;
for (var x=txt.length-2; x>0; x--) {
if (t.getSubStringLength(0, x+2) <= w) {
t.textContent = txt.substring(0,x) + "..";
return;
}
}
t.textContent = "";
}
// zoom
function zoom_reset(e) {
if (e.attributes != undefined) {
orig_load(e, "x");
orig_load(e, "width");
}
if (e.childNodes == undefined) return;
for(var i=0, c=e.childNodes; i<c.length; i++) {
zoom_reset(c[i]);
}
}
function zoom_child(e, x, ratio) {
if (e.attributes != undefined) {
if (e.attributes["x"] != undefined) {
orig_save(e, "x");
e.attributes["x"].value = (parseFloat(e.attributes["x"].value) - x - 10) * ratio + 10;
if(e.tagName == "text") e.attributes["x"].value = find_child(e.parentNode, "rect", "x") + 3;
}
if (e.attributes["width"] != undefined) {
orig_save(e, "width");
e.attributes["width"].value = parseFloat(e.attributes["width"].value) * ratio;
}
}
if (e.childNodes == undefined) return;
for(var i=0, c=e.childNodes; i<c.length; i++) {
zoom_child(c[i], x-10, ratio);
}
}
function zoom_parent(e) {
if (e.attributes) {
if (e.attributes["x"] != undefined) {
orig_save(e, "x");
e.attributes["x"].value = 10;
}
if (e.attributes["width"] != undefined) {
orig_save(e, "width");
e.attributes["width"].value = parseInt(svg.width.baseVal.value) - (10*2);
}
}
if (e.childNodes == undefined) return;
for(var i=0, c=e.childNodes; i<c.length; i++) {
zoom_parent(c[i]);
}
}
function zoom(node) {
var attr = find_child(node, "rect").attributes;
var width = parseFloat(attr["width"].value);
var xmin = parseFloat(attr["x"].value);
var xmax = parseFloat(xmin + width);
var ymin = parseFloat(attr["y"].value);
var ratio = (svg.width.baseVal.value - 2*10) / width;
// XXX: Workaround for JavaScript float issues (fix me)
var fudge = 0.0001;
var unzoombtn = document.getElementById("unzoom");
unzoombtn.style["opacity"] = "1.0";
var el = document.getElementsByTagName("g");
for(var i=0;i<el.length;i++){
var e = el[i];
var a = find_child(e, "rect").attributes;
var ex = parseFloat(a["x"].value);
var ew = parseFloat(a["width"].value);
// Is it an ancestor
if (0 == 0) {
var upstack = parseFloat(a["y"].value) > ymin;
} else {
var upstack = parseFloat(a["y"].value) < ymin;
}
if (upstack) {
// Direct ancestor
if (ex <= xmin && (ex+ew+fudge) >= xmax) {
e.style["opacity"] = "0.5";
zoom_parent(e);
e.onclick = function(e){unzoom(); zoom(this);};
update_text(e);
}
// not in current path
else
e.style["display"] = "none";
}
// Children maybe
else {
// no common path
if (ex < xmin || ex + fudge >= xmax) {
e.style["display"] = "none";
}
else {
zoom_child(e, xmin, ratio);
e.onclick = function(e){zoom(this);};
update_text(e);
}
}
}
}
function unzoom() {
var unzoombtn = document.getElementById("unzoom");
unzoombtn.style["opacity"] = "0.0";
var el = document.getElementsByTagName("g");
for(i=0;i<el.length;i++) {
el[i].style["display"] = "block";
el[i].style["opacity"] = "1";
zoom_reset(el[i]);
update_text(el[i]);
}
}
// search
function reset_search() {
var el = document.getElementsByTagName("rect");
for (var i=0; i < el.length; i++) {
orig_load(el[i], "fill")
}
}
function search_prompt() {
if (!searching) {
var term = prompt("Enter a search term (regexp " +
"allowed, eg: ^ext4_)", "");
if (term != null) {
search(term)
}
} else {
reset_search();
searching = 0;
searchbtn.style["opacity"] = "0.1";
searchbtn.firstChild.nodeValue = "Search"
matchedtxt.style["opacity"] = "0.0";
matchedtxt.firstChild.nodeValue = ""
}
}
function search(term) {
var re = new RegExp(term);
var el = document.getElementsByTagName("g");
var matches = new Object();
var maxwidth = 0;
for (var i = 0; i < el.length; i++) {
var e = el[i];
if (e.attributes["class"].value != "func_g")
continue;
var func = g_to_func(e);
var rect = find_child(e, "rect");
if (rect == null) {
// the rect might be wrapped in an anchor
// if nameattr href is being used
if (rect = find_child(e, "a")) {
rect = find_child(r, "rect");
}
}
if (func == null || rect == null)
continue;
// Save max width. Only works as we have a root frame
var w = parseFloat(rect.attributes["width"].value);
if (w > maxwidth)
maxwidth = w;
if (func.match(re)) {
// highlight
var x = parseFloat(rect.attributes["x"].value);
orig_save(rect, "fill");
rect.attributes["fill"].value =
"rgb(230,0,230)";
// remember matches
if (matches[x] == undefined) {
matches[x] = w;
} else {
if (w > matches[x]) {
// overwrite with parent
matches[x] = w;
}
}
searching = 1;
}
}
if (!searching)
return;
searchbtn.style["opacity"] = "1.0";
searchbtn.firstChild.nodeValue = "Reset Search"
// calculate percent matched, excluding vertical overlap
var count = 0;
var lastx = -1;
var lastw = 0;
var keys = Array();
for (k in matches) {
if (matches.hasOwnProperty(k))
keys.push(k);
}
// sort the matched frames by their x location
// ascending, then width descending
keys.sort(function(a, b){
return a - b;
});
// Step through frames saving only the biggest bottom-up frames
// thanks to the sort order. This relies on the tree property
// where children are always smaller than their parents.
var fudge = 0.0001; // JavaScript floating point
for (var k in keys) {
var x = parseFloat(keys[k]);
var w = matches[keys[k]];
if (x >= lastx + lastw - fudge) {
count += w;
lastx = x;
lastw = w;
}
}
// display matched percent
matchedtxt.style["opacity"] = "1.0";
pct = 100 * count / maxwidth;
if (pct == 100)
pct = "100"
else
pct = pct.toFixed(1)
matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
}
function searchover(e) {
searchbtn.style["opacity"] = "1.0";
}
function searchout(e) {
if (searching) {
searchbtn.style["opacity"] = "1.0";
} else {
searchbtn.style["opacity"] = "0.1";
}
}
]]>
</script>
<rect x="0.0" y="0" width="1200.0" height="534.0" fill="url(#background)" />
<text text-anchor="middle" x="600.00" y="24" font-size="17" font-family="Verdana" fill="rgb(0,0,0)" >Flame Graph</text>
<text text-anchor="" x="10.00" y="517" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="details" > </text>
<text text-anchor="" x="10.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="unzoom" onclick="unzoom()" style="opacity:0.0;cursor:pointer" >Reset Zoom</text>
<text text-anchor="" x="1090.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="search" onmouseover="searchover()" onmouseout="searchout()" onclick="search_prompt()" style="opacity:0.1;cursor:pointer" >Search</text>
<text text-anchor="" x="1090.00" y="517" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="matched" > </text>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::string::String::with_capacity (4 samples, 0.60%)</title><rect x="135.4" y="421" width="7.1" height="15.0" fill="rgb(248,35,38)" rx="2" ry="2" />
<text text-anchor="" x="138.42" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::alloc::Global::alloc_impl (4 samples, 0.60%)</title><rect x="135.4" y="325" width="7.1" height="15.0" fill="rgb(209,83,15)" rx="2" ry="2" />
<text text-anchor="" x="138.42" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::result::Result&lt;T,E&gt;::expect (2 samples, 0.30%)</title><rect x="939.2" y="245" width="3.5" height="15.0" fill="rgb(206,166,9)" rx="2" ry="2" />
<text text-anchor="" x="942.16" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Arguments::estimated_capacity (49 samples, 7.34%)</title><rect x="621.2" y="245" width="86.6" height="15.0" fill="rgb(244,110,23)" rx="2" ry="2" />
<text text-anchor="" x="624.20" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core::fmt:..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Formatter::pad_integral::write_prefix (2 samples, 0.30%)</title><rect x="154.9" y="437" width="3.5" height="15.0" fill="rgb(224,31,53)" rx="2" ry="2" />
<text text-anchor="" x="157.85" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__rdl_alloc (1 samples, 0.15%)</title><rect x="108.9" y="437" width="1.8" height="15.0" fill="rgb(212,4,15)" rx="2" ry="2" />
<text text-anchor="" x="111.92" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::ptr::const_ptr::&lt;impl *const T&gt;::add (4 samples, 0.60%)</title><rect x="700.7" y="197" width="7.1" height="15.0" fill="rgb(215,201,52)" rx="2" ry="2" />
<text text-anchor="" x="703.69" y="207.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Formatter::pad_integral (1 samples, 0.15%)</title><rect x="40.0" y="437" width="1.8" height="15.0" fill="rgb(247,97,46)" rx="2" ry="2" />
<text text-anchor="" x="43.03" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::intrinsics::copy_nonoverlapping (9 samples, 1.35%)</title><rect x="870.3" y="85" width="15.9" height="15.0" fill="rgb(211,144,11)" rx="2" ry="2" />
<text text-anchor="" x="873.27" y="95.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__memmove_avx_unaligned_erms (15 samples, 2.25%)</title><rect x="789.0" y="101" width="26.5" height="15.0" fill="rgb(253,131,52)" rx="2" ry="2" />
<text text-anchor="" x="792.01" y="111.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::raw_vec::RawVec&lt;T,A&gt;::allocate_in (4 samples, 0.60%)</title><rect x="135.4" y="357" width="7.1" height="15.0" fill="rgb(232,131,36)" rx="2" ry="2" />
<text text-anchor="" x="138.42" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;core::slice::iter::Iter&lt;T&gt; as core::iter::traits::iterator::Iterator&gt;::next (25 samples, 3.74%)</title><rect x="638.9" y="165" width="44.1" height="15.0" fill="rgb(221,97,34)" rx="2" ry="2" />
<text text-anchor="" x="641.86" y="175.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >&lt;cor..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::raw_vec::RawVec&lt;T,A&gt;::allocate_in (45 samples, 6.74%)</title><rect x="541.7" y="181" width="79.5" height="15.0" fill="rgb(242,0,3)" rx="2" ry="2" />
<text text-anchor="" x="544.71" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc::ra..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::with_capacity_in (4 samples, 0.60%)</title><rect x="135.4" y="389" width="7.1" height="15.0" fill="rgb(205,0,18)" rx="2" ry="2" />
<text text-anchor="" x="138.42" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__memmove_avx_unaligned_erms (54 samples, 8.08%)</title><rect x="435.7" y="261" width="95.4" height="15.0" fill="rgb(222,227,35)" rx="2" ry="2" />
<text text-anchor="" x="438.72" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >__memmove_a..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__do_global_dtors_aux_fini_array_entry (7 samples, 1.05%)</title><rect x="77.1" y="437" width="12.4" height="15.0" fill="rgb(212,214,11)" rx="2" ry="2" />
<text text-anchor="" x="80.13" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::panicking::try (536 samples, 80.24%)</title><rect x="229.0" y="373" width="946.9" height="15.0" fill="rgb(221,56,51)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >std::panicking::try</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::intrinsics::copy_nonoverlapping (19 samples, 2.84%)</title><rect x="789.0" y="117" width="33.6" height="15.0" fill="rgb(219,123,43)" rx="2" ry="2" />
<text text-anchor="" x="792.01" y="127.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >co..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::num::imp::fmt_u64 (3 samples, 0.45%)</title><rect x="158.4" y="421" width="5.3" height="15.0" fill="rgb(247,102,3)" rx="2" ry="2" />
<text text-anchor="" x="161.38" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::num::&lt;impl usize&gt;::wrapping_sub (3 samples, 0.45%)</title><rect x="865.0" y="37" width="5.3" height="15.0" fill="rgb(240,42,1)" rx="2" ry="2" />
<text text-anchor="" x="867.97" y="47.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::ffi::c_str::CStr::to_str (1 samples, 0.15%)</title><rect x="25.9" y="437" width="1.8" height="15.0" fill="rgb(218,177,26)" rx="2" ry="2" />
<text text-anchor="" x="28.90" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::hf7071dbb0abde613 (536 samples, 80.24%)</title><rect x="229.0" y="325" width="946.9" height="15.0" fill="rgb(250,30,38)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::hf7071dbb0abde613</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>benchmark::main (536 samples, 80.24%)</title><rect x="229.0" y="293" width="946.9" height="15.0" fill="rgb(250,99,16)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="303.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >benchmark::main</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::panic::catch_unwind (536 samples, 80.24%)</title><rect x="229.0" y="389" width="946.9" height="15.0" fill="rgb(229,53,18)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >std::panic::catch_unwind</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::slice::iter::Iter&lt;T&gt;::new (4 samples, 0.60%)</title><rect x="700.7" y="213" width="7.1" height="15.0" fill="rgb(218,185,2)" rx="2" ry="2" />
<text text-anchor="" x="703.69" y="223.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::sys::unix::alloc::&lt;impl core::alloc::global::GlobalAlloc for std::alloc::System&gt;::alloc (1 samples, 0.15%)</title><rect x="108.9" y="421" width="1.8" height="15.0" fill="rgb(247,74,32)" rx="2" ry="2" />
<text text-anchor="" x="111.92" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::slice::&lt;impl [T]&gt;::iter (4 samples, 0.60%)</title><rect x="700.7" y="229" width="7.1" height="15.0" fill="rgb(219,197,49)" rx="2" ry="2" />
<text text-anchor="" x="703.69" y="239.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::reserve (8 samples, 1.20%)</title><rect x="774.9" y="117" width="14.1" height="15.0" fill="rgb(232,94,22)" rx="2" ry="2" />
<text text-anchor="" x="777.88" y="127.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>_int_free (5 samples, 0.75%)</title><rect x="31.2" y="437" width="8.8" height="15.0" fill="rgb(209,210,45)" rx="2" ry="2" />
<text text-anchor="" x="34.20" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__GI___libc_malloc (2 samples, 0.30%)</title><rect x="73.6" y="437" width="3.5" height="15.0" fill="rgb(250,179,45)" rx="2" ry="2" />
<text text-anchor="" x="76.59" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::sys_common::backtrace::__rust_begin_short_backtrace (536 samples, 80.24%)</title><rect x="229.0" y="309" width="946.9" height="15.0" fill="rgb(251,68,29)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >std::sys_common::backtrace::__rust_begin_short_backtrace</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::append_elements (27 samples, 4.04%)</title><rect x="774.9" y="133" width="47.7" height="15.0" fill="rgb(253,63,18)" rx="2" ry="2" />
<text text-anchor="" x="777.88" y="143.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >allo..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>[libpthread-2.33.so] (11 samples, 1.65%)</title><rect x="89.5" y="421" width="19.4" height="15.0" fill="rgb(242,62,20)" rx="2" ry="2" />
<text text-anchor="" x="92.49" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::append_elements (7 samples, 1.05%)</title><rect x="207.8" y="357" width="12.4" height="15.0" fill="rgb(251,213,4)" rx="2" ry="2" />
<text text-anchor="" x="210.84" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::str::converts::from_utf8 (97 samples, 14.52%)</title><rect x="992.2" y="261" width="171.3" height="15.0" fill="rgb(224,189,53)" rx="2" ry="2" />
<text text-anchor="" x="995.16" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core::str::converts::f..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;alloc::alloc::Global as core::alloc::Allocator&gt;::allocate (4 samples, 0.60%)</title><rect x="135.4" y="341" width="7.1" height="15.0" fill="rgb(207,95,29)" rx="2" ry="2" />
<text text-anchor="" x="138.42" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;usize as core::iter::traits::accum::Sum&gt;::sum::{{closure}} (6 samples, 0.90%)</title><rect x="683.0" y="149" width="10.6" height="15.0" fill="rgb(224,77,35)" rx="2" ry="2" />
<text text-anchor="" x="686.02" y="159.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Formatter::pad_integral::write_prefix (3 samples, 0.45%)</title><rect x="923.3" y="165" width="5.3" height="15.0" fill="rgb(235,64,50)" rx="2" ry="2" />
<text text-anchor="" x="926.26" y="175.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>get_next_result (1 samples, 0.15%)</title><rect x="942.7" y="277" width="1.8" height="15.0" fill="rgb(235,18,48)" rx="2" ry="2" />
<text text-anchor="" x="945.69" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::raw_vec::RawVec&lt;T,A&gt;::reserve (8 samples, 1.20%)</title><rect x="774.9" y="101" width="14.1" height="15.0" fill="rgb(221,103,36)" rx="2" ry="2" />
<text text-anchor="" x="777.88" y="111.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;alloc::vec::Vec&lt;T,A&gt; as alloc::vec::spec_extend::SpecExtend&lt;&amp;T,core::slice::iter::Iter&lt;T&gt;&gt;&gt;::spec_extend (12 samples, 1.80%)</title><rect x="865.0" y="117" width="21.2" height="15.0" fill="rgb(221,74,29)" rx="2" ry="2" />
<text text-anchor="" x="867.97" y="127.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::str::validations::run_utf8_validation (69 samples, 10.33%)</title><rect x="1041.6" y="245" width="121.9" height="15.0" fill="rgb(238,217,18)" rx="2" ry="2" />
<text text-anchor="" x="1044.62" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core::str::vali..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::write (4 samples, 0.60%)</title><rect x="932.1" y="149" width="7.1" height="15.0" fill="rgb(207,109,54)" rx="2" ry="2" />
<text text-anchor="" x="935.10" y="159.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::num::&lt;impl usize&gt;::wrapping_sub (1 samples, 0.15%)</title><rect x="787.2" y="69" width="1.8" height="15.0" fill="rgb(235,78,25)" rx="2" ry="2" />
<text text-anchor="" x="790.25" y="79.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::extend_from_slice (29 samples, 4.34%)</title><rect x="771.3" y="165" width="51.3" height="15.0" fill="rgb(224,144,8)" rx="2" ry="2" />
<text text-anchor="" x="774.35" y="175.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::alloc::Global::alloc_impl (45 samples, 6.74%)</title><rect x="541.7" y="149" width="79.5" height="15.0" fill="rgb(206,88,10)" rx="2" ry="2" />
<text text-anchor="" x="544.71" y="159.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc::al..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__libc_start_main (11 samples, 1.65%)</title><rect x="89.5" y="437" width="19.4" height="15.0" fill="rgb(210,9,45)" rx="2" ry="2" />
<text text-anchor="" x="92.49" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::ops::function::impls::&lt;impl core::ops::function::FnOnce&lt;A&gt; for &amp;F&gt;::call_once (536 samples, 80.24%)</title><rect x="229.0" y="341" width="946.9" height="15.0" fill="rgb(252,53,6)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core::ops::function::impls::&lt;impl core::ops::function::FnOnce&lt;A&gt; for &amp;F&gt;::call_once</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;&amp;mut W as core::fmt::Write&gt;::write_str (2 samples, 0.30%)</title><rect x="64.8" y="437" width="3.5" height="15.0" fill="rgb(237,197,42)" rx="2" ry="2" />
<text text-anchor="" x="67.76" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::raw_vec::RawVec&lt;T,A&gt;::needs_to_grow (3 samples, 0.45%)</title><rect x="865.0" y="53" width="5.3" height="15.0" fill="rgb(237,10,32)" rx="2" ry="2" />
<text text-anchor="" x="867.97" y="63.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::sys::unix::alloc::&lt;impl core::alloc::global::GlobalAlloc for std::alloc::System&gt;::alloc (7 samples, 1.05%)</title><rect x="598.2" y="101" width="12.4" height="15.0" fill="rgb(234,167,49)" rx="2" ry="2" />
<text text-anchor="" x="601.23" y="111.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__GI___libc_free (3 samples, 0.45%)</title><rect x="68.3" y="437" width="5.3" height="15.0" fill="rgb(218,166,4)" rx="2" ry="2" />
<text text-anchor="" x="71.29" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>_int_free (8 samples, 1.20%)</title><rect x="110.7" y="437" width="14.1" height="15.0" fill="rgb(214,205,50)" rx="2" ry="2" />
<text text-anchor="" x="113.69" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::num::imp::&lt;impl core::fmt::Display for i32&gt;::fmt (2 samples, 0.30%)</title><rect x="41.8" y="437" width="3.5" height="15.0" fill="rgb(244,128,49)" rx="2" ry="2" />
<text text-anchor="" x="44.80" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>all (668 samples, 100%)</title><rect x="10.0" y="485" width="1180.0" height="15.0" fill="rgb(242,119,25)" rx="2" ry="2" />
<text text-anchor="" x="13.00" y="495.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::ffi::c_str::CStr::to_bytes (7 samples, 1.05%)</title><rect x="1163.5" y="261" width="12.4" height="15.0" fill="rgb(254,214,32)" rx="2" ry="2" />
<text text-anchor="" x="1166.50" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Formatter::pad_integral::write_prefix (3 samples, 0.45%)</title><rect x="77.1" y="421" width="5.3" height="15.0" fill="rgb(216,12,3)" rx="2" ry="2" />
<text text-anchor="" x="80.13" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T&gt;::with_capacity (4 samples, 0.60%)</title><rect x="135.4" y="405" width="7.1" height="15.0" fill="rgb(223,209,17)" rx="2" ry="2" />
<text text-anchor="" x="138.42" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__GI___libc_malloc (26 samples, 3.89%)</title><rect x="552.3" y="117" width="45.9" height="15.0" fill="rgb(226,27,37)" rx="2" ry="2" />
<text text-anchor="" x="555.31" y="127.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >__GI..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;alloc::string::String as core::fmt::Write&gt;::write_str (12 samples, 1.80%)</title><rect x="865.0" y="165" width="21.2" height="15.0" fill="rgb(238,181,19)" rx="2" ry="2" />
<text text-anchor="" x="867.97" y="175.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::cmp::min (4 samples, 0.60%)</title><rect x="932.1" y="181" width="7.1" height="15.0" fill="rgb(210,152,7)" rx="2" ry="2" />
<text text-anchor="" x="935.10" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;core::iter::adapters::zip::Zip&lt;A,B&gt; as core::iter::adapters::zip::ZipImpl&lt;A,B&gt;&gt;::new (4 samples, 0.60%)</title><rect x="932.1" y="197" width="7.1" height="15.0" fill="rgb(249,164,20)" rx="2" ry="2" />
<text text-anchor="" x="935.10" y="207.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>get_bulk (3 samples, 0.45%)</title><rect x="177.8" y="437" width="5.3" height="15.0" fill="rgb(214,179,19)" rx="2" ry="2" />
<text text-anchor="" x="180.81" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::raw_vec::RawVec&lt;T,A&gt;::with_capacity_in (4 samples, 0.60%)</title><rect x="135.4" y="373" width="7.1" height="15.0" fill="rgb(229,128,27)" rx="2" ry="2" />
<text text-anchor="" x="138.42" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;&amp;mut W as core::fmt::Write&gt;::write_str (32 samples, 4.79%)</title><rect x="766.0" y="213" width="56.6" height="15.0" fill="rgb(217,97,8)" rx="2" ry="2" />
<text text-anchor="" x="769.05" y="223.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >&lt;&amp;mut..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>main (536 samples, 80.24%)</title><rect x="229.0" y="421" width="946.9" height="15.0" fill="rgb(234,131,0)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >main</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::rt::lang_start_internal (536 samples, 80.24%)</title><rect x="229.0" y="405" width="946.9" height="15.0" fill="rgb(223,121,54)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >std::rt::lang_start_internal</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::reserve (3 samples, 0.45%)</title><rect x="865.0" y="85" width="5.3" height="15.0" fill="rgb(248,40,28)" rx="2" ry="2" />
<text text-anchor="" x="867.97" y="95.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__rdl_alloc (7 samples, 1.05%)</title><rect x="598.2" y="117" width="12.4" height="15.0" fill="rgb(248,174,34)" rx="2" ry="2" />
<text text-anchor="" x="601.23" y="127.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::raw_vec::RawVec&lt;T,A&gt;::reserve (3 samples, 0.45%)</title><rect x="865.0" y="69" width="5.3" height="15.0" fill="rgb(252,184,7)" rx="2" ry="2" />
<text text-anchor="" x="867.97" y="79.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;&amp;mut W as core::fmt::Write&gt;::write_str (2 samples, 0.30%)</title><rect x="771.3" y="133" width="3.6" height="15.0" fill="rgb(220,31,39)" rx="2" ry="2" />
<text text-anchor="" x="774.35" y="143.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::extend_from_slice (12 samples, 1.80%)</title><rect x="865.0" y="133" width="21.2" height="15.0" fill="rgb(218,67,11)" rx="2" ry="2" />
<text text-anchor="" x="867.97" y="143.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;core::iter::adapters::map::Map&lt;I,F&gt; as core::iter::traits::iterator::Iterator&gt;::fold (31 samples, 4.64%)</title><rect x="638.9" y="197" width="54.7" height="15.0" fill="rgb(219,78,28)" rx="2" ry="2" />
<text text-anchor="" x="641.86" y="207.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >&lt;core..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__memmove_avx_unaligned_erms (7 samples, 1.05%)</title><rect x="873.8" y="69" width="12.4" height="15.0" fill="rgb(211,122,21)" rx="2" ry="2" />
<text text-anchor="" x="876.80" y="79.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::append_elements (12 samples, 1.80%)</title><rect x="865.0" y="101" width="21.2" height="15.0" fill="rgb(252,44,4)" rx="2" ry="2" />
<text text-anchor="" x="867.97" y="111.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::ffi::c_str::CStr::to_str (104 samples, 15.57%)</title><rect x="992.2" y="277" width="183.7" height="15.0" fill="rgb(213,186,5)" rx="2" ry="2" />
<text text-anchor="" x="995.16" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >std::ffi::c_str::CStr::..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::panicking::try::do_call (536 samples, 80.24%)</title><rect x="229.0" y="357" width="946.9" height="15.0" fill="rgb(210,2,22)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >std::panicking::try::do_call</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::intrinsics::copy_nonoverlapping (7 samples, 1.05%)</title><rect x="207.8" y="341" width="12.4" height="15.0" fill="rgb(213,137,50)" rx="2" ry="2" />
<text text-anchor="" x="210.84" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T&gt;::with_capacity (45 samples, 6.74%)</title><rect x="541.7" y="229" width="79.5" height="15.0" fill="rgb(217,218,20)" rx="2" ry="2" />
<text text-anchor="" x="544.71" y="239.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc::ve..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::iter::adapters::zip::zip (4 samples, 0.60%)</title><rect x="932.1" y="213" width="7.1" height="15.0" fill="rgb(207,202,39)" rx="2" ry="2" />
<text text-anchor="" x="935.10" y="223.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__GI___libc_malloc (2 samples, 0.30%)</title><rect x="27.7" y="437" width="3.5" height="15.0" fill="rgb(250,173,9)" rx="2" ry="2" />
<text text-anchor="" x="30.66" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Formatter::pad_integral (6 samples, 0.90%)</title><rect x="1179.4" y="453" width="10.6" height="15.0" fill="rgb(220,150,14)" rx="2" ry="2" />
<text text-anchor="" x="1182.40" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::cmp::Ord::min (4 samples, 0.60%)</title><rect x="932.1" y="165" width="7.1" height="15.0" fill="rgb(248,196,5)" rx="2" ry="2" />
<text text-anchor="" x="935.10" y="175.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>_dl_relocate_object (1 samples, 0.15%)</title><rect x="1177.6" y="389" width="1.8" height="15.0" fill="rgb(230,79,37)" rx="2" ry="2" />
<text text-anchor="" x="1180.63" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Write::write_fmt (2 samples, 0.30%)</title><rect x="142.5" y="421" width="3.5" height="15.0" fill="rgb(208,77,31)" rx="2" ry="2" />
<text text-anchor="" x="145.49" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Formatter::pad_integral (5 samples, 0.75%)</title><rect x="146.0" y="437" width="8.9" height="15.0" fill="rgb(218,217,16)" rx="2" ry="2" />
<text text-anchor="" x="149.02" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;&amp;mut W as core::fmt::Write&gt;::write_str (9 samples, 1.35%)</title><rect x="10.0" y="453" width="15.9" height="15.0" fill="rgb(221,20,53)" rx="2" ry="2" />
<text text-anchor="" x="13.00" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__GI___libc_free (48 samples, 7.19%)</title><rect x="350.9" y="261" width="84.8" height="15.0" fill="rgb(240,84,52)" rx="2" ry="2" />
<text text-anchor="" x="353.93" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >__GI___li..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;alloc::alloc::Global as core::alloc::Allocator&gt;::allocate (45 samples, 6.74%)</title><rect x="541.7" y="165" width="79.5" height="15.0" fill="rgb(215,34,41)" rx="2" ry="2" />
<text text-anchor="" x="544.71" y="175.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >&lt;alloc::a..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::iter::adapters::map::map_fold::{{closure}} (6 samples, 0.90%)</title><rect x="683.0" y="165" width="10.6" height="15.0" fill="rgb(252,111,0)" rx="2" ry="2" />
<text text-anchor="" x="686.02" y="175.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>dl_main (1 samples, 0.15%)</title><rect x="1177.6" y="405" width="1.8" height="15.0" fill="rgb(218,137,24)" rx="2" ry="2" />
<text text-anchor="" x="1180.63" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::num::imp::&lt;impl core::fmt::Display for i32&gt;::fmt (3 samples, 0.45%)</title><rect x="158.4" y="437" width="5.3" height="15.0" fill="rgb(208,101,44)" rx="2" ry="2" />
<text text-anchor="" x="161.38" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;usize as core::iter::traits::accum::Sum&gt;::sum (31 samples, 4.64%)</title><rect x="638.9" y="213" width="54.7" height="15.0" fill="rgb(249,73,27)" rx="2" ry="2" />
<text text-anchor="" x="641.86" y="223.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >&lt;usiz..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::extend_from_slice (7 samples, 1.05%)</title><rect x="207.8" y="389" width="12.4" height="15.0" fill="rgb(243,183,18)" rx="2" ry="2" />
<text text-anchor="" x="210.84" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;&amp;mut W as core::fmt::Write&gt;::write_str (15 samples, 2.25%)</title><rect x="859.7" y="181" width="26.5" height="15.0" fill="rgb(247,79,6)" rx="2" ry="2" />
<text text-anchor="" x="862.67" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >&lt;..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::slice::&lt;impl [T]&gt;::is_empty (4 samples, 0.60%)</title><rect x="693.6" y="229" width="7.1" height="15.0" fill="rgb(208,35,38)" rx="2" ry="2" />
<text text-anchor="" x="696.62" y="239.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::num::imp::&lt;impl core::fmt::Display for i32&gt;::fmt (53 samples, 7.93%)</title><rect x="838.5" y="213" width="93.6" height="15.0" fill="rgb(233,175,48)" rx="2" ry="2" />
<text text-anchor="" x="841.47" y="223.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core::fmt::..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>_dl_lookup_symbol_x (1 samples, 0.15%)</title><rect x="1177.6" y="373" width="1.8" height="15.0" fill="rgb(211,66,49)" rx="2" ry="2" />
<text text-anchor="" x="1180.63" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>_int_free (33 samples, 4.94%)</title><rect x="377.4" y="245" width="58.3" height="15.0" fill="rgb(211,66,10)" rx="2" ry="2" />
<text text-anchor="" x="380.43" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_int_f..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>[[heap]] (1 samples, 0.15%)</title><rect x="25.9" y="453" width="1.8" height="15.0" fill="rgb(247,163,36)" rx="2" ry="2" />
<text text-anchor="" x="28.90" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__rust_dealloc (3 samples, 0.45%)</title><rect x="531.1" y="261" width="5.3" height="15.0" fill="rgb(223,84,39)" rx="2" ry="2" />
<text text-anchor="" x="534.11" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Write::write_fmt (131 samples, 19.61%)</title><rect x="707.8" y="245" width="231.4" height="15.0" fill="rgb(244,137,33)" rx="2" ry="2" />
<text text-anchor="" x="710.75" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core::fmt::Write::write_fmt</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::intrinsics::copy_nonoverlapping (2 samples, 0.30%)</title><rect x="928.6" y="181" width="3.5" height="15.0" fill="rgb(254,37,28)" rx="2" ry="2" />
<text text-anchor="" x="931.56" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::write (8 samples, 1.20%)</title><rect x="163.7" y="437" width="14.1" height="15.0" fill="rgb(228,47,6)" rx="2" ry="2" />
<text text-anchor="" x="166.68" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Formatter::pad_integral (24 samples, 3.59%)</title><rect x="886.2" y="181" width="42.4" height="15.0" fill="rgb(232,131,52)" rx="2" ry="2" />
<text text-anchor="" x="889.17" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >cor..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::raw_vec::RawVec&lt;T,A&gt;::with_capacity_in (45 samples, 6.74%)</title><rect x="541.7" y="197" width="79.5" height="15.0" fill="rgb(254,19,15)" rx="2" ry="2" />
<text text-anchor="" x="544.71" y="207.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc::ra..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__libc_start_main (536 samples, 80.24%)</title><rect x="229.0" y="437" width="946.9" height="15.0" fill="rgb(247,33,29)" rx="2" ry="2" />
<text text-anchor="" x="232.04" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >__libc_start_main</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>benchmark::main (11 samples, 1.65%)</title><rect x="89.5" y="405" width="19.4" height="15.0" fill="rgb(232,92,46)" rx="2" ry="2" />
<text text-anchor="" x="92.49" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;alloc::vec::Vec&lt;T,A&gt; as alloc::vec::spec_extend::SpecExtend&lt;&amp;T,core::slice::iter::Iter&lt;T&gt;&gt;&gt;::spec_extend (29 samples, 4.34%)</title><rect x="771.3" y="149" width="51.3" height="15.0" fill="rgb(240,140,8)" rx="2" ry="2" />
<text text-anchor="" x="774.35" y="159.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >&lt;allo..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::alloc::alloc (4 samples, 0.60%)</title><rect x="135.4" y="309" width="7.1" height="15.0" fill="rgb(211,180,7)" rx="2" ry="2" />
<text text-anchor="" x="138.42" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>[unknown] (67 samples, 10.03%)</title><rect x="64.8" y="453" width="118.3" height="15.0" fill="rgb(250,182,14)" rx="2" ry="2" />
<text text-anchor="" x="67.76" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >[unknown]</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>_dl_start (2 samples, 0.30%)</title><rect x="1175.9" y="437" width="3.5" height="15.0" fill="rgb(206,75,27)" rx="2" ry="2" />
<text text-anchor="" x="1178.87" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__GI___tunables_init (1 samples, 0.15%)</title><rect x="1175.9" y="405" width="1.7" height="15.0" fill="rgb(220,20,31)" rx="2" ry="2" />
<text text-anchor="" x="1178.87" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__strlen_avx2 (24 samples, 3.59%)</title><rect x="949.8" y="261" width="42.4" height="15.0" fill="rgb(211,163,29)" rx="2" ry="2" />
<text text-anchor="" x="952.76" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >__s..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::string::String::with_capacity (47 samples, 7.04%)</title><rect x="538.2" y="245" width="83.0" height="15.0" fill="rgb(205,56,20)" rx="2" ry="2" />
<text text-anchor="" x="541.17" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc::st..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::fmt::format (12 samples, 1.80%)</title><rect x="124.8" y="437" width="21.2" height="15.0" fill="rgb(231,63,22)" rx="2" ry="2" />
<text text-anchor="" x="127.82" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>do_lookup_x (1 samples, 0.15%)</title><rect x="1177.6" y="357" width="1.8" height="15.0" fill="rgb(210,36,2)" rx="2" ry="2" />
<text text-anchor="" x="1180.63" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::num::imp::&lt;impl core::fmt::Display for i32&gt;::fmt (4 samples, 0.60%)</title><rect x="815.5" y="101" width="7.1" height="15.0" fill="rgb(247,117,24)" rx="2" ry="2" />
<text text-anchor="" x="818.51" y="111.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::string::String::push_str (29 samples, 4.34%)</title><rect x="771.3" y="181" width="51.3" height="15.0" fill="rgb(219,7,26)" rx="2" ry="2" />
<text text-anchor="" x="774.35" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>[[stack]] (21 samples, 3.14%)</title><rect x="27.7" y="453" width="37.1" height="15.0" fill="rgb(234,22,43)" rx="2" ry="2" />
<text text-anchor="" x="30.66" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >[[s..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::raw_vec::RawVec&lt;T,A&gt;::needs_to_grow (4 samples, 0.60%)</title><rect x="781.9" y="85" width="7.1" height="15.0" fill="rgb(229,1,6)" rx="2" ry="2" />
<text text-anchor="" x="784.95" y="95.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::iter::traits::iterator::Iterator::fold (31 samples, 4.64%)</title><rect x="638.9" y="181" width="54.7" height="15.0" fill="rgb(207,45,7)" rx="2" ry="2" />
<text text-anchor="" x="641.86" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core:..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::write (4 samples, 0.60%)</title><rect x="82.4" y="421" width="7.1" height="15.0" fill="rgb(238,110,53)" rx="2" ry="2" />
<text text-anchor="" x="85.43" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::write (121 samples, 18.11%)</title><rect x="725.4" y="229" width="213.8" height="15.0" fill="rgb(247,35,8)" rx="2" ry="2" />
<text text-anchor="" x="728.42" y="239.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core::fmt::write</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::ffi::c_str::CStr::from_ptr (2 samples, 0.30%)</title><rect x="61.2" y="437" width="3.6" height="15.0" fill="rgb(206,163,6)" rx="2" ry="2" />
<text text-anchor="" x="64.23" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::fmt::format (230 samples, 34.43%)</title><rect x="536.4" y="261" width="406.3" height="15.0" fill="rgb(227,47,54)" rx="2" ry="2" />
<text text-anchor="" x="539.41" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc::fmt::format</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>benchmark (668 samples, 100.00%)</title><rect x="10.0" y="469" width="1180.0" height="15.0" fill="rgb(217,32,33)" rx="2" ry="2" />
<text text-anchor="" x="13.00" y="479.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >benchmark</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__do_global_dtors_aux_fini_array_entry (21 samples, 3.14%)</title><rect x="183.1" y="453" width="37.1" height="15.0" fill="rgb(251,194,10)" rx="2" ry="2" />
<text text-anchor="" x="186.11" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >__d..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;alloc::string::String as core::fmt::Write&gt;::write_str (7 samples, 1.05%)</title><rect x="207.8" y="421" width="12.4" height="15.0" fill="rgb(243,113,21)" rx="2" ry="2" />
<text text-anchor="" x="210.84" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::alloc::alloc (39 samples, 5.84%)</title><rect x="552.3" y="133" width="68.9" height="15.0" fill="rgb(220,137,54)" rx="2" ry="2" />
<text text-anchor="" x="555.31" y="143.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc::..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::ptr::const_ptr::&lt;impl *const T&gt;::offset (4 samples, 0.60%)</title><rect x="700.7" y="181" width="7.1" height="15.0" fill="rgb(250,102,10)" rx="2" ry="2" />
<text text-anchor="" x="703.69" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>_start (543 samples, 81.29%)</title><rect x="220.2" y="453" width="959.2" height="15.0" fill="rgb(241,124,48)" rx="2" ry="2" />
<text text-anchor="" x="223.21" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >_start</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::string::String::push_str (7 samples, 1.05%)</title><rect x="207.8" y="405" width="12.4" height="15.0" fill="rgb(226,128,1)" rx="2" ry="2" />
<text text-anchor="" x="210.84" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::num::imp::fmt_u64 (48 samples, 7.19%)</title><rect x="847.3" y="197" width="84.8" height="15.0" fill="rgb(250,13,1)" rx="2" ry="2" />
<text text-anchor="" x="850.31" y="207.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core::fmt..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>get_bulk (399 samples, 59.73%)</title><rect x="237.9" y="277" width="704.8" height="15.0" fill="rgb(208,142,28)" rx="2" ry="2" />
<text text-anchor="" x="240.87" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >get_bulk</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>__rust_alloc (6 samples, 0.90%)</title><rect x="610.6" y="117" width="10.6" height="15.0" fill="rgb(220,58,20)" rx="2" ry="2" />
<text text-anchor="" x="613.60" y="127.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::string::String::push_str (12 samples, 1.80%)</title><rect x="865.0" y="149" width="21.2" height="15.0" fill="rgb(206,133,53)" rx="2" ry="2" />
<text text-anchor="" x="867.97" y="159.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>std::ffi::c_str::CStr::from_ptr (27 samples, 4.04%)</title><rect x="944.5" y="277" width="47.7" height="15.0" fill="rgb(235,197,26)" rx="2" ry="2" />
<text text-anchor="" x="947.46" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >std:..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::str::converts::from_utf8 (24 samples, 3.59%)</title><rect x="999.2" y="245" width="42.4" height="15.0" fill="rgb(214,136,23)" rx="2" ry="2" />
<text text-anchor="" x="1002.22" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >cor..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;alloc::vec::Vec&lt;T,A&gt; as alloc::vec::spec_extend::SpecExtend&lt;&amp;T,core::slice::iter::Iter&lt;T&gt;&gt;&gt;::spec_extend (7 samples, 1.05%)</title><rect x="207.8" y="373" width="12.4" height="15.0" fill="rgb(233,101,9)" rx="2" ry="2" />
<text text-anchor="" x="210.84" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;&amp;mut W as core::fmt::Write&gt;::write_str (21 samples, 3.14%)</title><rect x="183.1" y="437" width="37.1" height="15.0" fill="rgb(224,167,34)" rx="2" ry="2" />
<text text-anchor="" x="186.11" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >&lt;&amp;m..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>_dl_sysdep_start (2 samples, 0.30%)</title><rect x="1175.9" y="421" width="3.5" height="15.0" fill="rgb(217,45,54)" rx="2" ry="2" />
<text text-anchor="" x="1178.87" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::Formatter::new (9 samples, 1.35%)</title><rect x="822.6" y="213" width="15.9" height="15.0" fill="rgb(216,0,15)" rx="2" ry="2" />
<text text-anchor="" x="825.57" y="223.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::str::converts::from_utf8 (4 samples, 0.60%)</title><rect x="54.2" y="437" width="7.0" height="15.0" fill="rgb(234,187,24)" rx="2" ry="2" />
<text text-anchor="" x="57.16" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>&lt;alloc::string::String as core::fmt::Write&gt;::write_str (29 samples, 4.34%)</title><rect x="771.3" y="197" width="51.3" height="15.0" fill="rgb(244,48,43)" rx="2" ry="2" />
<text text-anchor="" x="774.35" y="207.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >&lt;allo..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::iter::traits::iterator::Iterator::sum (31 samples, 4.64%)</title><rect x="638.9" y="229" width="54.7" height="15.0" fill="rgb(236,102,44)" rx="2" ry="2" />
<text text-anchor="" x="641.86" y="239.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >core:..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>core::fmt::write (5 samples, 0.75%)</title><rect x="45.3" y="437" width="8.9" height="15.0" fill="rgb(240,182,38)" rx="2" ry="2" />
<text text-anchor="" x="48.33" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>alloc::vec::Vec&lt;T,A&gt;::with_capacity_in (45 samples, 6.74%)</title><rect x="541.7" y="213" width="79.5" height="15.0" fill="rgb(234,60,27)" rx="2" ry="2" />
<text text-anchor="" x="544.71" y="223.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >alloc::ve..</text>
</g>
</svg>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment