Пытаюсь ускорить редактор

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
смотритель
Site Admin
Сообщения: 46
Зарегистрирован: 25.04.18 15:17

Пытаюсь ускорить редактор

Сообщение смотритель » 29.11.24 19:20

Как обычно, на 5 минут и завяз.

Как устроены вызовы?

Код: Выделить всё


PetTrees.RefreshHandler()
  если ~IsCallFromSequencer() то
     sequencer.ScheduleEvent(сам.RefreshHandler, sender, data); 
  иначе
     AddNodes
	tree.Acquire;
        ...
	editor.text.AcquireRead;
	AddNodes(rootNode, diagnostics, log);
	editor.text.ReleaseRead;
	tree.Release;

AddNodes - перекрыта в ИСР_деревоРазбораМодуля.ДеревоМодуля:
   AddNodes^
   ИСР_ДеревоРазбораМодуля.ДеревоМодуля.Refresh(parent) (* не перекрыта *)
      что-то до
      module := RefreshWorkOfPETPanelProcVar()
   дальше добавляем отсюда узлы 

RefreshWorkOfPETPanelProcVar := ИСР.RefreshWorkOfPETPanelProc

RefreshWorkOfPETPanelProc - 
  petPanel.RefreshWorkOfPETPanelInner()
она-то и вызывает парсер.

смотритель
Site Admin
Сообщения: 46
Зарегистрирован: 25.04.18 15:17

Re: Пытаюсь ускорить редактор

Сообщение смотритель » 29.11.24 19:23

Очевидно, что не разорвав блокировку на самом дне стека, мы ничего не добъёмся.
Значит, именно тут надо разбить на две части, и видимо дальше вверх по стеку тоже, не считая того, что
можно сделать в отдельном потоке.

смотритель
Site Admin
Сообщения: 46
Зарегистрирован: 25.04.18 15:17

Re: Пытаюсь ускорить редактор

Сообщение смотритель » 29.11.24 20:11

Т.е. получается, что рвать надо все уровни, но постораемся построить рядом наши костыли.
Рвать надо начинать снизу и двигаться вверх и сверху вниз. Короче, во все стороны сразу.

* ИСР_ДеревоРазбораМодуля.ДеревоМодуля.RefreshHandler будет перекрыт и он будет только копировать текст и инициировать процесс фонового разбора файла.
* по окончанию фонового разбора файла ФоновыйПарсер отправляет в очередь событие PETTrees.RefreshHandlerПродолжение, в котором передаёт разобранный модуль
* ✓ почти всё, что сейчас делается в PETTrees.RefreshHandler, будет перенесено в ДеревоМодуля.RefreshHandlerПродолжение
* ✓ всю ересь про параметры стираем
* в том месте, где сейчас вызывается RefreshWorkOfPETPanelProcVar, будет вызываться она же, но новая процедура будет только лишь возвращать разобранный результат.

смотритель
Site Admin
Сообщения: 46
Зарегистрирован: 25.04.18 15:17

Re: Пытаюсь ускорить редактор

Сообщение смотритель » 30.11.24 00:49

Вроде сделал, помимо косяков в известных местах, дело решил косяк рядом.

смотритель
Site Admin
Сообщения: 46
Зарегистрирован: 25.04.18 15:17

Re: Пытаюсь ускорить редактор

Сообщение смотритель » 03.12.24 00:18

Только показалось, что всё сделал. В итоге на данный момент всё откатил и только в одном месте вроде бы поправил работу с таймером (он отключался не там, где надо). Время покажет, хватит ли этого для прекращения зависаний. Во всяком случае, нашёл способ печатать очередь сообщений в момент, когда она переполняется и от этого система решает её удлиннить.

Ответить