diff --git a/src/bin/flamegraph.rs b/src/bin/flamegraph.rs index fe33feb4..fe343b9f 100644 --- a/src/bin/flamegraph.rs +++ b/src/bin/flamegraph.rs @@ -82,6 +82,10 @@ struct Opt { )] colors: Palette, + /// Color frames based on their width, highlighting expensive codepaths + #[structopt(long = "colordiffusion", conflicts_with = "colors")] + color_diffusion: bool, + /// Count type label #[structopt( long = "countname", @@ -213,6 +217,7 @@ impl<'a> Opt { options.pretty_xml = self.pretty_xml; options.no_sort = self.no_sort; options.no_javascript = self.no_javascript; + options.color_diffusion = self.color_diffusion; options.reverse_stack_order = self.reverse; // set style options @@ -395,6 +400,7 @@ mod tests { no_sort: false, reverse_stack_order: true, no_javascript: true, + color_diffusion: false, }; assert_eq!(options, expected_options); diff --git a/src/flamegraph/color/mod.rs b/src/flamegraph/color/mod.rs index 9c16f6f2..9e2e9ed1 100644 --- a/src/flamegraph/color/mod.rs +++ b/src/flamegraph/color/mod.rs @@ -349,20 +349,20 @@ pub(super) fn color( pub(super) fn color_scale(value: isize, max: usize) -> Color { match value.cmp(&0) { Ordering::Equal => Color { - r: 255, - g: 255, - b: 255, + r: 250, + g: 250, + b: 250, }, Ordering::Greater => { // A positive value indicates _more_ samples, // and hence more time spent, so we give it a red hue. - let c = (210 * (max as isize - value) / max as isize) as u8; + let c = 100 + (150 * (max as isize - value) / max as isize) as u8; Color { r: 255, g: c, b: c } } Ordering::Less => { // A negative value indicates _fewer_ samples, - // or a speed-up, so we give it a green hue. - let c = (210 * (max as isize + value) / max as isize) as u8; + // or a speed-up, so we give it a blue hue. + let c = 100 + (150 * (max as isize + value) / max as isize) as u8; Color { r: c, g: c, b: 255 } } } diff --git a/src/flamegraph/mod.rs b/src/flamegraph/mod.rs index 3fdc6b78..23d50711 100644 --- a/src/flamegraph/mod.rs +++ b/src/flamegraph/mod.rs @@ -232,6 +232,14 @@ pub struct Options<'a> { /// This is only meant to be used in tests. #[doc(hidden)] pub no_javascript: bool, + + /// Diffusion-based color: the wider the frame, the more red it is. This + /// helps visually draw the eye towards frames that are wider, and therefore + /// more likely to need to be optimized. This is redundant information, + /// insofar as it's the same as the width of frames, but it still provides a + /// useful visual cue of what to focus on, especially if you are showing + /// flamegraphs to someone for the first time. + pub color_diffusion: bool, } impl<'a> Options<'a> { @@ -278,6 +286,7 @@ impl<'a> Default for Options<'a> { no_sort: Default::default(), reverse_stack_order: Default::default(), no_javascript: Default::default(), + color_diffusion: Default::default(), #[cfg(feature = "nameattr")] func_frameattrs: Default::default(), @@ -575,6 +584,13 @@ where color::VDGREY } else if frame.location.function == "-" { color::DGREY + } else if opt.color_diffusion { + // We want to visually highlight high priority regions for + // optimization: wider frames are redder. Typically when optimizing, + // a frame that is 50% of width is high priority, so it seems wrong + // to give it half the saturation of 100%. So we use sqrt to make + // the red dropoff less linear. + color::color_scale((((x2_pct - x1_pct) / 100.0).sqrt() * 2000.0) as isize, 2000) } else if let Some(mut delta) = frame.delta { if opt.negate_differentials { delta = -delta; diff --git a/tests/data/flamegraph/differential/diff-negated.svg b/tests/data/flamegraph/differential/diff-negated.svg index 14751211..5e92d2bd 100644 --- a/tests/data/flamegraph/differential/diff-negated.svg +++ b/tests/data/flamegraph/differential/diff-negated.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; -4.87%) - + cksum cksum (5 samples, 0.97%; +0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; -0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; -3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; -27.49%) - + main diff --git a/tests/data/flamegraph/differential/diff.svg b/tests/data/flamegraph/differential/diff.svg index a9782ece..a490937f 100644 --- a/tests/data/flamegraph/differential/diff.svg +++ b/tests/data/flamegraph/differential/diff.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/colordiffusion.svg b/tests/data/flamegraph/options/colordiffusion.svg new file mode 100644 index 00000000..420f32a8 --- /dev/null +++ b/tests/data/flamegraph/options/colordiffusion.svg @@ -0,0 +1,1844 @@ + + + + + + + + + + + + + Flame Graph + + Reset Zoom + Search + + + + read (1 samples, 0.35%) + + + + + check_events (1 samples, 0.35%) + + + + + hypercall_page (1 samples, 0.35%) + + + + + ScavengeRootsTask::do_it (1 samples, 0.35%) + + + + + ClassLoaderDataGraph::oops_do (1 samples, 0.35%) + + + + + ClassLoaderData::oops_do (1 samples, 0.35%) + + + + + PSScavengeKlassClosure::do_klass (1 samples, 0.35%) + + + + + PSPromotionManager::drain_stacks_depth (1 samples, 0.35%) + + + + + oopDesc* PSPromotionManager::copy_to_survivor_space<false> (1 samples, 0.35%) + + + + + InstanceKlass::oop_push_contents (1 samples, 0.35%) + + + + + ParallelTaskTerminator::offer_termination (5 samples, 1.75%) + + + + + GCTaskThread::run (14 samples, 4.91%) + + GCTask.. + + + StealTask::do_it (13 samples, 4.56%) + + Steal.. + + + SpinPause (7 samples, 2.46%) + + Sp.. + + + io/netty/buffer/AbstractByteBufAllocator:.directBuffer (1 samples, 0.35%) + + + + + io/netty/buffer/AbstractReferenceCountedByteBuf:.release (1 samples, 0.35%) + + + + + io/netty/buffer/PooledByteBuf:.internalNioBuffer (1 samples, 0.35%) + + + + + sun/nio/ch/NativeThread:.current (1 samples, 0.35%) + + + + + (3 samples, 1.05%) + + + + + Java_sun_nio_ch_FileDispatcherImpl_write0 (1 samples, 0.35%) + + + + + sys_write (1 samples, 0.35%) + + + + + fget_light (1 samples, 0.35%) + + + + + __srcu_read_lock (1 samples, 0.35%) + + + + + __tcp_push_pending_frames (1 samples, 0.35%) + + + + + ktime_get_real (1 samples, 0.35%) + + + + + skb_clone (1 samples, 0.35%) + + + + + tcp_set_skb_tso_segs (1 samples, 0.35%) + + + + + dev_hard_start_xmit (1 samples, 0.35%) + + + + + dev_pick_tx (1 samples, 0.35%) + + + + + dev_queue_xmit_nit (1 samples, 0.35%) + + + + + xen_restore_fl_direct (1 samples, 0.35%) + + + + + dev_hard_start_xmit (4 samples, 1.40%) + + + + + loopback_xmit (3 samples, 1.05%) + + + + + netif_rx (2 samples, 0.70%) + + + + + netif_rx.part.82 (2 samples, 0.70%) + + + + + xen_restore_fl_direct_end (1 samples, 0.35%) + + + + + dma_issue_pending_all (1 samples, 0.35%) + + + + + __inet_lookup_established (3 samples, 1.05%) + + + + + tcp_event_data_recv (1 samples, 0.35%) + + + + + sock_def_readable (19 samples, 6.67%) + + sock_def_.. + + + __wake_up_sync_key (19 samples, 6.67%) + + __wake_up.. + + + check_events (19 samples, 6.67%) + + check_eve.. + + + hypercall_page (19 samples, 6.67%) + + hypercall.. + + + bictcp_acked (1 samples, 0.35%) + + + + + ktime_get_real (2 samples, 0.70%) + + + + + getnstimeofday (2 samples, 0.70%) + + + + + xen_clocksource_get_cycles (1 samples, 0.35%) + + + + + xen_clocksource_read (1 samples, 0.35%) + + + + + tcp_rtt_estimator (1 samples, 0.35%) + + + + + ip_local_deliver (34 samples, 11.93%) + + ip_local_deliver + + + ip_local_deliver_finish (34 samples, 11.93%) + + ip_local_deliver_f.. + + + tcp_v4_rcv (33 samples, 11.58%) + + tcp_v4_rcv + + + tcp_v4_do_rcv (29 samples, 10.18%) + + tcp_v4_do_rcv + + + tcp_rcv_established (28 samples, 9.82%) + + tcp_rcv_establ.. + + + tcp_ack (9 samples, 3.16%) + + tcp.. + + + tcp_clean_rtx_queue (6 samples, 2.11%) + + t.. + + + tcp_valid_rtt_meas (1 samples, 0.35%) + + + + + tcp_rtt_estimator (1 samples, 0.35%) + + + + + __do_softirq (37 samples, 12.98%) + + __do_softirq + + + net_rx_action (37 samples, 12.98%) + + net_rx_action + + + process_backlog (36 samples, 12.63%) + + process_backlog + + + __netif_receive_skb (36 samples, 12.63%) + + __netif_receive_skb + + + ip_rcv (35 samples, 12.28%) + + ip_rcv + + + ip_rcv_finish (35 samples, 12.28%) + + ip_rcv_finish + + + ip_local_deliver_finish (1 samples, 0.35%) + + + + + local_bh_enable (38 samples, 13.33%) + + local_bh_enable + + + do_softirq (38 samples, 13.33%) + + do_softirq + + + call_softirq (38 samples, 13.33%) + + call_softirq + + + rcu_bh_qs (1 samples, 0.35%) + + + + + ip_local_out (45 samples, 15.79%) + + ip_local_out + + + ip_output (45 samples, 15.79%) + + ip_output + + + ip_finish_output (45 samples, 15.79%) + + ip_finish_output + + + dev_queue_xmit (43 samples, 15.09%) + + dev_queue_xmit + + + netif_skb_features (1 samples, 0.35%) + + + + + ip_queue_xmit (47 samples, 16.49%) + + ip_queue_xmit + + + ip_output (2 samples, 0.70%) + + + + + pvclock_clocksource_read (1 samples, 0.35%) + + + + + getnstimeofday (2 samples, 0.70%) + + + + + xen_clocksource_get_cycles (2 samples, 0.70%) + + + + + xen_clocksource_read (1 samples, 0.35%) + + + + + pvclock_clocksource_read (1 samples, 0.35%) + + + + + ktime_get_real (3 samples, 1.05%) + + + + + xen_clocksource_get_cycles (1 samples, 0.35%) + + + + + __tcp_push_pending_frames (56 samples, 19.65%) + + __tcp_push_pending_frames + + + tcp_write_xmit (56 samples, 19.65%) + + tcp_write_xmit + + + tcp_transmit_skb (53 samples, 18.60%) + + tcp_transmit_skb + + + skb_dst_set_noref (1 samples, 0.35%) + + + + + lock_sock_nested (1 samples, 0.35%) + + + + + _raw_spin_lock_bh (1 samples, 0.35%) + + + + + local_bh_disable (1 samples, 0.35%) + + + + + __kmalloc_node_track_caller (2 samples, 0.70%) + + + + + arch_local_irq_save (1 samples, 0.35%) + + + + + __phys_addr (1 samples, 0.35%) + + + + + get_slab (2 samples, 0.70%) + + + + + __alloc_skb (7 samples, 2.46%) + + __.. + + + kmem_cache_alloc_node (1 samples, 0.35%) + + + + + sk_stream_alloc_skb (8 samples, 2.81%) + + sk.. + + + ksize (1 samples, 0.35%) + + + + + ipv4_mtu (1 samples, 0.35%) + + + + + tcp_current_mss (2 samples, 0.70%) + + + + + tcp_established_options (1 samples, 0.35%) + + + + + tcp_send_mss (3 samples, 1.05%) + + + + + tcp_xmit_size_goal (1 samples, 0.35%) + + + + + do_sync_write (72 samples, 25.26%) + + do_sync_write + + + sock_aio_write (72 samples, 25.26%) + + sock_aio_write + + + do_sock_write.isra.10 (72 samples, 25.26%) + + do_sock_write.isra.10 + + + inet_sendmsg (72 samples, 25.26%) + + inet_sendmsg + + + tcp_sendmsg (71 samples, 24.91%) + + tcp_sendmsg + + + tcp_xmit_size_goal (1 samples, 0.35%) + + + + + fsnotify (2 samples, 0.70%) + + + + + __srcu_read_lock (1 samples, 0.35%) + + + + + apparmor_file_permission (1 samples, 0.35%) + + + + + rw_verify_area (3 samples, 1.05%) + + + + + security_file_permission (1 samples, 0.35%) + + + + + apparmor_file_permission (1 samples, 0.35%) + + + + + common_file_perm (1 samples, 0.35%) + + + + + sun/nio/ch/FileDispatcherImpl:.write0 (87 samples, 30.53%) + + sun/nio/ch/FileDispatcherImpl:.write0 + + + write (82 samples, 28.77%) + + write + + + system_call_fastpath (80 samples, 28.07%) + + system_call_fastpath + + + sys_write (80 samples, 28.07%) + + sys_write + + + vfs_write (79 samples, 27.72%) + + vfs_write + + + sock_aio_write (1 samples, 0.35%) + + + + + sun/nio/ch/SocketChannelImpl:.write (88 samples, 30.88%) + + sun/nio/ch/SocketChannelImpl:.write + + + sun/nio/ch/SocketChannelImpl:.writerCleanup (1 samples, 0.35%) + + + + + io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes (91 samples, 31.93%) + + io/netty/buffer/PooledUnsafeDirectByteBuf:.readBytes + + + sun/nio/ch/SocketChannelImpl:.writerCleanup (1 samples, 0.35%) + + + + + io/netty/channel/AbstractChannelHandlerContext:.flush (95 samples, 33.33%) + + io/netty/channel/AbstractChannelHandlerContext:.flush + + + io/netty/channel/ChannelDuplexHandler:.flush (95 samples, 33.33%) + + io/netty/channel/ChannelDuplexHandler:.flush + + + io/netty/channel/AbstractChannelHandlerContext:.flush (95 samples, 33.33%) + + io/netty/channel/AbstractChannelHandlerContext:.flush + + + io/netty/channel/ChannelOutboundHandlerAdapter:.flush (95 samples, 33.33%) + + io/netty/channel/ChannelOutboundHandlerAdapter:.flush + + + io/netty/channel/AbstractChannelHandlerContext:.flush (95 samples, 33.33%) + + io/netty/channel/AbstractChannelHandlerContext:.flush + + + io/netty/channel/DefaultChannelPipeline$HeadContext:.flush (95 samples, 33.33%) + + io/netty/channel/DefaultChannelPipeline$HeadContext:.f.. + + + io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0 (95 samples, 33.33%) + + io/netty/channel/AbstractChannel$AbstractUnsafe:.flush0 + + + io/netty/channel/nio/AbstractNioByteChannel:.doWrite (95 samples, 33.33%) + + io/netty/channel/nio/AbstractNioByteChannel:.doWrite + + + io/netty/util/Recycler:.recycle (1 samples, 0.35%) + + + + + io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete (97 samples, 34.04%) + + io/netty/channel/AbstractChannelHandlerContext:.fireCha.. + + + org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete (97 samples, 34.04%) + + org/vertx/java/core/net/impl/VertxHandler:.channelReadC.. + + + io/netty/channel/ChannelDuplexHandler:.flush (2 samples, 0.70%) + + + + + io/netty/channel/AbstractChannelHandlerContext:.fireChannelReadComplete (98 samples, 34.39%) + + io/netty/channel/AbstractChannelHandlerContext:.fireChan.. + + + io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete (98 samples, 34.39%) + + io/netty/handler/codec/ByteToMessageDecoder:.channelRead.. + + + org/vertx/java/core/net/impl/VertxHandler:.channelReadComplete (1 samples, 0.35%) + + + + + io/netty/buffer/AbstractReferenceCountedByteBuf:.release (1 samples, 0.35%) + + + + + java/util/concurrent/ConcurrentHashMap:.get (1 samples, 0.35%) + + + + + org/mozilla/javascript/Context:.getWrapFactory (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptableObject:.getParentScope (1 samples, 0.35%) + + + + + org/mozilla/javascript/WrapFactory:.wrapAsJavaObject (2 samples, 0.70%) + + + + + java/util/HashMap:.get (1 samples, 0.35%) + + + + + org/mozilla/javascript/WrapFactory:.wrap (1 samples, 0.35%) + + + + + java/util/HashMap:.get (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject$RelinkedSlot:.getValue (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.getObjectProp (4 samples, 1.40%) + + + + + vtable chunks (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.nameOrFunction (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject$Slot:.getValue (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.name (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.get (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.getPropFunctionAndThis (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.findInstanceIdInfo (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.has (3 samples, 1.05%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (2 samples, 0.70%) + + + + + org/mozilla/javascript/IdScriptableObject:.put (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.setAttributes (1 samples, 0.35%) + + + + + org/mozilla/javascript/MemberBox:.invoke (1 samples, 0.35%) + + + + + org/mozilla/javascript/NativeJavaMethod:.call (2 samples, 0.70%) + + + + + org/mozilla/javascript/WrapFactory:.wrap (1 samples, 0.35%) + + + + + org/mozilla/javascript/NativeJavaMethod:.findFunction (1 samples, 0.35%) + + + + + org/mozilla/javascript/NativeJavaObject:.get (2 samples, 0.70%) + + + + + org/mozilla/javascript/IdScriptableObject:.get (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.put (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptableObject:.createSlot (2 samples, 0.70%) + + + + + org/mozilla/javascript/IdScriptableObject:.setAttributes (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.createFunctionActivation (5 samples, 1.75%) + + + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.getObjectProp (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject$Slot:.getValue (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.getPropFunctionAndThis (1 samples, 0.35%) + + + + + org/mozilla/javascript/NativeJavaObject:.get (1 samples, 0.35%) + + + + + java/util/HashMap:.get (1 samples, 0.35%) + + + + + jint_disjoint_arraycopy (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.get (2 samples, 0.70%) + + + + + org/mozilla/javascript/IdScriptableObject:.has (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.put (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptableObject:.createSlot (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptRuntime:.createFunctionActivation (5 samples, 1.75%) + + + + + org/mozilla/javascript/IdScriptableObject:.setAttributes (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptRuntime:.getObjectProp (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.get (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.nameOrFunction (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.get (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject$RelinkedSlot:.getValue (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.findInstanceIdInfo (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.put (4 samples, 1.40%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (3 samples, 1.05%) + + + + + org/mozilla/javascript/ScriptableObject:.createSlot (3 samples, 1.05%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.setObjectProp (7 samples, 2.46%) + + or.. + + + vtable chunks (1 samples, 0.35%) + + + + + org/mozilla/javascript/NativeFunction:.initScriptFunction (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.createFunctionActivation (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.createFunctionActivation (2 samples, 0.70%) + + + + + org/mozilla/javascript/IdScriptableObject:.get (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.has (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.setObjectProp (8 samples, 2.81%) + + or.. + + + org/mozilla/javascript/IdScriptableObject:.put (7 samples, 2.46%) + + or.. + + + org/mozilla/javascript/ScriptableObject:.getSlot (6 samples, 2.11%) + + o.. + + + org/mozilla/javascript/ScriptableObject:.createSlot (6 samples, 2.11%) + + o.. + + + org/mozilla/javascript/ScriptRuntime:.newObject (32 samples, 11.23%) + + org/mozilla/javas.. + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (32 samples, 11.23%) + + org/mozilla/javas.. + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (32 samples, 11.23%) + + org/mozilla/javas.. + + + org/mozilla/javascript/optimizer/OptRuntime:.call2 (13 samples, 4.56%) + + org/m.. + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (11 samples, 3.86%) + + org/.. + + + org/mozilla/javascript/ScriptableObject:.getParentScope (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.has (9 samples, 3.16%) + + org.. + + + org/mozilla/javascript/ScriptableObject:.getSlot (5 samples, 1.75%) + + + + + org/mozilla/javascript/ScriptRuntime:.setObjectProp (17 samples, 5.96%) + + org/mozi.. + + + org/mozilla/javascript/IdScriptableObject:.put (8 samples, 2.81%) + + or.. + + + org/mozilla/javascript/ScriptableObject:.getSlot (7 samples, 2.46%) + + or.. + + + org/mozilla/javascript/ScriptableObject:.createSlot (6 samples, 2.11%) + + o.. + + + org/mozilla/javascript/ScriptableObject:.getPrototype (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject:.getParentScope (1 samples, 0.35%) + + + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (3 samples, 1.05%) + + + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (3 samples, 1.05%) + + + + + org/mozilla/javascript/TopLevel:.getBuiltinPrototype (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptRuntime:.name (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.nameOrFunction (1 samples, 0.35%) + + + + + vtable chunks (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.setObjectProp (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.has (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.setAttributes (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptRuntime:.createFunctionActivation (5 samples, 1.75%) + + + + + org/mozilla/javascript/TopLevel:.getBuiltinPrototype (2 samples, 0.70%) + + + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (82 samples, 28.77%) + + org/mozilla/javascript/gen/file__home_bgregg_t.. + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (81 samples, 28.42%) + + org/mozilla/javascript/gen/file__home_bgregg_t.. + + + org/mozilla/javascript/optimizer/OptRuntime:.call2 (9 samples, 3.16%) + + org.. + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (6 samples, 2.11%) + + o.. + + + org/mozilla/javascript/ScriptRuntime:.setObjectProp (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.put (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject:.getSlot (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject:.createSlot (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.indexFromString (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.setObjectElem (2 samples, 0.70%) + + + + + org/mozilla/javascript/ScriptRuntime:.indexFromString (2 samples, 0.70%) + + + + + io/netty/handler/codec/http/DefaultHttpHeaders:.set (1 samples, 0.35%) + + + + + io/netty/buffer/AbstractByteBuf:.writeBytes (1 samples, 0.35%) + + + + + io/netty/buffer/AbstractByteBuf:.writeBytes (1 samples, 0.35%) + + + + + io/netty/buffer/AbstractByteBufAllocator:.directBuffer (3 samples, 1.05%) + + + + + io/netty/util/concurrent/FastThreadLocal:.get (1 samples, 0.35%) + + + + + io/netty/handler/codec/http/HttpObjectEncoder:.encode (5 samples, 1.75%) + + + + + java/util/ArrayList:.add (1 samples, 0.35%) + + + + + io/netty/util/internal/RecyclableArrayList:.newInstance (1 samples, 0.35%) + + + + + io/netty/util/concurrent/FastThreadLocal:.get (1 samples, 0.35%) + + + + + java/util/ArrayList:.ensureExplicitCapacity (1 samples, 0.35%) + + + + + io/netty/channel/AbstractChannelHandlerContext:.write (12 samples, 4.21%) + + io/ne.. + + + org/vertx/java/core/http/impl/VertxHttpHandler:.write (11 samples, 3.86%) + + org/.. + + + io/netty/channel/AbstractChannelHandlerContext:.write (10 samples, 3.51%) + + io/.. + + + io/netty/handler/codec/MessageToMessageEncoder:.write (10 samples, 3.51%) + + io/.. + + + vtable chunks (1 samples, 0.35%) + + + + + io/netty/channel/AbstractChannelHandlerContext:.write (13 samples, 4.56%) + + io/ne.. + + + org/vertx/java/core/http/impl/VertxHttpHandler:.write (1 samples, 0.35%) + + + + + io/netty/handler/codec/http/DefaultHttpHeaders:.add0 (1 samples, 0.35%) + + + + + io/netty/handler/codec/http/DefaultHttpHeaders:.set (1 samples, 0.35%) + + + + + org/mozilla/javascript/NativeJavaMethod:.call (21 samples, 7.37%) + + org/mozill.. + + + org/mozilla/javascript/MemberBox:.invoke (21 samples, 7.37%) + + org/mozill.. + + + sun/reflect/DelegatingMethodAccessorImpl:.invoke (19 samples, 6.67%) + + sun/refle.. + + + sun/nio/cs/UTF_8$Encoder:.<init> (1 samples, 0.35%) + + + + + jbyte_disjoint_arraycopy (1 samples, 0.35%) + + + + + io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead (128 samples, 44.91%) + + io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead + + + org/vertx/java/core/net/impl/VertxHandler:.channelRead (128 samples, 44.91%) + + org/vertx/java/core/net/impl/VertxHandler:.channelRead + + + org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessageReceived (124 samples, 43.51%) + + org/vertx/java/core/http/impl/DefaultHttpServer$ServerHandler:.doMessag.. + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (117 samples, 41.05%) + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_.. + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (116 samples, 40.70%) + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4.. + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vhello_js_1:.call (27 samples, 9.47%) + + org/mozilla/ja.. + + + org/mozilla/javascript/gen/file__home_bgregg_testtest_vert_x_2_1_4_sys_mods_io_vertx_lang_js_1_1_0 (24 samples, 8.42%) + + org/mozilla/.. + + + org/mozilla/javascript/ScriptRuntime:.name (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptRuntime:.nameOrFunction (1 samples, 0.35%) + + + + + org/mozilla/javascript/IdScriptableObject:.get (1 samples, 0.35%) + + + + + org/mozilla/javascript/ScriptableObject$RelinkedSlot:.getValue (1 samples, 0.35%) + + + + + io/netty/buffer/AbstractByteBuf:.forEachByteAsc0 (1 samples, 0.35%) + + + + + io/netty/util/internal/AppendableCharSequence:.append (1 samples, 0.35%) + + + + + io/netty/handler/codec/http/HttpHeaders:.isTransferEncodingChunked (1 samples, 0.35%) + + + + + io/netty/handler/codec/http/HttpObjectDecoder:.findWhitespace (1 samples, 0.35%) + + + + + io/netty/buffer/AbstractByteBuf:.forEachByteAsc0 (2 samples, 0.70%) + + + + + io/netty/handler/codec/http/HttpHeaders:.hash (1 samples, 0.35%) + + + + + io/netty/handler/codec/http/HttpObjectDecoder:.splitHeader (5 samples, 1.75%) + + + + + io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead (143 samples, 50.18%) + + io/netty/channel/AbstractChannelHandlerContext:.fireChannelRead + + + io/netty/handler/codec/ByteToMessageDecoder:.channelRead (143 samples, 50.18%) + + io/netty/handler/codec/ByteToMessageDecoder:.channelRead + + + io/netty/handler/codec/http/HttpObjectDecoder:.decode (13 samples, 4.56%) + + io/ne.. + + + io/netty/handler/codec/http/HttpObjectDecoder:.readHeaders (10 samples, 3.51%) + + io/.. + + + java/util/Arrays:.fill (1 samples, 0.35%) + + + + + java/nio/channels/spi/AbstractInterruptibleChannel:.end (1 samples, 0.35%) + + + + + sys_read (1 samples, 0.35%) + + + + + do_sync_read (1 samples, 0.35%) + + + + + __kfree_skb (1 samples, 0.35%) + + + + + tcp_rcv_space_adjust (1 samples, 0.35%) + + + + + skb_release_data (1 samples, 0.35%) + + + + + __kfree_skb (2 samples, 0.70%) + + + + + skb_release_head_state (1 samples, 0.35%) + + + + + dst_release (1 samples, 0.35%) + + + + + _raw_spin_lock_bh (1 samples, 0.35%) + + + + + skb_copy_datagram_iovec (2 samples, 0.70%) + + + + + copy_user_enhanced_fast_string (1 samples, 0.35%) + + + + + do_sync_read (9 samples, 3.16%) + + do_.. + + + sock_aio_read (9 samples, 3.16%) + + soc.. + + + sock_aio_read.part.13 (9 samples, 3.16%) + + soc.. + + + do_sock_read.isra.12 (9 samples, 3.16%) + + do_.. + + + inet_recvmsg (9 samples, 3.16%) + + ine.. + + + tcp_recvmsg (7 samples, 2.46%) + + tc.. + + + tcp_cleanup_rbuf (2 samples, 0.70%) + + + + + __tcp_select_window (1 samples, 0.35%) + + + + + io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes (16 samples, 5.61%) + + io/nett.. + + + sun/nio/ch/SocketChannelImpl:.read (16 samples, 5.61%) + + sun/nio.. + + + sun/nio/ch/FileDispatcherImpl:.read0 (15 samples, 5.26%) + + sun/ni.. + + + read (15 samples, 5.26%) + + read + + + system_call_fastpath (12 samples, 4.21%) + + syste.. + + + sys_read (12 samples, 4.21%) + + sys_r.. + + + vfs_read (10 samples, 3.51%) + + vfs.. + + + rw_verify_area (1 samples, 0.35%) + + + + + io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read (260 samples, 91.23%) + + io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe:.read + + + io/netty/handler/codec/ByteToMessageDecoder:.channelReadComplete (1 samples, 0.35%) + + + + + JavaThread::run (263 samples, 92.28%) + + JavaThread::run + + + JavaThread::thread_main_inner (263 samples, 92.28%) + + JavaThread::thread_main_inner + + + thread_entry (263 samples, 92.28%) + + thread_entry + + + JavaCalls::call_virtual (263 samples, 92.28%) + + JavaCalls::call_virtual + + + JavaCalls::call_virtual (263 samples, 92.28%) + + JavaCalls::call_virtual + + + JavaCalls::call_helper (263 samples, 92.28%) + + JavaCalls::call_helper + + + call_stub (263 samples, 92.28%) + + call_stub + + + Interpreter (263 samples, 92.28%) + + Interpreter + + + Interpreter (263 samples, 92.28%) + + Interpreter + + + io/netty/channel/nio/NioEventLoop:.run (263 samples, 92.28%) + + io/netty/channel/nio/NioEventLoop:.run + + + io/netty/channel/nio/NioEventLoop:.processSelectedKeys (262 samples, 91.93%) + + io/netty/channel/nio/NioEventLoop:.processSelectedKeys + + + io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized (262 samples, 91.93%) + + io/netty/channel/nio/NioEventLoop:.processSelectedKeysOptimized + + + io/netty/channel/nio/NioEventLoop:.processSelectedKey (261 samples, 91.58%) + + io/netty/channel/nio/NioEventLoop:.processSelectedKey + + + io/netty/channel/socket/nio/NioSocketChannel:.doReadBytes (1 samples, 0.35%) + + + + + PSIsAliveClosure::do_object_b (1 samples, 0.35%) + + + + + StringTable::unlink_or_oops_do (2 samples, 0.70%) + + + + + start_thread (281 samples, 98.60%) + + start_thread + + + java_start (281 samples, 98.60%) + + java_start + + + VMThread::run (4 samples, 1.40%) + + + + + VMThread::loop (4 samples, 1.40%) + + + + + VMThread::evaluate_operation (4 samples, 1.40%) + + + + + VM_Operation::evaluate (4 samples, 1.40%) + + + + + VM_ParallelGCFailedAllocation::doit (4 samples, 1.40%) + + + + + ParallelScavengeHeap::failed_mem_allocate (4 samples, 1.40%) + + + + + PSScavenge::invoke (4 samples, 1.40%) + + + + + PSScavenge::invoke_no_policy (4 samples, 1.40%) + + + + + pthread_cond_signal@@GLIBC_2.3.2 (1 samples, 0.35%) + + + + + system_call_fastpath (1 samples, 0.35%) + + + + + sys_futex (1 samples, 0.35%) + + + + + do_futex (1 samples, 0.35%) + + + + + futex_wake_op (1 samples, 0.35%) + + + + + all (285 samples, 100%) + + + + + java (285 samples, 100.00%) + + java + + + write (3 samples, 1.05%) + + + + + check_events (3 samples, 1.05%) + + + + + hypercall_page (3 samples, 1.05%) + + + + + \ No newline at end of file diff --git a/tests/data/flamegraph/options/count_name_simple.svg b/tests/data/flamegraph/options/count_name_simple.svg index 1e05a7b7..0eda38a6 100644 --- a/tests/data/flamegraph/options/count_name_simple.svg +++ b/tests/data/flamegraph/options/count_name_simple.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 test-samples, 10.92%; 0.00%) - + _start __libc_start_main (56 test-samples, 10.92%; 0.00%) - + __libc_start_main main (56 test-samples, 10.92%; 0.00%) - + main cksum (56 test-samples, 10.92%; +4.87%) - + cksum cksum (5 test-samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 test-samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 test-samples, 0.58%; 0.00%) - + _IO_file_read (3 test-samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 test-samples, 0.58%; 0.00%) - + sys_read (3 test-samples, 0.58%; 0.00%) - + vfs_read (3 test-samples, 0.58%; 0.00%) - + __vfs_read (3 test-samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 test-samples, 0.58%; +0.39%) - + cksum (96 test-samples, 18.71%; 0.00%) - + cksum main (35 test-samples, 6.82%; 0.00%) - + main cksum (35 test-samples, 6.82%; +3.12%) - + cksum [unknown] (2 test-samples, 0.39%; 0.00%) - + all (513 test-samples, 100%) - + noploop (417 test-samples, 81.29%; 0.00%) - + noploop main (415 test-samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/count_name_with_symbols.svg b/tests/data/flamegraph/options/count_name_with_symbols.svg index da32e39c..6d0c50fc 100644 --- a/tests/data/flamegraph/options/count_name_with_symbols.svg +++ b/tests/data/flamegraph/options/count_name_with_symbols.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 test-samples <& ' ", 10.92%; 0.00%) - + _start __libc_start_main (56 test-samples <& ' ", 10.92%; 0.00%) - + __libc_start_main main (56 test-samples <& ' ", 10.92%; 0.00%) - + main cksum (56 test-samples <& ' ", 10.92%; +4.87%) - + cksum cksum (5 test-samples <& ' ", 0.97%; -0.78%) - + __GI___fread_unlocked (3 test-samples <& ' ", 0.58%; 0.00%) - + _IO_file_xsgetn (3 test-samples <& ' ", 0.58%; 0.00%) - + _IO_file_read (3 test-samples <& ' ", 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 test-samples <& ' ", 0.58%; 0.00%) - + sys_read (3 test-samples <& ' ", 0.58%; 0.00%) - + vfs_read (3 test-samples <& ' ", 0.58%; 0.00%) - + __vfs_read (3 test-samples <& ' ", 0.58%; 0.00%) - + ext4_file_read_iter (3 test-samples <& ' ", 0.58%; +0.39%) - + cksum (96 test-samples <& ' ", 18.71%; 0.00%) - + cksum main (35 test-samples <& ' ", 6.82%; 0.00%) - + main cksum (35 test-samples <& ' ", 6.82%; +3.12%) - + cksum [unknown] (2 test-samples <& ' ", 0.39%; 0.00%) - + all (513 test-samples <& ' ", 100%) - + noploop (417 test-samples <& ' ", 81.29%; 0.00%) - + noploop main (415 test-samples <& ' ", 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/default.svg b/tests/data/flamegraph/options/default.svg index a9782ece..a490937f 100644 --- a/tests/data/flamegraph/options/default.svg +++ b/tests/data/flamegraph/options/default.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/font_type_simple.svg b/tests/data/flamegraph/options/font_type_simple.svg index 2ff84f02..70198e31 100644 --- a/tests/data/flamegraph/options/font_type_simple.svg +++ b/tests/data/flamegraph/options/font_type_simple.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/font_type_with_quote.svg b/tests/data/flamegraph/options/font_type_with_quote.svg index a4e2dd38..dee0940e 100644 --- a/tests/data/flamegraph/options/font_type_with_quote.svg +++ b/tests/data/flamegraph/options/font_type_with_quote.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/name_type_simple.svg b/tests/data/flamegraph/options/name_type_simple.svg index acb87adc..813e74c8 100644 --- a/tests/data/flamegraph/options/name_type_simple.svg +++ b/tests/data/flamegraph/options/name_type_simple.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/name_type_with_backslash.svg b/tests/data/flamegraph/options/name_type_with_backslash.svg index 7edbcf8f..26df6024 100644 --- a/tests/data/flamegraph/options/name_type_with_backslash.svg +++ b/tests/data/flamegraph/options/name_type_with_backslash.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/name_type_with_quote.svg b/tests/data/flamegraph/options/name_type_with_quote.svg index 1ed23723..85c3d7bb 100644 --- a/tests/data/flamegraph/options/name_type_with_quote.svg +++ b/tests/data/flamegraph/options/name_type_with_quote.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/notes_simple.svg b/tests/data/flamegraph/options/notes_simple.svg index b85bcbcc..7ca142fb 100644 --- a/tests/data/flamegraph/options/notes_simple.svg +++ b/tests/data/flamegraph/options/notes_simple.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/notes_with_symbols.svg b/tests/data/flamegraph/options/notes_with_symbols.svg index f2138490..30f319d2 100644 --- a/tests/data/flamegraph/options/notes_with_symbols.svg +++ b/tests/data/flamegraph/options/notes_with_symbols.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/search_color.svg b/tests/data/flamegraph/options/search_color.svg index 9e560476..72cb3b7a 100644 --- a/tests/data/flamegraph/options/search_color.svg +++ b/tests/data/flamegraph/options/search_color.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/subtitle_simple.svg b/tests/data/flamegraph/options/subtitle_simple.svg index 6b029c88..9e767aea 100644 --- a/tests/data/flamegraph/options/subtitle_simple.svg +++ b/tests/data/flamegraph/options/subtitle_simple.svg @@ -38,102 +38,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/subtitle_with_symbols.svg b/tests/data/flamegraph/options/subtitle_with_symbols.svg index 3260c359..bd063187 100644 --- a/tests/data/flamegraph/options/subtitle_with_symbols.svg +++ b/tests/data/flamegraph/options/subtitle_with_symbols.svg @@ -38,102 +38,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/title_simple.svg b/tests/data/flamegraph/options/title_simple.svg index a5300c7c..06e31c7c 100644 --- a/tests/data/flamegraph/options/title_simple.svg +++ b/tests/data/flamegraph/options/title_simple.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/data/flamegraph/options/title_with_symbols.svg b/tests/data/flamegraph/options/title_with_symbols.svg index 3532e909..2778bafe 100644 --- a/tests/data/flamegraph/options/title_with_symbols.svg +++ b/tests/data/flamegraph/options/title_with_symbols.svg @@ -37,102 +37,102 @@ var truncate_text_right = false;]]> _start (56 samples, 10.92%; 0.00%) - + _start __libc_start_main (56 samples, 10.92%; 0.00%) - + __libc_start_main main (56 samples, 10.92%; 0.00%) - + main cksum (56 samples, 10.92%; +4.87%) - + cksum cksum (5 samples, 0.97%; -0.78%) - + __GI___fread_unlocked (3 samples, 0.58%; 0.00%) - + _IO_file_xsgetn (3 samples, 0.58%; 0.00%) - + _IO_file_read (3 samples, 0.58%; 0.00%) - + entry_SYSCALL_64_fastpath (3 samples, 0.58%; 0.00%) - + sys_read (3 samples, 0.58%; 0.00%) - + vfs_read (3 samples, 0.58%; 0.00%) - + __vfs_read (3 samples, 0.58%; 0.00%) - + ext4_file_read_iter (3 samples, 0.58%; +0.39%) - + cksum (96 samples, 18.71%; 0.00%) - + cksum main (35 samples, 6.82%; 0.00%) - + main cksum (35 samples, 6.82%; +3.12%) - + cksum [unknown] (2 samples, 0.39%; 0.00%) - + all (513 samples, 100%) - + noploop (417 samples, 81.29%; 0.00%) - + noploop main (415 samples, 80.90%; +27.49%) - + main diff --git a/tests/flamegraph.rs b/tests/flamegraph.rs index 5693a40e..e350ff23 100644 --- a/tests/flamegraph.rs +++ b/tests/flamegraph.rs @@ -171,6 +171,17 @@ fn flamegraph_differential_negated() { test_flamegraph(input_file, expected_result_file, options).unwrap(); } +#[test] +fn flamegraph_collor_diffusion() { + let input_file = "./flamegraph/test/results/perf-vertx-stacks-01-collapsed-all.txt"; + let expected_result_file = "./tests/data/flamegraph/options/colordiffusion.svg"; + let options = Options { + color_diffusion: true, + ..Default::default() + }; + test_flamegraph(input_file, expected_result_file, options).unwrap(); +} + #[test] fn flamegraph_factor() { let input_file = "./flamegraph/test/results/perf-vertx-stacks-01-collapsed-all.txt";