view src/gutter.h @ 5059:c8f90d61dcf3

fix memory usage stats to include pdumped objects -------------------- ChangeLog entries follow: -------------------- lisp/ChangeLog addition: 2010-02-21 Ben Wing <ben@xemacs.org> * diagnose.el: * diagnose.el (show-object-memory-usage-stats): Fix errors preventing this from working properly, account for words like "entry" pluralized to "entries". src/ChangeLog addition: 2010-02-21 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (FREE_FIXED_TYPE_WHEN_NOT_IN_GC): * alloc.c (struct): * alloc.c (tick_lrecord_stats): * alloc.c (tick_lcrecord_stats): * alloc.c (sweep_lcrecords_1): * alloc.c (COUNT_FROB_BLOCK_USAGE): * alloc.c (SWEEP_FIXED_TYPE_BLOCK_1): * alloc.c (free_cons): * alloc.c (free_key_data): * alloc.c (free_button_data): * alloc.c (free_motion_data): * alloc.c (free_process_data): * alloc.c (free_timeout_data): * alloc.c (free_magic_data): * alloc.c (free_magic_eval_data): * alloc.c (free_eval_data): * alloc.c (free_misc_user_data): * alloc.c (free_marker): * alloc.c (gc_sweep_1): * alloc.c (HACK_O_MATIC): * alloc.c (FROB): * alloc.c (object_memory_usage_stats): * alloc.c (Fgarbage_collect): * dumper.c: * dumper.c (pdump_objects_unmark): * lrecord.h: * lrecord.h (enum lrecord_alloc_status): Fixes to memory-usage-tracking code, etc. (1) Incorporate NEW_GC stuff into FREE_FIXED_TYPE_WHEN_NOT_IN_GC to avoid duplication. (2) Rewrite tick_lcrecord_stats() to include separate tick_lrecord_stats(); use in dumper.c to note pdumped objects. (3) Instead of handling frob-block objects specially in object_memory_usage_stats(), have SWEEP_FIXED_TYPE_BLOCK_1 increment the stats in lrecord_stats[] so that they get handled like other objects. (4) Pluralize entry as entries, etc.
author Ben Wing <ben@xemacs.org>
date Sun, 21 Feb 2010 15:29:12 -0600
parents 6728e641994e
children d372b17f63ce
line wrap: on
line source

/* Define general gutter support.
   Copyright (C) 1999 Andy Piper.

This file is part of XEmacs.

XEmacs is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.

XEmacs is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with XEmacs; see the file COPYING.  If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  */

/* Synched up with: Not in FSF. */

#ifndef INCLUDED_gutter_h_
#define INCLUDED_gutter_h_

#include "specifier.h"

#define DEVICE_SUPPORTS_GUTTERS_P(d) HAS_DEVMETH_P (d, output_frame_gutters)

DECLARE_SPECIFIER_TYPE (gutter);
#define XGUTTER_SPECIFIER(x) XSPECIFIER_TYPE (x, gutter)
#define GUTTER_SPECIFIERP(x) SPECIFIER_TYPEP (x, gutter)
#define CHECK_GUTTER_SPECIFIER(x) CHECK_SPECIFIER_TYPE (x, gutter)
#define CONCHECK_GUTTER_SPECIFIER(x) CONCHECK_SPECIFIER_TYPE (x, gutter)

#define DEFAULT_GUTTER_WIDTH		40
#define DEFAULT_GUTTER_BORDER_WIDTH	2

enum gutter_pos
{
  TOP_GUTTER     = 0,
  BOTTOM_GUTTER  = 1,
  LEFT_GUTTER    = 2,
  RIGHT_GUTTER   = 3
};

/* Iterate over all possible gutter positions */
#define GUTTER_POS_LOOP(var) \
  for (var = (enum gutter_pos) 0; var < 4; var = (enum gutter_pos) (var + 1))

extern Lisp_Object Qgutter;

extern Lisp_Object Vgutter_size[4];
extern Lisp_Object Vgutter_border_width[4];
void update_frame_gutters (struct frame *f);
void update_frame_gutter_geometry (struct frame *f);
void mark_gutters (struct frame* f);
void init_frame_gutters (struct frame *f);
void init_device_gutters (struct device *d);
void init_global_gutters (struct device *d);
void free_frame_gutters (struct frame *f);
void redraw_exposed_gutters (struct frame *f, int x, int y, int width,
			     int height);
void reset_gutter_display_lines (struct frame* f);
void gutter_extent_signal_changed_region_maybe (Lisp_Object obj,
						Charbpos start, Charbpos end);
int display_boxes_in_gutter_p (struct frame *f, struct display_box* db,
			       struct display_glyph_area* dga);

#define WINDOW_GUTTER_BORDER_WIDTH(w, pos) \
  (INTP ((w)->gutter_border_width[pos]) ? XINT ((w)->gutter_border_width[pos]) : 0)
#define WINDOW_GUTTER_SIZE(w, pos) \
  (INTP ((w)->gutter_size[pos]) ? XINT ((w)->gutter_size[pos]) : 0)
#define WINDOW_GUTTER_SIZE_INTERNAL(w, pos) \
  (INTP ((w)->real_gutter_size[pos]) ? XINT ((w)->real_gutter_size[pos]) : 0)
#define WINDOW_GUTTER_VISIBLE(w, pos) \
  ((w)->gutter_visible_p[pos])
#define WINDOW_GUTTER(w, pos) \
  ((w)->real_gutter[pos])
#define RAW_WINDOW_GUTTER(w, pos) \
  ((w)->gutter[pos])

#define WINDOW_REAL_GUTTER_SIZE(w, pos)	\
  (!NILP (WINDOW_GUTTER_VISIBLE (w, pos))		\
   ? WINDOW_GUTTER_SIZE_INTERNAL (w, pos)	\
   : 0)
#define WINDOW_REAL_GUTTER_VISIBLE(f, pos)	\
   (WINDOW_REAL_GUTTER_SIZE (f, pos) > 0)
#define WINDOW_REAL_GUTTER_BORDER_WIDTH(f, pos)	\
  ((!NILP (WINDOW_GUTTER_VISIBLE (f, pos))		\
   && WINDOW_GUTTER_SIZE_INTERNAL (f,pos) > 0)	\
   ? WINDOW_GUTTER_BORDER_WIDTH (f, pos)	\
   : 0)
#define WINDOW_REAL_GUTTER_BOUNDS(f, pos)	\
   (WINDOW_REAL_GUTTER_SIZE (f,pos) + 		\
    2 * WINDOW_REAL_GUTTER_BORDER_WIDTH (f,pos))

/* these macros predicate size on position and type of window */
#define WINDOW_REAL_TOP_GUTTER_BOUNDS(w)	\
   WINDOW_REAL_GUTTER_BOUNDS (w,TOP_GUTTER)
#define WINDOW_REAL_BOTTOM_GUTTER_BOUNDS(w)	\
   WINDOW_REAL_GUTTER_BOUNDS (w,BOTTOM_GUTTER)
#define WINDOW_REAL_LEFT_GUTTER_BOUNDS(w)	\
   WINDOW_REAL_GUTTER_BOUNDS (w,LEFT_GUTTER)
#define WINDOW_REAL_RIGHT_GUTTER_BOUNDS(w)	\
   WINDOW_REAL_GUTTER_BOUNDS (w,RIGHT_GUTTER)

#define FRAME_GUTTER_VISIBLE(f, pos) \
   WINDOW_REAL_GUTTER_VISIBLE (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)), pos)
#define FRAME_GUTTER_SIZE(f, pos) \
   WINDOW_REAL_GUTTER_SIZE (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)), pos)
#define FRAME_GUTTER_BOUNDS(f, pos) \
   WINDOW_REAL_GUTTER_BOUNDS (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)), pos)
#define FRAME_GUTTER_BORDER_WIDTH(f, pos) \
   WINDOW_REAL_GUTTER_BORDER_WIDTH (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)), pos)

#define FRAME_GUTTER(f, pos) \
WINDOW_GUTTER (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)), pos)

/* these macros predicate size on position and type of window */
#define FRAME_TOP_GUTTER_BOUNDS(f) \
   WINDOW_REAL_GUTTER_BOUNDS (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)), TOP_GUTTER)
#define FRAME_BOTTOM_GUTTER_BOUNDS(f) \
   WINDOW_REAL_GUTTER_BOUNDS (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)), BOTTOM_GUTTER)
#define FRAME_LEFT_GUTTER_BOUNDS(f) \
   WINDOW_REAL_GUTTER_BOUNDS (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)), LEFT_GUTTER)
#define FRAME_RIGHT_GUTTER_BOUNDS(f) \
   WINDOW_REAL_GUTTER_BOUNDS (XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)), RIGHT_GUTTER)

#endif /* INCLUDED_gutter_h_ */