[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Texmacs-dev] Re: TeXmacs+Axiom
From: |
Josef Weidendorfer |
Subject: |
Re: [Texmacs-dev] Re: TeXmacs+Axiom |
Date: |
Thu, 24 May 2007 19:13:26 +0200 |
User-agent: |
KMail/1.9.6 |
Hi Joris,
On Thursday 24 May 2007, Joris van der Hoeven wrote:
> > Could you detail a bit? Or where do I find a description of how the
> > delay process works. Please don't let me read code, I will probably not
> > understand the essence.
>
> Basically, local retypesetting is done after every change.
> When typesetting is done, we render, text close to the cursor first.
> The rendering process is interrupted on a new keyboard event,
> even though a minimal number of boxes are always redisplayed.
I tried to come up with an extreme case to be able to reproduce how
this works. I made up one single paragraph with around 100 lines and
_lots_ of font changes (around 6 per line).
Finally I got a latency of around 1/3 of a second from typing one char
to display. This made some observations possible.
(I really do not think this is a "typical" paragraph).
This is from a fresh CVS checkout today.
IMHO there are a few optimizations possible:
* Most of the time, you append characters at the end of the paragraph.
I imagined that this should be faster than typing in the middle, but
this assumption obviously is wrong; the whole paragraph is relayouted
even in this case. Of course, this is totally correct.
We could cheat here: do only a relayout from the typing position to
the end of the paragraph after every key, and a complete relayout
only when idle.
However, I did not check the code if this is easily possible at all.
* When typing faster than display latency, it can last a few seconds
before you see anything of your typing. This means that:
(1) relayouting seems to be done for key press (otherwise it should
last a maximum of 0.3 seconds to display after fast typing)
(2) any redrawing gets completely suppressed when texmacs is busy
(2) is really bad in conjunction with (1). Texmacs should check before
any relayout is triggered whether there is a further key press already
in the input queue, and avoid useless relayouts.
(2) seems to be a bug in the current version according to your
description?
> I tested this strategy on several computers and installations and
> it seems to be the best possible. The only thing which can still be
> essentially improved is locality of the typesetting process.
> Nevertheless, for an ordinary paragraph, a complete typesetting
> is of the order of 0.01ms, so this is not the main bottleneck.
In strange cases, typesetting seems to become a bottleneck.
Just for the record, here is a small oprofile report for this "relayout
bottleneck", only texmacs.bin process, for events "CPU_CLK_UNHALTED"
(= time) and INSTR_RETIRED (number of executed assembly instructions,
not so important).
CPU_CLK_UNHALT...|INST_RETIRED:8...|
samples| %| samples| %|
------------------------------------
25343 81.7648 31711 85.0001 texmacs.bin
3887 12.5407 3924 10.5181 libguile.so.17.0.1
942 3.0392 925 2.4794 libc-2.5.so
552 1.7809 664 1.7798 libpthread-2.5.so
And in more detail...
[Note that there is really nothing to optimize in the following
functions if the above suggested optimizations can be done!]
CPU_CLK_UNHALT...|INST_RETIRED:8...
samples % samples % image name symbol name
5353 16.2473 6921 17.9561 texmacs.bin hashmap_rep<string,
string>::bracket_ro(string)
3192 9.6883 3599 9.3374 texmacs.bin string::operator()(int,
int)
2371 7.1964 3002 7.7885 texmacs.bin get_hyphens(string,
hashmap<string, string>)
1717 5.2114 2521 6.5406 texmacs.bin hash(string)
1007 3.0564 1521 3.9461 texmacs.bin operator new(unsigned
int)
972 2.9502 1128 2.9265 texmacs.bin
line_breaker_rep::process(list<int>)
812 2.4646 902 2.3402 texmacs.bin string::operator==(char*)
804 2.4403 1379 3.5777 texmacs.bin operator delete(void*)
775 2.3523 1000 2.5944 libguile.so.17.0.1 deval
696 2.1125 420 1.0897 texmacs.bin
tex_font_rep::get_extents(string, metric_struct (
671 2.0366 1194 3.0978 texmacs.bin operator new[](unsigned
int)
608 1.8454 847 2.1975 texmacs.bin string_rep::~string_rep()
Cheers,
Josef
- [Texmacs-dev] RE: TeXmacs+Axiom, (continued)
- [Texmacs-dev] RE: TeXmacs+Axiom, Bill Page, 2007/05/22
- [Texmacs-dev] Re: TeXmacs+Axiom, Ralf Hemmecke, 2007/05/21
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Joris van der Hoeven, 2007/05/22
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Joris van der Hoeven, 2007/05/22
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Ingolf Schäfer, 2007/05/22
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Offray Vladimir Luna Cárdenas, 2007/05/22
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Henri Lesourd, 2007/05/22
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, bump, 2007/05/22
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Ralf Hemmecke, 2007/05/22
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Joris van der Hoeven, 2007/05/24
- Re: [Texmacs-dev] Re: TeXmacs+Axiom,
Josef Weidendorfer <=
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Henri Lesourd, 2007/05/24
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Joris van der Hoeven, 2007/05/25
- Re: [Texmacs-dev] Re: TeXmacs+Axiom, Josef Weidendorfer, 2007/05/25
- [Texmacs-dev] Re: TeXmacs+Axiom, Martin Rubey, 2007/05/22
- [Texmacs-dev] RE: TeXmacs+Axiom, Bill Page, 2007/05/22
- [Texmacs-dev] Re: TeXmacs+Axiom, Ralf Hemmecke, 2007/05/21
- [Texmacs-dev] Re: TeXmacs+Axiom, Martin Rubey, 2007/05/22
- [Texmacs-dev] Re: TeXmacs+Axiom, Ralf Hemmecke, 2007/05/22
- [Texmacs-dev] Re: TeXmacs+Axiom, Martin Rubey, 2007/05/22
- [Texmacs-dev] Re: TeXmacs+Axiom, Ralf Hemmecke, 2007/05/22