Страница 1 из 1
Чиним веб-браузер и заодно копаемся в компонентах
Добавлено: 01.05.20 22:04
БудДен
Он ломается на открытии html-файла, к-рый раньше открывался. У нас есть коммит, на к-ром оно сломалось:
https://gitlab.com/budden/jaos/-/commit ... ee441b8b81
Попробуем для начала распечатать PID процесса и посмотреть через инспектор активных объектов, где он застревает.
Re: Пытаемся починить веб-браузер
Добавлено: 01.05.20 22:24
БудДен
Objects.GetProcessId возвращает код процесса, но как эту инфу записать, чтобы в следующий раз опять 15 минут не искать?
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
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, приходит сообщение с компонентом, изображающим то, что загрузилось.
Re: Чиним веб-браузер и заодно копаемся в компонентах
Добавлено: 02.05.20 19:05
БудДен
Секвенсер - это очередь сообщений. Откуда они берутся вообще? Например, WindowManager.WindowManager.Add может их создавать для новых окон.
HTMLPanel создаёт свой. WebBrowser берёт из окна. Можно напечать стек в конструкторе секвенсера и отследить, какой секвенсер у нас куда попадает, или просто сделать так, чтобы в HTMLPanel не создавался секвенсер, а брался бы из окна (тогде его надо сразу создавать по месту).
Re: Чиним веб-браузер и заодно копаемся в компонентах
Добавлено: 02.05.20 22:36
БудДен
В общем, я склонен на этот раз отступить. Ясно то, что я не проник во все тонкости устройства компонент. Ясно и то, что и сами авторы A2 не были компетентны. Возможно, кто-то и когда-то был, но коллектив с учётом растянутости разработки во времени - нет. Это очевидно из их недоумевающих комментариев, размещённых в местах, где они сами не понимали как оно должно быть устроено. Что ж поделать, взаимодействие и инициализация визуальных компонент, работающих через сочетание явных вызовов и очередей сообщений - это сложно. Во всяком случае, я кое-что об этой теме узнал.
Нужно научиться строить граф "кто кого ждёт". Для этого есть предпосылки, но там кое-что испорчено или просто никогда не было сделано нормально. Есть PID процесса, но я не знаю, как получить PID для произвольного объекта, отличающегося от текущего. В случае, если PID активного объекта не меняется, это легко исправить, добавив в объект поле "PID". Но я не знаю, не меняется ли он. Мало ли...
Во всяком случае, лимит времени на эту задачу исчерпан и пора вернуться к русификации.
Новости про браузер из 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
Re: Чиним веб-браузер и заодно копаемся в компонентах
Добавлено: 06.05.20 18:49
БудДен
- photo_2020-05-06_18-48-29.jpg (178.3 КБ) 404 просмотра