Provided by: libnotcurses-core-dev_3.0.7+dfsg.1-1ubuntu5_amd64 bug

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  fb‐
       bytes 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 unsuccessful calls to these functions.  failed_renders should be 0;  ren‐
       ders  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 terminals.

       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 successfully 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 oper‐
       ations, nor glyphs used to erase sprixels.

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

       hpa_gratuitous is the number of hpa (horizontal position absolute, see terminfo(5)) control sequences is‐
       sued 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  resized  without  a  corresponding  cell-pixel  geometry  change.   pix‐
       el_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  terminal
       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 mem‐
       ory-mapped  framebuffer (see mmap(2)).  Bytes used for framebuffer graphics are thus independent of bytes
       written 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.  notcurs‐
       es_stats_alloc returns a valid ncstats object 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.7                                   notcurses_stats(3)