annotate lib-src/profile.c @ 12229:697c01e75adc

Various optimizations. The main one is to optimize for simple output at the end of the buffer, with no paging, and in that case to defer scrolling while we can. (term-emulate-terminal): Don't call term-handle-scroll in simple cases unless we are either paging or term-scroll-with-delete. (term-down): Likewise. (term-handle-scroll): Modify accordingly. (term-emulate-terminal): Avoid deleting old text in common case. Optimize the simple case of CRLF when we're at buffer end. Handle deferred scroll when done processing output. (term-handle-deferred-scroll): New function. (term-down): Simplify - no longer take RIGHT argument. Tune. (term-goto): Use term-move-columns to compensate for the above. (term-escape-char, term-set-escape-char): Add doc-string. (term-mouse-paste): Add xemacs support. Various speed enhencements: (term-handle-scroll): Don't clear term-current-row; maybe adjust it. (term-down): Don't call term-adjust-current-row-cache if we've done term-handle-scroll. (term-emulate-terminal): Don't call term-adjust-current-row-cache. (term-emulate-terminal): For TAB, don't nil term-start-line-column. (term-goto): Possible optimization.
author Richard M. Stallman <rms@gnu.org>
date Wed, 14 Jun 1995 22:30:16 +0000
parents 20769d80bc88
children 48786c683506
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* profile.c --- generate periodic events for profiling of Emacs Lisp code.
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 Copyright (C) 1992, 1994 Free Software Foundation, Inc.
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 Author: Boaz Ben-Zvi <boaz@lcs.mit.edu>
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 This file is part of GNU Emacs.
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 GNU Emacs is free software; you can redistribute it and/or modify
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 the Free Software Foundation; either version 2, or (at your option)
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 any later version.
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 GNU Emacs is distributed in the hope that it will be useful,
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 GNU General Public License for more details.
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 along with GNU Emacs; see the file COPYING. If not, write to
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 /**
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ** To be run as an emacs process. Input string that starts with:
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ** 'z' -- resets the watch (to zero).
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ** 'p' -- return time (on stdout) as string with format <sec>.<micro-sec>
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ** 'q' -- exit.
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 **
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ** abstraction : a stopwatch
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ** operations: reset_watch, get_time
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 */
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 #include <stdio.h>
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 #include <../src/config.h>
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 #include <../src/systime.h>
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
9887
be7b66e2cb98 (TV1, TV2): Use EMACS_TIME as type.
Richard M. Stallman <rms@gnu.org>
parents: 9491
diff changeset
36 static EMACS_TIME TV1, TV2;
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 static int watch_not_started = 1; /* flag */
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 static char time_string[30];
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 /* Reset the stopwatch to zero. */
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41
9491
dd3b83e4ceb0 Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents: 8336
diff changeset
42 void
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 reset_watch ()
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 {
8336
52590f967c1e (reset_watch, get_time): Use EMACS_GET_TIME.
Richard M. Stallman <rms@gnu.org>
parents: 6876
diff changeset
45 EMACS_GET_TIME (TV1);
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 watch_not_started = 0;
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 }
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 /* This call returns the time since the last reset_watch call. The time
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 is returned as a string with the format <seconds>.<micro-seconds>
6042
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
51 If reset_watch was not called yet, exit. */
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 char *
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 get_time ()
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 {
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 if (watch_not_started)
6042
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
57 exit (1); /* call reset_watch first ! */
8336
52590f967c1e (reset_watch, get_time): Use EMACS_GET_TIME.
Richard M. Stallman <rms@gnu.org>
parents: 6876
diff changeset
58 EMACS_GET_TIME (TV2);
9887
be7b66e2cb98 (TV1, TV2): Use EMACS_TIME as type.
Richard M. Stallman <rms@gnu.org>
parents: 9491
diff changeset
59 EMACS_SUB_TIME (TV2, TV2, TV1);
10087
20769d80bc88 (get_time): Fix up whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 9887
diff changeset
60 sprintf (time_string, "%lu.%06lu", EMACS_SECS (TV2), EMACS_USECS (TV2));
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 return time_string;
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 }
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 void
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 main ()
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 {
6042
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
67 int c;
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
68 while ((c = getchar ()) != EOF)
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 {
6042
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
70 switch (c)
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 {
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 case 'z':
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 reset_watch ();
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 break;
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 case 'p':
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 puts (get_time ());
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 break;
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 case 'q':
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 exit (0);
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 }
6042
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
81 /* Anything remaining on the line is ignored. */
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
82 while (c != '\n' && c != EOF)
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
83 c = getchar ();
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 }
6026
45b117ac2dbc (get_time): Simplify; avoid calling index.
Karl Heuer <kwzh@gnu.org>
parents: 5810
diff changeset
85 exit (1);
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 }