Чиним веб-браузер и заодно копаемся в компонентах

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Чиним веб-браузер и заодно копаемся в компонентах

Сообщение БудДен » 01.05.20 22:04

Он ломается на открытии html-файла, к-рый раньше открывался. У нас есть коммит, на к-ром оно сломалось:

https://gitlab.com/budden/jaos/-/commit ... ee441b8b81

Попробуем для начала распечатать PID процесса и посмотреть через инспектор активных объектов, где он застревает.
Последний раз редактировалось БудДен 02.05.20 10:35, всего редактировалось 1 раз.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Пытаемся починить веб-браузер

Сообщение БудДен » 01.05.20 22:24

Objects.GetProcessId возвращает код процесса, но как эту инфу записать, чтобы в следующий раз опять 15 минут не искать?

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Чиним веб-браузер и заодно копаемся в компонентах

Сообщение БудДен » 02.05.20 10:44

Компоненты описаны где-то тут для начала: https://gitlab.com/YarRom/a2os/-/blob/m ... Design.pdf

Но ясно, что тонкости, связанные с жизненным циклом компонента, там не написаны.
Для начала, пытаемся понять, где мы зависли. Для этого печатаем в нескольких местах Objects.GetProcessId и ещё вставляем отладочную печать.
Локализовав и имея на руках ПИД процесса, идём в Inspect/Объекты, находим объект с таким PID и печатаем его стек. Получается как-то так:

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

Objects.Await:878 pc=4361736 [00428E08H] = 4360858 + 878 crc=74C976E0
  cond= [@20] Locks.RWLock.AcquireWrite.@AwaitProcedure2
  slink= [@16] 114489700
  obj= [@12] 0C901438 (Locks.RWLock)
  flags= [@8] {}
  hdr= [@-8] 0C9013E8 (Heaps.ProtRecBlockDesc)
  r= [@-12] 0C8CA3C0 (Objects.Process)
  c= [@-16] 00000000 NIL
  t= [@-20] 00000000 NIL
  res= [@-24] 0
Locks.RWLock.AcquireWrite:228 pc=13122762 [00C83CCAH] = 13122534 + 228 crc=D1D0038C
  me= [@-8] 0C8C82D8 (WMMessages.MsgSequencer)
  other= [@-12] 0C901358 (WMMessages.MsgSequencer)
WMComponents.Component.SetSequencer:88 pc=28855901 [01B84E5DH] = 28855813 + 88 crc=DBFD7748
  s= [@8] 0C8C82D8 (WMMessages.MsgSequencer)
  old= [@-8] 0C901358 (WMMessages.MsgSequencer)
  c= [@-12] 00000000 NIL
WMTextView.TextView.LayoutLine.GetExtents:557 pc=33263485 [01FB8F7DH] = 33262928 + 557 crc=9E7D4EA2
  ch= [@24] -1
  dx=06D2F9DC-> [@416] 970[000003CA]
  ascent=06D2F9D8-> [@424] 2[00000002]
  descent=06D2F9D4-> [@420] 0[00000000]
  gs= [@-44] ...(WMGraphics.GlyphSpacings)
  vc= [@-48] 0C913858 (WebBrowserComponents.HR)
  font= [@-52] 00000000 NIL
WMTextView.TextView.LayoutLine:4527 pc=33237091 [01FB2863H] = 33232564 + 4527 crc=9E7D4EA2
  pos=06D2FBB4-> [@92] 109[0000006D]
  ch=06D2FBB0-> [@44] -1
  l=06D2FBA8-> [@97198508] ...(WMTextView.LineInfo)
  wrapwidth= [@16] 976[000003D0]
  stopPos= [@12] -1[FFFFFFFF]
  stopXPos= [@8] -1[FFFFFFFF]
  i= [@-8] 0[00000000]
  wrapPos= [@-12] 0[00000000]
  eol= [@-13] false
  first= [@-14] false
WMTextView.Layout.LayoutLine:77 pc=33221226 [01FAEA6AH] = 33221149 + 77 crc=9E7D4EA2
WMTextView.Layout.FullLayout:374 pc=33221607 [01FAEBE7H] = 33221233 + 374 crc=9E7D4EA2
  textChanged= [@8] false
  @Self=06D2FC04-> [@96709360] ...(WMTextView.Layout)
WMTextView.TextView.Resized:292 pc=33245766 [01FB4A46H] = 33245474 + 292 crc=9E7D4EA2
  prevWidth= [@-8] -10[FFFFFFF6]
WMComponents.VisualComponent.PropertyChanged:46 pc=28866615 [01B87837H] = 28866569 + 46 crc=DBFD7748
  sender= [@12] 0C96A880 (WMProperties.PropertyList)
  property= [@8] 0C96AFE0 (WMProperties.RectangleProperty)
  @hiddenIRVar0= [@-8] 00000000 NIL
WMTextView.TextView.PropertyChanged:1563 pc=33245467 [01FB491BH] = 33243904 + 1563 crc=9E7D4EA2
  sender= [@12] 0C96A880 (WMProperties.PropertyList)
  property= [@8] 0C96AFE0 (WMProperties.RectangleProperty)
  highlighter= [@-8] 00000000 NIL
  oldBorders= [@-24] ...(WMRectangles.Rectangle)
  string= [@-28] 00000000 (INVALID)
WMComponents.Component.InternalPropertyChanged:181 pc=28853151 [01B8439FH] = 28852970 + 181 crc=DBFD7748
  sender= [@12] 0C96A880 (WMProperties.PropertyList)
  property= [@8] 0C96AFE0 (WMProperties.RectangleProperty)
WMEvents.EventSource.CallWithSender:102 pc=13228149 [00C9D875H] = 13228047 + 102 crc=77A22BA3
  sender= [@12] 0C96A880 (WMProperties.PropertyList)
  par= [@8] 0C96AFE0 (WMProperties.RectangleProperty)
  cur= [@-8] 00000000 NIL
WMEvents.EventSource.Call:55 pc=13228716 [00C9DAACH] = 13228661 + 55 crc=77A22BA3
  par= [@8] 0C96AFE0 (WMProperties.RectangleProperty)
WMProperties.PropertyList.ReleaseWrite:209 pc=28474761 [01B27D89H] = 28474552 + 209 crc=4FEC3D8C
  removeLock= [@-5] true
  changed= [@-12] 0C96AFE0 (WMProperties.RectangleProperty)
  nofChanges= [@-16] 1
WMProperties.Property.ReleaseWrite:49 pc=28436570 [01B1E85AH] = 28436521 + 49 crc=4FEC3D8C
WMProperties.RectangleProperty.Set:243 pc=28466347 [01B25CABH] = 28466104 + 243 crc=4FEC3D8C
  value= [@8] ...(WMRectangles.Rectangle)
WMComponents.VisualComponent.AlignSubComponents:1334 pc=28869955 [01B88543H] = 28868621 + 1334 crc=DBFD7748
  c= [@-8] 0C96A478 (WMTextView.TextView)
  vc= [@-12] 0C96A478 (WMTextView.TextView)
  r= [@-28] ...(WMRectangles.Rectangle)
  b= [@-44] ...(WMRectangles.Rectangle)
  rel= [@-60] ...(WMRectangles.Rectangle)
  @hiddenIRVar0= [@-76] ...(WMRectangles.Rectangle)
  @hiddenIRVar1= [@-76] ...(WMRectangles.Rectangle)
  @hiddenIRVar2= [@-76] ...(WMRectangles.Rectangle)
  @hiddenIRVar3= [@-76] ...(WMRectangles.Rectangle)
  @hiddenIRVar4= [@-76] ...(WMRectangles.Rectangle)
  @hiddenIRVar5= [@-76] ...(WMRectangles.Rectangle)
  @hiddenIRVar6= [@-76] ...(WMRectangles.Rectangle)
WMComponents.VisualComponent.Resized:269 pc=28874777 [01B89819H] = 28874508 + 269 crc=DBFD7748
  p= [@-8] 08C859F8 (WebBrowserPanel.WebPanel)
WebBrowserPanel.HTMLPanel.Resized:26 pc=147163322 [08C588BAH] = 147163296 + 26 crc=E20EEDFE
  item= [@-8] 00000000 NIL
  width= [@-12] 0[00000000]
WMComponents.VisualComponent.PropertyChanged:46 pc=28866615 [01B87837H] = 28866569 + 46 crc=DBFD7748
  sender= [@12] 0C9003C0 (WMProperties.PropertyList)
  property= [@8] 0C900B20 (WMProperties.RectangleProperty)
  @hiddenIRVar0= [@-8] 00000000 NIL
WMComponents.Component.InternalPropertyChanged:181 pc=28853151 [01B8439FH] = 28852970 + 181 crc=DBFD7748
  sender= [@12] 0C9003C0 (WMProperties.PropertyList)
  property= [@8] 0C900B20 (WMProperties.RectangleProperty)
WMEvents.EventSource.CallWithSender:102 pc=13228149 [00C9D875H] = 13228047 + 102 crc=77A22BA3
  sender= [@12] 0C9003C0 (WMProperties.PropertyList)
  par= [@8] 0C900B20 (WMProperties.RectangleProperty)
  cur= [@-8] 00000000 NIL
WMEvents.EventSource.Call:55 pc=13228716 [00C9DAACH] = 13228661 + 55 crc=77A22BA3
  par= [@8] 0C900B20 (WMProperties.RectangleProperty)
WMProperties.PropertyList.ReleaseWrite:209 pc=28474761 [01B27D89H] = 28474552 + 209 crc=4FEC3D8C
  removeLock= [@-5] true
  changed= [@-12] 0C900B20 (WMProperties.RectangleProperty)
  nofChanges= [@-16] 1
WMProperties.Property.ReleaseWrite:49 pc=28436570 [01B1E85AH] = 28436521 + 49 crc=4FEC3D8C
WMProperties.RectangleProperty.Set:243 pc=28466347 [01B25CABH] = 28466104 + 243 crc=4FEC3D8C
  value= [@8] ...(WMRectangles.Rectangle)
WMComponents.VisualComponent.AlignSubComponents:1334 pc=28869955 [01B88543H] = 28868621 + 1334 crc=DBFD7748
  c= [@-8] 0C900118 (WebBrowserPanel.HTMLPanel)
  vc= [@-12] 0C900118 (WebBrowserPanel.HTMLPanel)
  @hiddenIRVar6= [@-76] ...(WMRectangles.Rectangle)
WebBrowserPanel.WebPanel.Loaded:641 pc=147156773 [08C56F25H] = 147156132 + 641 crc=E20EEDFE
  sender= [@12] 0C8FD3D8 (WebBrowserPanel.ContentLoader)
  data= [@8] 0C8FDBA0 (WebBrowserPanel.LoadedMsg)
  msg= [@-8] 0C8FDBA0 (WebBrowserPanel.LoadedMsg)
  notifyMsg= [@-12] 0CA0AD80 (WebBrowserPanel.NotifyMsg)
  @hiddenIRVar0= [@-16] 0CA0AD80 (WebBrowserPanel.NotifyMsg)
WMMessages.MsgSequencer.Handle:156 pc=13856953 [00D370B9H] = 13856797 + 156 crc=F84B14F7
  msg=06D2FF28-> [@96043972] ...(WMMessages.Message)
WMMessages.MsgSequencer.@Body:315 pc=13858259 [00D375D3H] = 13857944 + 315 crc=F84B14F7
Objects.Wrapper:334 pc=4359300 [00428484H] = 4358966 + 334 crc=74C976E0
  lpParameter= [@8] INVALID ADR:06D2FF78
  t= [@-8] 0C8CA3C0 (Objects.Process)
  obj= [@-12] 0C8C82D8 (WMMessages.MsgSequencer)
  res= [@-16] 1
  bp= [@-20] 06D2FF70
  sp= [@-24] 06D2FF48

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Чиним веб-браузер и заодно копаемся в компонентах

Сообщение БудДен » 02.05.20 18:41

Сначала при загрузке вызывается

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

WebBrowserPanel.ContentLoader.@Body
 WebBrowserPanel.GetContent
  WebBrowserPanel.HTMLPanel.New
   WebBrowserPanel.HTMLPanel.Load
    WMTextView.TextView.SetText
     WMTextView.Layout.FullLayout
       ... LayoutLine
          ... GetExtents
            ... HR.SetSequencer , поскольку HR - это объект и при его вставке  текст назначается Sequencer.
И тогда sequencer первый раз устанавливается.
А потом второй вызов:

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

(через очередь сообщений)
AddContent(vc); - здесь тоже рекурсивно должно было поставиться SetSequencer. 
где vs = WebBrowserPanel.HTMLPanel, т.е. секвенсер должен был подмениться и здесь?
AlignSubComponents();
 WebBrowserPanel.WebPanel.Loaded:641
  WMComponents.VisualComponent.AlignSubComponents:1334
    и здесь повторно происходит назначение секвенсера уже на другое значение. 

Похоже на то, что сначала при загрузке вызывается WMTextView.SetText, и там для объектов (таких, как HR), вызывается смена Sequencer-а. Сначала Sequencer пуст и всё это проходит без проблем.

А в процедуре loaded вызывается WebPanel.Loaded, приходит сообщение с компонентом, изображающим то, что загрузилось.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Чиним веб-браузер и заодно копаемся в компонентах

Сообщение БудДен » 02.05.20 19:05

Секвенсер - это очередь сообщений. Откуда они берутся вообще? Например, WindowManager.WindowManager.Add может их создавать для новых окон.
HTMLPanel создаёт свой. WebBrowser берёт из окна. Можно напечать стек в конструкторе секвенсера и отследить, какой секвенсер у нас куда попадает, или просто сделать так, чтобы в HTMLPanel не создавался секвенсер, а брался бы из окна (тогде его надо сразу создавать по месту).

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Чиним веб-браузер и заодно копаемся в компонентах

Сообщение БудДен » 02.05.20 22:36

В общем, я склонен на этот раз отступить. Ясно то, что я не проник во все тонкости устройства компонент. Ясно и то, что и сами авторы A2 не были компетентны. Возможно, кто-то и когда-то был, но коллектив с учётом растянутости разработки во времени - нет. Это очевидно из их недоумевающих комментариев, размещённых в местах, где они сами не понимали как оно должно быть устроено. Что ж поделать, взаимодействие и инициализация визуальных компонент, работающих через сочетание явных вызовов и очередей сообщений - это сложно. Во всяком случае, я кое-что об этой теме узнал.

Нужно научиться строить граф "кто кого ждёт". Для этого есть предпосылки, но там кое-что испорчено или просто никогда не было сделано нормально. Есть PID процесса, но я не знаю, как получить PID для произвольного объекта, отличающегося от текущего. В случае, если PID активного объекта не меняется, это легко исправить, добавив в объект поле "PID". Но я не знаю, не меняется ли он. Мало ли...

Во всяком случае, лимит времени на эту задачу исчерпан и пора вернуться к русификации.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Новости про браузер из A2

Сообщение БудДен » 06.05.20 18:48

Sergey Durmanov, [06.05.20 17:30]
в общем, если у кого-то есть желание дальше заниматься браузером - вэлкам.

Sergey Durmanov, [06.05.20 17:37]
мой лимит времени на браузер исчерпан. максимум я могу еще закинуть модуль StringEncoding.Mod с конвертацией однобайтовых кодировок в utf8, которыя написал для теста браузера

Денис Будяк, [06.05.20 17:37]
А что там сделано?

Sergey Durmanov, [06.05.20 17:38]
открываются страницы по протоколу http, распознаются кодировки и устранено несколько мелких багов

Денис Будяк, [06.05.20 17:38]
это в транке?

Денис Будяк, [06.05.20 17:38]
неплохо тогда ещё зафиксировать задачи, которые нужно решить.

Sergey Durmanov, [06.05.20 17:39]
в принципе по ссылкам ходит, но иногда приходится нажимать кнопку Reload, чтобы содержимое отображалось

Sergey Durmanov, [06.05.20 17:41]
да там вообще нужно переписывать по-сути, там CSS древний да и HTML, проблемы с трансформацией. https я пробовал подключить, но сайты не открываются, возможно там проблема и с TLS

Sergey Durmanov, [06.05.20 17:43]
и с TextView тоже похоже проблемы - браузер рендерит в Text

Sergey Durmanov, [06.05.20 17:34]
[ Photo ]

Sergey Durmanov, [06.05.20 17:37]
мой лимит времени на браузер исчерпан. максимум я могу еще закинуть модуль StringEncoding.Mod с конвертацией однобайтовых кодировок в utf8, которыя написал для теста браузера

Денис Будяк, [06.05.20 17:37]
А что там сделано?

Sergey Durmanov, [06.05.20 17:38]
открываются страницы по протоколу http, распознаются кодировки и устранено несколько мелких багов

Денис Будяк, [06.05.20 17:38]
это в транке?

Денис Будяк, [06.05.20 17:38]
неплохо тогда ещё зафиксировать задачи, которые нужно решить.

Sergey Durmanov, [06.05.20 17:39]
в принципе по ссылкам ходит, но иногда приходится нажимать кнопку Reload, чтобы содержимое отображалось

Sergey Durmanov, [06.05.20 17:41]
да там вообще нужно переписывать по-сути, там CSS древний да и HTML, проблемы с трансформацией. https я пробовал подключить, но сайты не открываются, возможно там проблема и с TLS

Sergey Durmanov, [06.05.20 17:43]
и с TextView тоже похоже проблемы - браузер рендерит в Text
Последний раз редактировалось БудДен 06.05.20 18:50, всего редактировалось 2 раза.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Чиним веб-браузер и заодно копаемся в компонентах

Сообщение БудДен » 06.05.20 18:49

photo_2020-05-06_18-48-29.jpg
photo_2020-05-06_18-48-29.jpg (178.3 КБ) 390 просмотров

Ответить