Calculator v3.23 + Far b5055 = проблема перерисовки

Здесь можно сообщить о найденных багах в Far.
Post Reply
ccaid
Posts: 841
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 17 times
Been thanked: 5 times

Calculator v3.23 + Far b5055 = проблема перерисовки

Post by ccaid » Fri 11 May, 2018 16:23

обнаружено и исследовано под Win10 1607 x64 + Far x86
Far b5049 — последний, в котором эффект не обнаружен.
начиная с b5055, эффект возникает и с нарастающей силой проявляется вплоть до крайней ночной (b5210).

воспроизведение.
архив с Far распаковывается в отдельную папку, туда же, в папку плагинов распаковывается Calculator v3.23 x86
запускается Far строкой (я использовал батник):

Code: Select all

Far.exe -s Profile
вызываем калькулятор: F11 "calculator" "calculator"
в поле выражения вводится:

Code: Select all

12345.67/543.21*135.24*12345.67/543.21*135.24*12345.67/543.21*135.24*12345.67/543.21*135.24
теперь все готово к демонстрации.
у проблемы есть два проявления: визуальное и быстродействие. в вышеописанной тестовой конфигурации действует только визуальное: зажимаем BS и смотрим на строки результата вычислений — помимо естественного мельтешения цифр видим хаотичные цветовые моргания разных строк результата. если же использовать реальную конфигурацию со всеми настройками, скриптами и плагинами, то дополнительно еще появляется падение скорости: например, упомянутая строка выражения удаляется ~4.45 вместо ~3.45 секунды. в более поздних билдах эффект усилился до того, что падение скорости можно обнаружить и на тестовой минимальной конфигурации, а для реальной конфигурации оно увеличивается (время удаления может достигать ~5 с, в отдельных случаях до 6 с).
Фар делают добрые люди

ccaid
Posts: 841
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 17 times
Been thanked: 5 times

Calculator v3.23 + Far b5055 = проблема перерисовки

Post by ccaid » Mon 14 May, 2018 09:25

а не мог бы, кто в теме, прокомментировать ситуацию?
кто виноват-то? скрытые хомуты плагина вылезли или в Far'е что-то не учли при крайних доработках?
на мантис или фтопку?
Фар делают добрые люди

User avatar
zg
zero-gravity
Posts: 5540
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Calculator v3.23 + Far b5055 = проблема перерисовки

Post by zg » Mon 14 May, 2018 11:03

я попробовал. дефолтные 5049 vs 5211. большой разницы не заметил. всё удаление — 3.4с vs 3.6с.
ccaid wrote:
Fri 11 May, 2018 16:23
хаотичные цветовые моргания разных строк результата.
я не вижу. вижу моргающие выделение и там и там. в 5211 — чуть чаще.

Yegor
Posts: 957
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 3 times
Been thanked: 12 times

Calculator v3.23 + Far b5055 = проблема перерисовки

Post by Yegor » Mon 14 May, 2018 19:48

Тоже хотел пожаловаться про перерисовку калькулятора, но руки не доходили (т.к. было не критично). Раз уж тема есть, хочу добавить деталей.

1) Распаковать файл во вложении (redraw.txt). В нем длинные строки.

2) Развернуть Фар на весь экран (AltF9)

3) Поменять настройки вьювера на такие:


На самом деле влияет только Maximum line width, у меня стоит 64К, можно вбить шесть девяток для лучшего эффекта.

4) Открыть redraw.txt во вьювере (F3)

5) Обязательно включить режим Unwrap (F2)

6) Вызвать калькулятор и повводить что-нибудь в Expression. У меня набирается не более 2-3 символов в секунду. Моему ноуту, правда, 4 года, но он 4-х ядерный (I7-4710HQ) + 16 GB памяти.

EDIT: Скорее всего проблема и в калькуляторе, т.к. с другими диалогами такого не происходит (или просто незаметно).
Attachments
redraw.txt.zip
(5.48 KiB) Downloaded 20 times
Last edited by Yegor on Mon 14 May, 2018 19:51, edited 1 time in total.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

User avatar
zg
zero-gravity
Posts: 5540
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Calculator v3.23 + Far b5055 = проблема перерисовки

Post by zg » Thu 17 May, 2018 16:37

на каждое нажатие клавиши происходит 6 вызовов DM_SETTEXTPTR, это приводит к шести перерисовкам. такой патч улучшает ситуацию (но я сильно не вникал, возможно есть более красивый вариант):

Code: Select all

*** C:\8\src\plugcalc\calc.cpp	Mon Nov  5 15:45:11 2012
--- C:\7\src\plugcalc\calc.cpp	Thu May 17 18:33:10 2018
*************** public:
*** 909,919 ****
--- 909,922 ----
  			}
  			else if (Item->PtrData[0] == '\0')
  			{
+ 				EnableRedraw(false);
  				SetText(CALC_TYPE_ID, L"");
  				for (int i = addons_info.edit_id1; i <= addons_info.edit_id2; i++)
  					SetText(i, L"");
+ 				EnableRedraw(true);
  			} else
  			{
+ 				EnableRedraw(false);
  				SArg res = parser->Parse(Item->PtrData, props.case_sensitive != 0);
  
  				if (parser->GetError())
*************** public:
*** 964,969 ****
--- 967,973 ----
  						}
  					}
  				}
+ 				EnableRedraw(true);
  			}
  
  			if (force_update)

Post Reply

Return to “Глюки и баги”