Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
notcurses_stats(3)					    notcurses_stats(3)

NAME
       notcurses_stats - notcurses runtime statistics

SYNOPSIS
       #include	<notcurses/notcurses.h>

	      typedef struct ncstats {
		// purely increasing stats
		uint64_t renders;	   // successful ncpile_render() runs
		uint64_t writeouts;	   // successful ncpile_rasterize() runs
		uint64_t failed_renders;   // aborted renders, should be 0
		uint64_t failed_writeouts; // aborted writes
		uint64_t raster_bytes;	   // bytes emitted to ttyfp
		int64_t	raster_max_bytes;  // max bytes	emitted	for a frame
		int64_t	raster_min_bytes;  // min bytes	emitted	for a frame
		uint64_t render_ns;	   // nanoseconds spent	rendering
		int64_t	render_max_ns;	   // max ns spent for a frame
		int64_t	render_min_ns;	   // min ns spent for a frame
		uint64_t raster_ns;	   // nanoseconds spent	rasterizing
		int64_t	raster_max_ns;	   // max ns spent in raster for a frame
		int64_t	raster_min_ns;	   // min ns spent in raster for a frame
		uint64_t writeout_ns;	   // ns spent writing frames to terminal
		int64_t	writeout_max_ns;   // max ns spent writing out a frame
		int64_t	writeout_min_ns;   // min ns spent writing out a frame
		uint64_t cellelisions;	   // cells elided entirely
		uint64_t cellemissions;	   // cells emitted
		uint64_t fgelisions;	   // RGB fg elision count
		uint64_t fgemissions;	   // RGB fg emissions
		uint64_t bgelisions;	   // RGB bg elision count
		uint64_t bgemissions;	   // RGB bg emissions
		uint64_t defaultelisions;  // default color was	emitted
		uint64_t defaultemissions; // default color was	elided
		uint64_t refreshes;	   // refreshes	(unoptimized redraws)
		uint64_t sprixelemissions; // sprixel draw count
		uint64_t sprixelelisions;  // sprixel elision count
		uint64_t sprixelbytes;	   // sprixel bytes emitted
		uint64_t appsync_updates;  // application-synchronized updates
		uint64_t input_events;	   // inputs received or synthesized
		uint64_t input_errors;	   // errors processing	input
		uint64_t hpa_gratuitous;   // gratuitous HPAs issued
		uint64_t cell_geo_changes; // cell geometry changes (resizes)
		uint64_t pixel_geo_changes;// pixel geometry changes (font resize)

		// current state -- these can decrease
		uint64_t fbbytes;	   // bytes devoted to framebuffers
		unsigned planes;	   // planes currently in existence
	      }	ncstats;

       ncstats*	notcurses_stats_alloc(struct notcurses*	nc);

       void notcurses_stats(struct notcurses* nc, ncstats* stats);

       void notcurses_stats_reset(struct notcurses* nc,	ncstats* stats);

DESCRIPTION
       notcurses_stats_alloc allocates an ncstats object.  This	should be used
       rather  than  allocating	 the  object  in  client code, to future-proof
       against the struct being	enlarged by later Notcurses versions.

       notcurses_stats acquires	an atomic snapshot  of	statistics,  primarily
       related	to  notcurses_render(3).  notcurses_stats_reset	does the same,
       but also	resets all cumulative stats (immediate stats such  as  fbbytes
       are not reset).

       renders	is  the	 number	 of successful calls to	notcurses_render(3) or
       ncpile_render_to_buffer(3).  failed_renders is the number of unsuccess-
       ful calls to these functions.  failed_renders should be 0; renders  are
       not  expected  to  fail except under exceptional	circumstances.	should
       notcurses_render(3) fail	while writing out a frame to the terminal,  it
       counts as a failed render.

       raster_max_bytes	 and  raster_min_bytes	track  the maximum and minimum
       number of bytes used rasterizing	a frame.  A given state	 of  Notcurses
       does  not  correspond to	a unique number	of bytes; the size is also de-
       pendent on the existing terminal	state.	As a first approximation,  the
       time a terminal takes to	ingest and reflect a frame is dependent	on the
       size of the rasterized frame.

       render_ns,  render_max_ns,  and render_min_ns track the total amount of
       time spent rendering frames in nanoseconds.  Rendering takes  place  in
       ncpile_render	(called	  by   notcurses_render(3)   and   ncpile_ren-
       der_to_buffer).	This step is independent of the	terminal.

       raster_ns, raster_max_ns, and raster_min_ns track the total  amount  of
       time  spent rasterizing frames in nanoseconds.  Rasterizing takes place
       in  ncpile_raster  (called  by  notcurses_raster(3)   and   ncpile_ren-
       der_to_buffer).	 This  step  depends on	the terminal definitions.  The
       same frame might	not rasterize to the same bytes	for  different	termi-
       nals.

       writeout_ns,  writeout_max_ns,  and  writeout_min_ns  track  the	 total
       amount of time spent writing frames to the terminal.  This takes	 place
       in ncpile_rasterize (called by notcurses_render(3)).

       cellemissions  reflects	the  number  of	 EGCs written to the terminal.
       cellelisions reflects the number	of cells which were not	 written,  due
       to damage detection.

       refreshes  is  the  number of times notcurses_refresh has been success-
       fully executed.

       fbbytes is the total number of bytes devoted to framebuffers throughout
       the struct notcurses context.  planes is	the number of  planes  in  the
       context.	  Neither  of  these  stats  can reach 0, due to the mandatory
       standard	plane.

       sprixelemissions	is the number of sprixel  draws.   sprixelelisions  is
       the  number  of	times a	sprixel	was elided--essentially, the number of
       times a sprixel appeared	in a rendered frame  without  freshly  drawing
       it.   sprixelbytes is the number	of bytes used for sprixel drawing.  It
       does not	include	move/delete  operations,  nor  glyphs  used  to	 erase
       sprixels.

       input_errors is the number of errors while processing input, e.g.  mal-
       formed control sequences	or invalid UTF-8 (see utf8(7)).

       hpa_gratuitous  is the number of	hpa (horizontal	position absolute, see
       terminfo(5)) control sequences issued  where  not  strictly  necessary.
       This  is	 done  to  cope	 with  fundamental ambiguities regarding glyph
       width.  It is not generally possible to know how	wide a glyph  will  be
       rendered	 on  a	given  combination of font, font rendering engine, and
       terminal.  Indeed, it is	not even generally possible to know  how  many
       glyphs  will  result  from  a sequence of EGCs.	As a result, Notcurses
       sometimes issues	"gratuitous" hpa controls.

       cell_geo_changes	is the number of changes to the	 visible  area's  cell
       geometry.   The	cell geometry changes whenever the visible area	is re-
       sized   without	 a   corresponding   cell-pixel	   geometry    change.
       pixel_geo_changes  is  the  number  of changes to cells'	pixel geometry
       (i.e.  the height and width of each cell),  and	changes	 whenever  the
       font  size changes.  Both can change at the same	time if	e.g.  a	termi-
       nal undergoes a font size change	without	changing its total size.

NOTES
       Unsuccessful render operations do not contribute	to the	render	timing
       stats.

       Linux  framebuffer bitmaps are not written through the terminal device,
       but instead directly into the memory-mapped framebuffer (see  mmap(2)).
       Bytes used for framebuffer graphics are thus independent	of bytes writ-
       ten  to the terminal.  This explains why	sprixelbytes may be surprising
       given the value of raster_bytes.

RETURN VALUES
       Neither notcurses_stats nor notcurses_stats_reset  can  fail.   Neither
       returns	any  value.  notcurses_stats_alloc returns a valid ncstats ob-
       ject on success,	or NULL	on allocation failure.

SEE ALSO
       mmap(2),	notcurses(3), notcurses_render(3), terminfo(5),	utf8(7)

AUTHORS
       nick black <nickblack@linux.com>

				    v3.0.16		    notcurses_stats(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=notcurses_stats&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help