Утечка GDI объектов в htmlayout.
От: eec  
Дата: 28.04.10 07:37
Оценка:
Мы используем htmlayout 3.3.1.43.
Во время многократной загрузки layout’a посредством функции HTMLayoutLoadHtml наблюдается утечка GDI объектов, а именно font’ов Verdana. Мы не используем этот шрифт вообще, его использует htmlayout. Стек из дампа с утечкой:

ChildEBP RetAddr  Args to Child              
0012e1f8 0b227eaa fffffff3 00000000 00000000 gdi32!CreateFontA
WARNING: Stack unwind information not available. Following frames may be wrong.
0012e254 0b1eccf6 00000000 0b441964 00000064 htmlayout!ValueInvoke+0x2b27e
0012e2b8 0b2a8e74 0b50e5d0 00000001 00000000 htmlayout!HTMLayoutAnimateElement+0x5cd
0012e2fc 0b257f0c 0b445b80 00000003 00000000 htmlayout!ValueInvoke+0xac248
0012e32c 0b257f0c 0b445b80 00000001 00000000 htmlayout!ValueInvoke+0x5b2e0
0012e35c 0b257f0c 0b445b80 00000002 00000001 htmlayout!ValueInvoke+0x5b2e0
0012e38c 0b26284c 0b445b80 0b445bd0 0012e468 htmlayout!ValueInvoke+0x5b2e0
0012e3b4 0b2427fb 0b445b80 0ac4beb0 0b445b80 htmlayout!ValueInvoke+0x65c20
0012e4fc 0b242109 0b3ba5d4 0ac4beb0 00000ab1 htmlayout!ValueInvoke+0x45bcf
0012e524 0b1e5a4f 0b3ba5c8 0ac4beb0 00000ab1 htmlayout!ValueInvoke+0x454dd
0012e554 0b1e9d23 0012e530 0012f074 0012ee8c htmlayout+0x5a4f
0012e9b4 0af6e503 ffffffff 00000001 00000000 htmlayout!HTMLayoutLoadHtml+0x31


На самой последней версии (3.3.2.1), скачанной с terrainformatica.com, утечка сохраняется.
Если кому-то интересен полный дамп, я могу его выслать или выложить.
htmlayout
Re: Утечка GDI объектов в htmlayout.
От: c-smile Канада http://terrainformatica.com
Дата: 29.04.10 04:44
Оценка:
Здравствуйте, eec, Вы писали:

There is no HFONT leak in htmlayout. Htmlayout maintains static table of fonts. Once created font will live in that table until process shutdown.

Cheers.
Re[2]: Утечка GDI объектов в htmlayout.
От: eec  
Дата: 29.04.10 08:10
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, eec, Вы писали:


CS>There is no HFONT leak in htmlayout. Htmlayout maintains static table of fonts. Once created font will live in that table until process shutdown.


CS>Cheers.


5000 вызовов HTMLayoutLoadHtml.
Данные из дампа:
OBJ_FONT=9770
Handle: 0xaa0a05ce Type: OBJ_FONT { 0x0, 0xe688d08 } Height=-13 Family=Verdana
Re[3]: Утечка GDI объектов в htmlayout.
От: c-smile Канада http://terrainformatica.com
Дата: 03.05.10 20:06
Оценка:
Здравствуйте, eec, Вы писали:

eec>Здравствуйте, c-smile, Вы писали:


CS>>Здравствуйте, eec, Вы писали:


CS>>There is no HFONT leak in htmlayout. Htmlayout maintains static table of fonts. Once created font will live in that table until process shutdown.


CS>>Cheers.


eec>5000 вызовов HTMLayoutLoadHtml.

eec>Данные из дампа:
eec>OBJ_FONT=9770
eec>Handle: 0xaa0a05ce Type: OBJ_FONT { 0x0, 0xe688d08 } Height=-13 Family=Verdana

Что такое "Данные из дампа:"?
Какая версия htmlayout?


В любом случае:

Запускаем browse.exe, грузим в него тестовый документ.
Запускаем Process Explorer, открываем tab Properties / Performance на browse.exe.
И жмем F5 в browse.exe — документ перегружается. Наблюдаем GDI handles counter.
Если при этом ты наблюдаешь рост GDI handles counter, то я хотел бы увидеть тот документ что ты загрузил.
Re[4]: Утечка GDI объектов в htmlayout.
От: Аноним  
Дата: 04.05.10 09:25
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Что такое "Данные из дампа:"?


Наша дампилка, которая позволяет расшифровать GDI объекты на манер WinDBG.
Могу выслать полный дамп WinDBG.

CS>Какая версия htmlayout?


Мы используем HTMLayout 3.3.1.43. На версии 3.3.2.1 ситуация аналогичная.

CS>В любом случае:


CS>Запускаем browse.exe, грузим в него тестовый документ.

CS>Запускаем Process Explorer, открываем tab Properties / Performance на browse.exe.
CS>И жмем F5 в browse.exe — документ перегружается. Наблюдаем GDI handles counter.
CS>Если при этом ты наблюдаешь рост GDI handles counter, то я хотел бы увидеть тот документ что ты загрузил.

Мы используем MFC, поэтому я взял mfc_browse.exe.
В документе прописаны виджеты, которые mfc_browse никак не обрабатывает, поэтому я немного изменил код:

int CLayoutView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
  ...

  m_pStatic = new CStatic();
  m_pStatic->Create( _T( "" ),
                     WS_CHILD | WS_VISIBLE | WS_BORDER,
                     CRect( 0, 0, 0, 0 ),
                     this );
  
  return 0;
}

LRESULT CLayoutView::OnCreateControl( LPNMHL_CREATE_CONTROL nm)
{ 
  if ( nm && m_pStatic )
  {
    nm->outControlHwnd = m_pStatic->m_hWnd;
  }

  return 0;
}

LRESULT CLayoutView::OnDestroyControl( LPNMHL_DESTROY_CONTROL nm)
{ 
  if ( nm )
  {
    nm->inoutControlHwnd = NULL;
  }

  return 0;
}



При каждом открытии утекает 1 GDI объект (по количеству виджетов). Если загрузить документ несколько раз через mfc_browse без виджетов, утечки нет.

HTML документа:


<html>
  <custom>
      <Cells>
        <Cell Number="0" ID="{8FD23C81-23A0-4F9B-8A48-AF5F10E57B55}"/>
    </Cells>
  </custom>
  <head>
    <title></title>
        <style>
            body { margin: 0px; padding: 0px }
            table#layout { width:100%; height:100%; padding: 3px; margin: 0px; background-color: #000000; background-image:url(res:"IDB_BACKGROUND"); background-repeat:repeat }
            table#layout > tr > td { overflow-x: hidden; border: 0px solid white; padding: 3px; margin: 0px; vertical-align: top; }
            table#layout > tr > td:nth-child(1) { width: 100%; height: 100%; padding: 1px; }
        </style>
  </head>
<body>
    <table #layout>
        <tr>
            <td>
                <widget type="videownd" style="height:100%; width:100%" id="{8FD23C81-23A0-4F9B-8A48-AF5F10E57B55}"/>
            </td>
        </tr>
    </table>
</body>
</html>
Re[5]: Утечка GDI объектов в htmlayout.
От: eec  
Дата: 11.05.10 06:56
Оценка:
Up
Re[6]: Утечка GDI объектов в htmlayout.
От: c-smile Канада http://terrainformatica.com
Дата: 12.05.10 16:29
Оценка:
Здравствуйте, eec, Вы писали:

eec>Up


Как я могу воспроизвести эту проблему?
Re[7]: Утечка GDI объектов в htmlayout.
От: eec  
Дата: 13.05.10 07:49
Оценка: 36 (1)
CS>Как я могу воспроизвести эту проблему?

Два способа:
1. Вручную выполнить пункты из http://www.rsdn.ru/forum/htmlayout/3795741.1.aspx
Автор:
Дата: 04.05.10

2. Скачать архив, с изменённым mfc_browse (http://ifolder.ru/17687579). Внутри также находится файл 1x1.htm при загрузке которого через Open, нарастает количество GDI объектов.
Re[8]: Утечка GDI объектов в htmlayout.
От: c-smile Канада http://terrainformatica.com
Дата: 13.05.10 20:56
Оценка:
Здравствуйте, eec, Вы писали:


CS>>Как я могу воспроизвести эту проблему?


eec>Два способа:

eec>1. Вручную выполнить пункты из http://www.rsdn.ru/forum/htmlayout/3795741.1.aspx
Автор:
Дата: 04.05.10

eec>2. Скачать архив, с изменённым mfc_browse (http://ifolder.ru/17687579). Внутри также находится файл 1x1.htm при загрузке которого через Open, нарастает количество GDI объектов.

Ага, увидел. Спасибо за пример. Фикс будет в следующем билде.
Re[9]: Утечка GDI объектов в htmlayout.
От: eec  
Дата: 17.05.10 07:53
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Ага, увидел. Спасибо за пример. Фикс будет в следующем билде.


В версии 3.3.2.2 утечка остаётся.

Я пробовал скачивать из двух мест:
http://www.terrainformatica.com/htmlayout/HTMLayoutSDK.zip
http://www.terrainformatica.com/htmlayout/HTMLayoutDLL.zip
Re[10]: Утечка GDI объектов в htmlayout.
От: c-smile Канада http://terrainformatica.com
Дата: 17.05.10 16:39
Оценка:
Здравствуйте, eec, Вы писали:

eec>Здравствуйте, c-smile, Вы писали:


CS>>Ага, увидел. Спасибо за пример. Фикс будет в следующем билде.


eec>В версии 3.3.2.2 утечка остаётся.


eec>Я пробовал скачивать из двух мест:

eec>http://www.terrainformatica.com/htmlayout/HTMLayoutSDK.zip
eec>http://www.terrainformatica.com/htmlayout/HTMLayoutDLL.zip

Попробуй скачать еще раз. Я обновил дистрибуцию.
Re[11]: Утечка GDI объектов в htmlayout.
От: eec  
Дата: 19.05.10 07:09
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Попробуй скачать еще раз. Я обновил дистрибуцию.


Спасибо, теперь всё в порядке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.