From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 10.42.217.136 with SMTP id hm8cs273179icb; Thu, 30 Dec 2010 15:44:01 -0800 (PST) Received: by 10.224.54.65 with SMTP id p1mr15656970qag.241.1293752640799; Thu, 30 Dec 2010 15:44:00 -0800 (PST) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id g5si30198995qcq.138.2010.12.30.15.44.00; Thu, 30 Dec 2010 15:44:00 -0800 (PST) Received-SPF: pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) client-ip=205.234.109.19; Authentication-Results: mx.google.com; spf=pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) smtp.mail=sup-devel-bounces@rubyforge.org Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 2985A185837E; Thu, 30 Dec 2010 18:44:00 -0500 (EST) Received: from kuovi.tilus.net (kuovi.tilus.net [80.68.89.168]) by rubyforge.org (Postfix) with ESMTP id 5E3E6185837E for ; Thu, 30 Dec 2010 18:35:57 -0500 (EST) Received: by kuovi.tilus.net (Postfix, from userid 1000) id A17761F342; Fri, 31 Dec 2010 01:35:56 +0200 (EET) From: Tero Tilus To: Sup developers Date: Fri, 31 Dec 2010 01:35:56 +0200 Message-Id: <1293750761-sup-3852@tilus.net> User-Agent: Sup/git Content-Transfer-Encoding: 8bit MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-1293752156-621616-6407-6924-1-=" Subject: [sup-devel] Scrolling (with patches) X-BeenThere: sup-devel@rubyforge.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: Sup developer discussion List-Id: Sup developer discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: sup-devel-bounces@rubyforge.org Errors-To: sup-devel-bounces@rubyforge.org --=-1293752156-621616-6407-6924-1-= Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Jonas H. reported about slow horizontal scrolling on talk. http://rubyforge.org/pipermail/sup-talk/2010-December/004400.html I looked into it and found out that scrolling is pretty much fully dependant on Buffer#write and main cpu hogs within it are String#display_length (uses String#scan when on 1.8) and Ncurses::WINDOW#method_missing (wide/normal dispatching). Caching String#display_length cuts down String#scan calls by ~30%. That and hardwiring Ncurses::WINDOW#mvaddstr and #attrset cut average Buffer#write call to half of what it was. Also having configurable COL_JUMP would help people who need to scroll horizontally a lot. Included in the sup patch. Perceivable difference of these modifications is very small, at least to me. Please have a look if these patches (one of them against sup and another against ncursesw.rb in ncursesw gem) make any sense. ==== --- /usr/lib/ruby/gems/1.8/gems/ncursesw-1.2.4.2/lib/ncursesw.rb 2010-12- 31 00:37:31.000000000 +0200 +++ lib/ncurses.rb 2010-12-30 23:50:26.000000000 +0200 @@ -59,6 +58,29 @@ module Destroy_checker; def destroyed?; @destroyed; end; end class WINDOW include Destroy_checker + + @@mvwaddstr = Ncurses.respond_to? "mvwaddstr" + # This would be handled by #method_missing below, but for + # performance reasons it is extracted here. #mvaddstr is the beef + # of Redwood::Buffer#write which does all the drawing. + def mvaddstr(*args) + if @@mvwaddstr + Ncurses.mvwaddstr(*args) + else + Ncurses.mvaddstr(*args) + end + end + + @@wattrset = Ncurses.respond_to? "wattrset" + # See #mvaddstr abowe. + def attrset(*args) + if @@wattrset + Ncurses.wattrset(*args) + else + Ncurses.attrset(*args) + end + end + def method_missing(name, *args) name = name.to_s if (name[0,2] == "mv") ==== -- Tero Tilus ## 050 3635 235 ## http://tero.tilus.net/ --=-1293752156-621616-6407-6924-1-= Content-Disposition: attachment; filename="0002-Performance-and-configurability-of-horizontal-scroll.patch" Content-Type: application/octet-stream; name="0002-Performance-and-configurability-of-horizontal-scroll.patch" Content-Transfer-Encoding: base64 RnJvbSBiMGNjMGFmMjY1MzRlZjI4NDhmOTg3MTc5N2M0MTFjYTAxYmJhMGUw IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUZXJvIFRpbHVzIDx0 ZXJvQHRpbHVzLm5ldD4KRGF0ZTogRnJpLCAzMSBEZWMgMjAxMCAwMDo0ODow MyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFBlcmZvcm1hbmNlIGFuZCBjb25m aWd1cmFiaWxpdHkgb2YgaG9yaXpvbnRhbCBzY3JvbGxpbmcKCi0tLQogbGli L3N1cC5yYiAgICAgICAgICAgICAgICAgICB8ICAgIDMgKystCiBsaWIvc3Vw L2NvbG9ybWFwLnJiICAgICAgICAgIHwgICAgMiArKwogbGliL3N1cC9tb2Rl cy9zY3JvbGwtbW9kZS5yYiB8ICAgMTIgKysrKysrKy0tLS0tCiBsaWIvc3Vw L3V0aWwucmIgICAgICAgICAgICAgIHwgICAgMyArKy0KIDQgZmlsZXMgY2hh bmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9saWIvc3VwLnJiIGIvbGliL3N1cC5yYgppbmRleCBmNGU0NjAx Li4xNGU0NzFhIDEwMDY0NAotLS0gYS9saWIvc3VwLnJiCisrKyBiL2xpYi9z dXAucmIKQEAgLTI4Myw3ICsyODMsOCBAQCBFT1MKICAgICAgICAgOnNlbnRf c291cmNlID0+ICJzdXA6Ly9zZW50IiwKICAgICAgICAgOnBvbGxfaW50ZXJ2 YWwgPT4gMzAwLAogICAgICAgICA6d3JhcF93aWR0aCA9PiAwLAotICAgICAg ICA6c2xpcF9yb3dzID0+IDAKKyAgICAgICAgOnNsaXBfcm93cyA9PiAwLAor ICAgICAgICA6Y29sX2p1bXAgPT4gMgogICAgICAgfQogICAgICAgYmVnaW4K ICAgICAgICAgUmVkd29vZDo6c2F2ZV95YW1sX29iaiBjb25maWcsIGZpbGVu YW1lCmRpZmYgLS1naXQgYS9saWIvc3VwL2NvbG9ybWFwLnJiIGIvbGliL3N1 cC9jb2xvcm1hcC5yYgppbmRleCA4NDAyYWRkLi5hM2M0MzA5IDEwMDY0NAot LS0gYS9saWIvc3VwL2NvbG9ybWFwLnJiCisrKyBiL2xpYi9zdXAvY29sb3Jt YXAucmIKQEAgLTIyMCw2ICsyMjAsOCBAQCBjbGFzcyBDb2xvcm1hcAogICAg IENvbG9ybWFwLm5ldyB1bmxlc3MgQEBpbnN0YW5jZQogICAgIEBAaW5zdGFu Y2Uuc2VuZCBtZXRoLCAqYQogICBlbmQKKyAgIyBQZXJmb3JtYW5jZSBzaG9y dGN1dAorICBkZWYgc2VsZi5jb2xvcl9mb3IgKmE7IEBAaW5zdGFuY2UuY29s b3JfZm9yICphOyBlbmQKIGVuZAogCiBlbmQKZGlmZiAtLWdpdCBhL2xpYi9z dXAvbW9kZXMvc2Nyb2xsLW1vZGUucmIgYi9saWIvc3VwL21vZGVzL3Njcm9s bC1tb2RlLnJiCmluZGV4IGMxMzE0MjUuLjBlZDI2ZWEgMTAwNjQ0Ci0tLSBh L2xpYi9zdXAvbW9kZXMvc2Nyb2xsLW1vZGUucmIKKysrIGIvbGliL3N1cC9t b2Rlcy9zY3JvbGwtbW9kZS5yYgpAQCAtMTIsOCArMTIsNiBAQCBjbGFzcyBT Y3JvbGxNb2RlIDwgTW9kZQogCiAgIGF0dHJfcmVhZGVyIDpzdGF0dXMsIDp0 b3BsaW5lLCA6Ym90bGluZSwgOmxlZnRjb2wKIAotICBDT0xfSlVNUCA9IDIK LQogICByZWdpc3Rlcl9rZXltYXAgZG8gfGt8CiAgICAgay5hZGQgOmxpbmVf ZG93biwgIkRvd24gb25lIGxpbmUiLCA6ZG93biwgJ2onLCAnSicsICJcQy1l IgogICAgIGsuYWRkIDpsaW5lX3VwLCAiVXAgb25lIGxpbmUiLCA6dXAsICdr JywgJ0snLCAiXEMteSIKQEAgLTk4LDE5ICs5NiwyMyBAQCBjbGFzcyBTY3Jv bGxNb2RlIDwgTW9kZQogICBkZWYgc2VhcmNoX3N0YXJ0X2xpbmU7IEB0b3Bs aW5lIGVuZAogICBkZWYgc2VhcmNoX2dvdG9fbGluZSBsaW5lOyBqdW1wX3Rv X2xpbmUgbGluZSBlbmQKIAorICBkZWYgY29sX2p1bXAKKyAgICAkY29uZmln Wzpjb2xfanVtcF0gfHwgMgorICBlbmQKKwogICBkZWYgY29sX2xlZnQKICAg ICByZXR1cm4gdW5sZXNzIEBsZWZ0Y29sID4gMAotICAgIEBsZWZ0Y29sIC09 IENPTF9KVU1QCisgICAgQGxlZnRjb2wgLT0gY29sX2p1bXAKICAgICBidWZm ZXIubWFya19kaXJ0eQogICBlbmQKIAogICBkZWYgY29sX3JpZ2h0Ci0gICAg QGxlZnRjb2wgKz0gQ09MX0pVTVAKKyAgICBAbGVmdGNvbCArPSBjb2xfanVt cAogICAgIGJ1ZmZlci5tYXJrX2RpcnR5CiAgIGVuZAogCiAgIGRlZiBqdW1w X3RvX2NvbCBjb2wKLSAgICBjb2wgPSBjb2wgLSAoY29sICUgQ09MX0pVTVAp CisgICAgY29sID0gY29sIC0gKGNvbCAlIGNvbF9qdW1wKQogICAgIGJ1ZmZl ci5tYXJrX2RpcnR5IHVubGVzcyBAbGVmdGNvbCA9PSBjb2wKICAgICBAbGVm dGNvbCA9IGNvbAogICBlbmQKZGlmZiAtLWdpdCBhL2xpYi9zdXAvdXRpbC5y YiBiL2xpYi9zdXAvdXRpbC5yYgppbmRleCBlNTgyODVlLi4zNjgxMTgwIDEw MDY0NAotLS0gYS9saWIvc3VwL3V0aWwucmIKKysrIGIvbGliL3N1cC91dGls LnJiCkBAIC0yMTIsNyArMjEyLDggQEAgY2xhc3MgU3RyaW5nCiAgICMjIHRo ZSB1dGY4IHJlZ2V4IGFuZCBjb3VudCB0aG9zZS4gb3RoZXJ3aXNlLCB1c2Ug dGhlIGJ5dGUgbGVuZ3RoLgogICBkZWYgZGlzcGxheV9sZW5ndGgKICAgICBp ZiBSVUJZX1ZFUlNJT04gPCAnMS45LjEnICYmICgkZW5jb2RpbmcgPT0gIlVU Ri04IiB8fCAkZW5jb2RpbmcgPT0gInV0ZjgiKQotICAgICAgc2NhbigvLi91 KS5zaXplCisgICAgICAjIHNjYW4gaGFjayBpcyBzb21ld2hhdCBzbG93LCB3 b3J0aCB0cnlpbmcgdG8gY2FjaGUKKyAgICAgIEBkaXNwbGF5X2xlbmd0aCB8 fD0gc2NhbigvLi91KS5zaXplCiAgICAgZWxzZQogICAgICAgc2l6ZQogICAg IGVuZAotLSAKMS41LjYuNQoK --=-1293752156-621616-6407-6924-1-= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Sup-devel mailing list Sup-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-devel --=-1293752156-621616-6407-6924-1-=--