Re: xCHM performance

0 views
Skip to first unread message

Thomas Neumann

unread,
Mar 8, 2006, 7:11:16 AM3/8/06
to wx-...@lists.wxwidgets.org, Vadim Zeitlin
Hi,

> thanks for forwarding but it would be more useful to see the real
> profiling result. Could you please ask Thomas Neumann to post them to
> wx-dev? Also, as it is I have really no idea about what did he profile, so
> some explanations would be helpful as well.
a short explanation first: I noticed some performance problems with xCHM
(a CHM viewer using wxWidgets, especially wxHTML) when opening a very
large CHM file. The CHM file (the JDK1.5 documentation) includes many
compressed html files, some of them very large. Opening the file with
xCHM took about 90 seconds, while opening it with the Microsoft CHM
viewer under Windows was very fast, so the xCHM viewer had some
performance problems.

Do identify the bottleneck, I run the viewer using a (simulating)
profiler, detailed instructions and profiler dump below. The performance
problems where apparently not caused by xCHM but by the wxHTML
components. More precisely, wxHtmlTagsCache and wcscmp (unicode string
compare) caused by far the majority of the execution time. Improving the
performance of wxHtmlTagsCache could therefore speed up xCHM by a large
factor.

The complete profile data is shown below, but I probably identified the
performance bottleneck. In htmltag.cpp line 106, the following code is
executed:

// find matching begin tag:
for (i = tg; i >= 0; i--)
if ((m_Cache[i].End1 == -1) && (wxStrcmp(m_Cache[i].Name, tagBuffer+1)
== 0))

This code is executed a huge number of times (over 15 billion
instruction reads) and calls itself the expensive wxStrcmp function.
Speeding up this code alone could probably speedup the whole program by
a factor of 10.

Thomas

Instructions for reproduction:

- configure wxWidgets 2.6.2 with
./configure --prefix=$HOME/wxWidgets --enable-optimise
--enable-debug_info --enable-unicode --disable-shared
- compile it with gcc4.0.2 (Linux x86)
- install chmlib (linked from xchm below)
- download xchm from http://xchm.sourceforge.net/download.html, compile
it with the custom wxWidgets and install it
- install valgrind (3.0.1)
- download the JDK1.5 documentation from
http://www.allimant.org/javadoc/jdk15e.html and unpack it

- profile with
valgrind --tool=cachegrind xchm jdk150.chm
- quit the program when the menu is shown (takes over 20 minutes on a
fast machine)
- view the results with cg_annotate --<pid>


Profiling results:

> --------------------------------------------------------------------------------
> I1 cache: 32768 B, 64 B, 8-way associative
> D1 cache: 32768 B, 64 B, 8-way associative
> L2 cache: 1048576 B, 64 B, 8-way associative
> Command: ./xchm /home/neumann/jdk150.chm
> Events recorded: Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw
> Events shown: Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw
> Event sort order: Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw
> Thresholds: 99 0 0 0 0 0 0 0 0
> Include dirs: /home/neumann/wxGTK-2.6.2/src/html/
> User annotated: htmltag.cpp
> Auto-annotation: off
>
> --------------------------------------------------------------------------------
> Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw
> --------------------------------------------------------------------------------
> 52,433,191,095 212,839,242 2,016,863 21,163,303,997 687,274,574 527,000,184 8,098,101,486 14,861,147 8,203,693 PROGRAM TOTALS
>
> --------------------------------------------------------------------------------
> Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw file:function
> --------------------------------------------------------------------------------
> 15,892,595,464 137 105 6,401,854,697 186,816,140 179,599,988 1,358,351,909 139,803 136,032 htmltag.cpp:wxHtmlTagsCache::wxHtmlTagsCache(wxString const&)
> 8,325,824,273 82,500,044 851,553 3,830,657,901 128,610,019 13,073,685 1,422,672,099 7,363,326 4,094,152 ???:???
> 8,001,422,871 50,331 99 3,109,548,982 336,362,104 323,443,825 887,278,284 0 0 ???:wcscmp
> 1,308,356,747 261,620 18,647 550,420,674 173,923 19,732 217,033,961 316,377 28,348 ???:TT_RunIns
> 817,815,322 150,739 510 330,606,194 454,456 1,651 87,001,630 0 0 ???:towlower
> 777,390,820 845 60 335,082,250 33 10 201,049,350 157,773 156,933 string.cpp:wxStringBase::append(unsigned, wchar_t)
> 715,866,879 530,245 949 187,546,889 1,807,522 28,493 79,249,267 25,497 3,045 ???:g_type_check_instance_is_a
> 682,061,781 166 147 277,113,605 997,360 993,143 130,929,826 168 49 htmltag.cpp:wxHtmlTag::wxHtmlTag(wxHtmlTag*, wxString const&, int, int, wxHtmlTagsCache*, wxHtmlEntitiesParser*)
> 601,556,054 558,839 241 187,150,707 104,277 40,784 106,943,966 32,944 9,732 ???:malloc
> 576,246,573 308,364 176 329,283,756 1,330,022 1,192,406 82,320,939 0 0 string.h:wxStringBase::GetStringData() const
> 572,120,735 329,839 282 181,876,948 773,594 489,654 111,951,371 37 3 ???:free
> 423,835,655 203,815 1,258 172,943,898 11,938 135 147,037,114 215,202 206,211 string.cpp:wxStringBase::Alloc(unsigned)
> 368,246,558 5,054,525 4,944 123,100,578 735,392 3,409 60,950,737 0 0 ???:pango_default_break
> 319,053,955 22 22 199,076,932 2,038 0 20,182,915 49,624 2,953 strconv.cpp:wxCSConv::MB2WC(wchar_t*, char const*, unsigned) const
> 303,265,094 202,399 967 257,049,387 436,898 39 242,808,780 2,295,825 1,814,779 string.cpp:wxStringBase::ConcatSelf(unsigned, wchar_t const*, unsigned)
> 295,344,330 11,877 350 101,524,612 564,526 4,552 55,377,082 43,540 5,023 ???:pthread_mutex_lock
> 266,320,223 631,206 283 103,554,704 3,367,765 96,457 48,673,871 1,536 63 ???:g_hash_table_lookup
> 255,439,047 352,636 2,322 96,796,677 390,177 331,629 51,359,855 0 0 string.cpp:wxDoCmpNoCase(wchar_t const*, unsigned, wchar_t const*, unsigned)
> 250,617,661 2,227 309 81,408,012 4 4 53,443,856 7 2 string.h:wxStringData::Unlock()
> 247,656,084 102,582 444 72,679,226 321,738 101,495 6,062,722 0 0 ???:wcslen
> 241,664,904 3,035 61 67,135,257 0 0 93,986,913 0 0 string.cpp:wxStringBase::CopyBeforeWrite()
> 238,231,220 0 0 95,292,488 2,370,933 1,352,534 71,469,366 45,610 651 string.h:wxStringBase::size() const
> 217,023,542 2,095,575 1,269 85,188,119 459,632 4,151 21,672,044 5,537 9 ???:g_type_instance_get_private
> 211,016,004 180 180 41,825,585 268,651 1,568 23,852,409 314,059 6,691 lzx.c:LZXdecompress
> 188,794,269 50,418 1 62,931,423 0 0 62,931,423 30,695 307 string.h:wxStringBase::length() const
> 185,250,900 128,771 92 55,575,270 0 0 55,575,270 0 0 string.h:wxString::operator wchar_t const*() const
> 174,298,242 394,250 274 40,343,324 499,885 796 7,470,950 0 0 ???:pango_script_for_unichar
> 172,951,990 303,861 1,648 77,236,692 254 25 16,532,527 0 0 htmlpars.cpp:wxHtmlEntitiesParser::Parse(wxString const&)
> 165,287,159 1,154,023 3,646 66,611,373 131,040 16,202 11,374,967 1 1 strconv.cpp:wxMBConvUTF8::WC2MB(char*, wchar_t const*, unsigned) const
> 160,060,716 173 29 66,691,965 2 0 66,691,965 0 0 string.h:wxString::operator<<(wchar_t)
> 160,060,716 0 0 66,691,965 0 0 66,691,965 0 0 string.h:wxString::append(unsigned, wchar_t)
> 157,151,766 128,602 426 104,767,844 5,600 3,166 26,191,961 0 0 string.h:wxStringBase::c_str() const
> 154,803,945 176 63 66,443,540 3 3 20,119,320 38,827 20,628 strconv.cpp:wxMBConvUTF8::MB2WC(wchar_t*, char const*, unsigned) const
> 148,682,664 789,699 1,422 36,132,130 136,234 242 13,131,232 20 4 ???:pango_script_iter_next
> 147,672,464 54,204 93 55,377,174 650 0 18,459,058 1 0 ???:pthread_mutex_unlock
> 146,267,406 50,365 95 65,007,736 1,113,230 1,018,135 16,251,934 0 0 string.h:wxStringData::IsEmpty() const
> 142,960,013 75,634 357 41,864,211 2,041 324 41,498,668 228 6 ???:g_malloc
> 140,344,173 935 2 62,375,188 51 2 15,593,797 0 0 string.h:wxStringData::IsShared() const
> 131,699,995 4,170 34 51,067,345 87,896 64,313 13,438,775 11,069 9,880 ???:iswspace
> 126,480,023 5,113,222 7,458 42,657,707 26,085 304 23,424,663 5,850 137 ???:pango_log2vis_get_embedding_levels
> 121,583,108 319,458 236 32,829,006 0 0 16,414,503 0 0 ???:FT_MulFix
> 121,377,738 260,718 271 38,329,592 510 1 19,164,741 0 0 ???:g_utf8_get_char
> 113,820,098 607,028 3,581 43,529,352 286,283 146,028 31,751,428 12,287 430 htmlpars.cpp:wxHtmlParser::DoParsing(int, int)
> 105,194,112 330,614 155 35,247,086 347,522 13,367 0 0 0 ???:strcmp
> 105,087,254 969,720 1,570 43,297,393 9,724 6,688 19,084,183 4,449 25 ???:pango_glyph_string_extents_range
> 102,758,310 345 37 43,386,842 91,179 75,779 11,417,590 0 0 ???:towupper
> 101,016,662 181,997 208 33,461,446 3,714 15 32,829,122 3 0 ???:g_free
> 100,091,367 922,025 1,043 28,384,119 218,516 651 17,926,812 0 0 ???:FcFreeTypeCharIndex
> 95,373,040 511,404 980 34,061,800 308,675 316 29,974,384 1 0 ???:FT_Get_Kerning
> 91,853,983 133 100 30,326,210 2,670 536 27,160,853 146 102 htmlpars.cpp:wxHtmlParser::CreateDOMSubTree(wxHtmlTag*, int, int, wxHtmlTagsCache*)
> 90,670,434 154,885 918 33,172,110 1 0 26,537,688 218,985 190,437 string.cpp:wxStringBase::AllocBuffer(unsigned)
> 86,234,821 131,782 81 26,533,788 82,863 361 19,900,348 18 2 ???:pango_fc_font_get_type
> 83,490,173 51,718 96 19,266,963 1 0 32,111,605 1 1 string.h:wxStringBase::~wxStringBase()
> 82,895,379 102,850 323 47,393,132 253,462 1,443 3,931,419 0 0 wxchar.h:wxTmemcmp(wchar_t const*, wchar_t const*, unsigned)
> 80,652,712 1,258 309 28,804,540 0 0 23,043,632 8 2 wxchar.h:wxStrlen(wchar_t const*)
> 76,872,466 273,816 239 31,447,827 6,528 0 27,953,624 1,170 1 ???:pango_font_get_glyph_extents
> 72,898,837 344,014 127 9,570,909 98,411 2,753 715,436 0 0 ???:g_str_hash
> 72,629,133 710,839 968 21,224,785 221,012 5,951 12,792,943 3,509 329 ???:realloc
> 71,496,360 371 78 32,173,362 686 6 19,065,696 53,919 51,699 string.cpp:wxArrayString::Add(wxString const&, unsigned)
> 68,622,466 403,455 332 18,715,218 28,637 194 9,357,609 0 0 ???:g_unichar_type
> 67,436,852 0 0 53,150,738 507,418 496,631 46,801,354 4,634 4,194 wxchar.h:wxTmemcpy(wchar_t*, wchar_t const*, unsigned)
> 67,225,545 395,187 484 19,420,713 84,719 1,891 25,396,317 0 0 ???:pango_fc_font_get_glyph
> 65,264,324 700 205 23,030,145 0 0 15,356,929 0 0 string.h:wxStringData::Lock()
> 63,299,795 394,203 600 11,114,312 0 0 6,501,208 0 0 ???:g_unichar_isspace
> 62,195,200 103,817 290 18,658,560 1 1 18,658,560 1 0 string.h:wxString::~wxString()
> 61,892,649 102,718 617 21,549,817 0 0 19,300,125 5 3 string.cpp:wxStringBase::InitWith(wchar_t const*, unsigned, unsigned)
> 60,811,800 633,329 471 16,985,375 58,174 1,614 2,823,475 0 0 ???:g_utf8_strlen
> 60,280,098 37 37 21,815,623 0 0 9,498,730 80,100 996 lzx.c:make_decode_table
> 59,886,654 127 29 38,575,471 405 27 899,310 0 0 wxchar.h:wxTmemchr(wchar_t const*, wchar_t, unsigned)
> 58,852,482 1,973,873 1,490 22,412,245 95,543 386 9,632,810 170 87 ???:g_datalist_id_set_data_full
> 57,550,725 1,055,642 898 22,905,099 67,583 13 7,435,175 1 0 ???:pango_find_paragraph_boundary
> 57,513,356 7,068 861 57,463,020 898,110 889,719 57,445,596 894,390 893,908 dynarray.cpp:wxBaseArrayPtrVoid::Realloc(unsigned)
> 56,422,499 1,612,244 6,080 9,380,886 158,056 1,305 19,674,743 106,203 903 ???:ContentTagHandler::HandleTag(wxHtmlTag const&)
> 56,395,627 976,267 329 22,365,538 231,108 19,242 8,803,160 0 0 ???:g_datalist_id_get_data
> 53,852,766 150,661 436 14,687,118 0 0 19,582,824 953 2 string.cpp:wxString::CmpNoCase(wchar_t const*) const
> 53,847,067 102,359 363 16,384,323 0 0 18,726,870 3,712 278 string.h:wxStringBase::wxStringBase(wxStringBase const&)
> 52,701,210 263,446 291 15,810,363 52,065 105 17,567,070 0 0 ???:pango_fc_font_lock_face
> 52,280,000 507,221 127 34,817,489 698,665 9,083 25,116,094 846,397 265,920 ???:memcpy
> 50,944,503 263,210 364 15,810,363 5 0 17,567,070 0 0 ???:pango_fc_font_unlock_face
> 49,763,924 70 32 27,412,729 541 154 6,602,438 306 38 textfile.cpp:wxTextFile::OnRead(wxMBConv&)
> 49,647,570 149,837 608 26,000,320 0 0 21,637,459 3,920 3,831 string.cpp:wxStringBase::AssignCopy(unsigned, wchar_t const*)
> 49,480,668 277,576 608 20,399,416 527 64 10,031,572 0 0 string.cpp:wxArrayString::Index(wchar_t const*, bool, bool) const
> 45,516,880 1,263,738 972 9,915,946 7,243 387 10,975,476 73,027 17,135 ???:calloc
> 45,494,536 695 58 17,864,870 6 1 6,779,622 0 0 string.cpp:wxStringBase::rfind(wchar_t, unsigned) const
> 44,406,061 959,562 473 11,253,037 68,014 1,121 13,832,443 985 18 ???:g_object_unref
> 43,917,675 263,554 362 14,053,656 46,321 3,892 10,540,242 0 0 ???:cairo_ft_scaled_font_lock_face
> 43,381,239 101,096 426 15,774,996 0 0 15,774,996 0 0 dynarray.h:wxArrayPtrVoid::operator[](unsigned) const
> 42,491,263 512,405 528 15,253,435 63,220 5,402 11,984,568 0 0 ???:g_strdup
> 42,239,344 649,905 1,801 19,814,532 729 0 10,138,747 0 0 ???:pango_fc_font_kern_glyphs
> 42,089,570 51,368 10 16,835,828 0 0 16,835,828 22,578 93 dynarray.h:wxBaseArrayPtrVoid::operator[](unsigned) const
> 41,837,460 394,259 326 8,965,170 263,845 408 4,482,585 0 0 ???:g_unichar_isgraph
> 41,830,584 101,275 520 17,429,410 51,835 28,687 13,943,528 0 0 htmlpars.cpp:wxHtmlTextPieces::operator[](unsigned) const
> 41,367,766 539,544 159 16,862,196 15,038 76 10,695,020 0 0 ???:g_slist_free
> 41,159,767 212 7 14,967,188 0 0 14,967,188 2 0 string.h:wxString::GetChar(unsigned) const
> 41,003,520 111,254 220 10,250,880 2 1 10,250,880 13 1 ???:operator new(unsigned)
> 40,279,648 444,915 980 7,765,067 284,989 3,904 1,227,822 0 0 ???:index
> 39,046,221 339,536 396 16,987,250 142,123 2,120 5,093,996 1 0 object.cpp:wxObject::UnRef()
> 38,012,632 38,901 669 15,273,031 75,324 12,235 7,460,034 10,155 3,032 ???:g_type_value_table_peek
> 37,880,613 0 0 21,044,785 33,199 832 4,208,957 0 0 dynarray.h:wxBaseArrayPtrVoid::Item(unsigned) const
> 37,669,904 653 86 18,464,106 20,020 13,379 8,250,408 31,405 31,187 string.cpp:wxArrayString::Grow(unsigned)
> 37,417,970 207 13 22,450,782 247,956 246,209 3,741,797 0 0 string.h:wxStringBase::at(unsigned) const
> 37,306,290 199,234 651 20,251,986 527 147 6,395,364 55,970 30,281 dynarray.cpp:wxBaseArrayPtrVoid::Insert(void const*, unsigned, unsigned)
> 37,011,023 0 0 21,149,156 44,148 150 10,574,578 7,243 7,020 string.h:wxStringBase::Init()
> 36,709,575 423,855 323 16,781,520 71,314 5,985 18,879,210 3,074 0 ???:pango_font_description_copy
> 36,060,740 788,506 1,363 15,287,583 34 8 3,071,206 3,172 34 ???:g_utf8_to_ucs4_fast
> 35,756,644 394,203 262 9,751,812 255,194 435 4,875,906 0 0 ???:g_unichar_break_type
> 35,664,509 462,459 7,980 13,969,159 198,969 28,894 10,289,618 51,814 14,747 ???:g_signal_emit_valist
> 34,937,313 1,559,285 580 14,091,240 78,832 540 7,367,505 106 87 ???:g_slist_prepend
> 34,788,705 327,965 426 18,667,176 479,766 156,174 5,919,262 167 0 object.cpp:wxObject::Ref(wxObject const&)
> 34,223,529 100,528 435 11,681,558 0 0 10,012,764 0 0 string.h:wxString::IsSameAs(wchar_t const*, bool) const
> 34,151,772 155,527 226 8,537,943 0 0 8,537,943 19,712 22 string.h:wxStringBase::empty() const
> 33,352,731 202,576 1,022 14,787,081 0 0 12,599,078 0 0 string.cpp:wxDoCmp(wchar_t const*, unsigned, wchar_t const*, unsigned)
> 33,294,758 183,492 357 9,252,131 70,715 1,145 10,038,714 0 0 ???:pango_font_description_free
> 32,802,828 6,202 395 8,200,708 1 1 10,250,883 15 9 ???:operator delete(void*)
> 31,085,883 50,652 311 9,210,632 0 0 12,664,619 0 0 string.cpp:wxStringBase::compare(wchar_t const*) const
> 30,990,945 186 40 12,136,431 3,060 1,248 6,284,838 0 0 string.cpp:wxArrayString::Free()
> 30,082,129 895 599 15,666,749 828,359 813,726 12,595,593 0 0 htmlcell.cpp:wxHtmlContainerCell::DrawInvisible(wxDC&, int, int, wxHtmlRenderingInfo&)
> 29,806,101 18 14 18,428,069 117,634 116,715 2,352,320 0 0 htmltag.cpp:wxHtmlTagsCache::QueryTag(int, int*, int*)
> 29,207,592 82 41 24,846,852 14,881 27 2,107,691 3 0 strconv.cpp:wxMBConv::cMB2WC(char const*, unsigned, unsigned*) const
> 28,319,688 707,574 207 6,717,525 326,667 7,546 7,834,020 1 0 ???:g_object_ref
> 28,110,564 51,120 243 9,370,188 0 0 9,370,188 10,489 22 string.h:wxString::wxString(wxString const&)
> 27,787,038 57 32 23,256,676 4,511 912 1,971,095 3 0 string.cpp:wxString::wxString(char const*, wxMBConv&, unsigned)
> 27,543,294 100,871 123 13,771,647 0 0 4,590,549 0 0 string.h:wxStringData::data() const
> 27,533,154 394,355 335 16,515,822 3,483 104 3,333,515 952 0 ???:pango_shape
> 27,486,838 48,070 960 7,889,493 7,216 1,298 3,351,882 11,857 4,618 ???:g_type_is_a
> 27,437,143 39 9 10,288,926 141 8 6,859,287 59 0 ???:FcDebug
> 27,388,374 395 65 6,646,763 3 1 10,793,194 1 1 string.cpp:wxStringBase::AllocBeforeWrite(unsigned)
> 27,313,484 251,074 1,481 7,994,214 0 0 11,325,125 0 0 htmltag.cpp:wxHtmlTag::GetParam(wxString const&, bool) const
> 27,118,378 48 34 9,039,416 103,908 101,839 9,039,468 0 0 htmltag.cpp:wxHtmlTag::~wxHtmlTag()
> 27,027,965 155,397 75 16,216,779 0 0 5,405,593 0 0 ???:g_direct_hash
> 26,219,586 131,656 272 6,743,845 3,359 562 1,614,730 192 181 ???:memmove
> 25,680,395 523,956 1,405 8,071,178 62,816 158 7,127,627 43 0 ???:pango_language_matches
> 25,417,305 209,140 105 6,777,948 0 0 6,777,948 212 8 object.h:wxObject::~wxObject()
> 24,637,408 252,372 509 9,464,896 184,447 2,054 6,609,856 0 0 hash.cpp:wxHashTable::Get(wchar_t const*) const
> 24,579,326 26,957 3,863 7,980,154 46,909 10,940 602,605 0 0 ???:g_pattern_match
> 24,450,444 2,050,823 5,716 8,348,243 6,495 1,854 7,965,013 36,974 1,790 ???:g_object_newv
> 23,902,416 131,726 396 10,457,307 126,622 131 5,975,604 0 0 ???:FT_Get_Char_Index
> 23,625,394 1,137 85 5,656,674 0 0 8,165,613 0 0 string.cpp:wxStringBase::find(wxStringBase const&, unsigned) const
> 23,535,741 75 22 3,455,631 0 0 4,395,090 356 0 ???:FcStrCmpIgnoreCase
> 23,423,390 1,647 383 7,027,017 0 0 7,027,017 2 1 string.h:wxString::wxString()
> 23,291,412 797,382 893 7,358,136 50,342 3,195 6,537,448 0 0 dcclient.cpp:wxWindowDC::SetFont(wxFont const&)
> 22,831,984 207,847 259 6,523,424 175,265 229 6,523,424 0 0 ???:gdk_display_get_default_screen
> 22,221,539 14,477 1,980 7,319,906 2,866 52 6,536,290 776 26 event.cpp:wxEvtHandler::ProcessEvent(wxEvent&)
> 21,936,576 20 19 6,855,180 2 0 8,683,228 136 125 htmlpars.cpp:wxHtmlTextPieces::Add(wxHtmlTextPiece const&, unsigned)
> 21,744,360 959 12 7,248,120 0 0 7,248,120 3 1 string.h:wxStringBase::wxStringBase()
> 21,673,542 126,452 312 12,176,835 167,853 167,832 752,082 0 0 hash.cpp:wxHashTable::MakeKey(wchar_t const*) const
> 21,080,484 131,773 426 8,783,535 3 0 5,270,121 0 0 ???:cairo_ft_scaled_font_unlock_face
> 20,640,702 50,700 97 13,760,468 0 0 3,440,117 0 0 string.h:wxStringBase::data() const
> 20,560,476 228,759 1,247 6,396,688 0 0 7,309,580 0 0 string.cpp:wxString::Mid(unsigned, unsigned) const
> 20,337,329 151,632 895 5,029,231 90,814 556 7,055,858 13,130 277 htmlpars.cpp:wxHtmlParser::AddTag(wxHtmlTag const&)
> 20,274,108 388,865 320 7,463,663 936 37 520,643 0 0 ???:g_utf8_validate
> 19,718,800 350,118 941 5,722,183 83,452 3,682 2,502,088 3 1 ???:strncmp
> 18,846,250 144,486 107 18,846,250 0 0 0 0 0 ???:__i686.get_pc_thunk.bx
> 18,159,705 128,807 1 8,474,529 0 0 2,421,294 0 0 ???:g_atomic_int_compare_and_exchange
> 17,926,812 131,726 393 4,481,703 0 0 1,493,901 0 0 ???:pango_is_zero_width
> 17,648,163 1,443,207 685 6,770,332 85,494 921 3,834,320 4,259 200 ???:g_list_prepend
> 17,627,922 524,293 269 6,528,860 2,083 46 3,917,316 583 445 ???:g_quark_try_string
> 17,382,566 241,200 191 6,139,098 1 0 4,292,219 0 0 ???:bsearch
> 17,370,666 0 0 4,825,185 0 0 5,790,222 688 413 ???:g_str_equal
> 17,285,076 597,690 258 7,362,162 40,327 81 3,200,940 9,352 289 ???:g_static_rw_lock_reader_lock
> 17,285,076 591,618 304 6,721,974 0 0 3,200,940 0 0 ???:g_static_rw_lock_reader_unlock
> 16,988,388 1,995 54 6,762,660 274 89 4,057,596 0 0 string.cpp:wxArrayString::~wxArrayString()
> 16,883,840 208,560 107 4,220,960 0 0 4,220,960 152 0 gdiobj.h:wxGDIObject::~wxGDIObject()
> 16,825,441 62,657 683 5,009,557 17,935 2,796 3,471,295 9,123 2,749 ???:g_type_check_is_value_type
> 16,817,514 34,658 421 5,100,854 34,701 93 3,081,670 9,967 3,335 ???:g_type_check_value
> 16,369,280 100,571 308 6,138,480 0 0 7,161,560 0 0 string.h:wxStringBase::append(wchar_t const*)
> 16,263,072 151,621 694 6,606,873 0 0 7,623,315 0 0 string.h:wxStringBase::wxStringBase(wxStringBase const&, unsigned, unsigned)
> 16,261,084 970,992 3,438 6,246,290 1,087 14 3,276,109 8 0 ???:pango_layout_line_get_extents
> 16,209,173 100,960 462 10,490,610 0 0 10,189,633 141 67 wxchar.cpp:wxStrdupW(wchar_t const*)
> 16,171,550 977,368 1,095 5,037,258 169,314 3,559 2,032,334 3,311 1,786 ???:g_type_check_instance_cast
> 16,074,338 361,414 5,285 6,688,672 1 0 3,096,072 33,886 14,662 ???:XRenderCompositeText8
> 16,032,339 154,524 948 5,269,949 493 75 4,955,437 0 0 string.cpp:wxStringBase::operator=(wxStringBase const&)
> 15,828,600 4,587 127 5,276,200 0 0 5,276,200 10,539 321 gdiobj.h:wxGDIObject::wxGDIObject()
> 15,639,624 1,029,031 4,422 5,179,356 143,372 296 5,890,248 14,743 167 dc.h:wxDCBase::wxDCBase()
> 15,250,383 5,832 74 6,777,948 0 0 5,083,461 5,828 5,583 object.h:wxObject::wxObject()
> 15,160,777 186 45 5,223,410 43,045 2,164 520,277 0 0 ???:FcCharSetIsSubset
> 14,943,192 1 0 7,471,596 6,659 0 7,471,596 0 0 string.h:wxStringBase::ConcatSelf(unsigned, wchar_t const*)
> 14,734,524 50,792 593 5,262,330 0 0 4,209,864 19,907 18 htmltag.h:wxHtmlTag::GetName() const
> 14,597,771 783 43 4,765,175 36,376 799 2,946,883 5 0 ???:FcObjectStaticName
> 14,491,662 50,236 7 9,661,108 384,713 359,875 2,415,277 0 0 htmltag.h:wxHtmlTag::GetBeginPos() const
> 14,430,489 415,446 622 2,356,869 35,428 3,815 710,415 0 0 ???:g_ascii_strcasecmp
> 14,348,484 91,248 448 6,238,453 53,337 520 3,743,067 130,795 6,661 ???:XRenderFindDisplay
> 14,337,924 542,531 505 3,907,759 4,068 1,552 943,397 0 0 ???:pango_font_description_hash
> 13,984,685 14,076 659 4,302,980 9 2 4,302,980 8 6 ???:operator new[](unsigned)
> 13,984,685 4,950 892 4,302,980 0 0 4,302,980 132 110 ???:operator delete[](void*)
> 13,984,440 28 1 5,244,164 0 0 4,370,140 4 2 string.h:wxString::wxString(wchar_t const*)
> 13,644,072 104 27 7,580,040 0 0 4,548,024 425 416 string.cpp:wxArrayString::Init(bool)
> 13,531,266 675,652 312 5,512,738 104,802 3 2,756,369 9,618 517 ???:g_static_rw_lock_writer_lock
> 13,424,302 95 95 2,946,798 0 0 4,583,908 0 0 string.cpp:wxString::CmpNoCase(wxString const&) const
> 13,275,328 368,188 221 3,266,928 902 2 4,699,642 0 0 ???:pango_layout_set_font_description
> 13,214,155 504,917 263 2,903,310 3,393 585 4,186,449 16,749 77 ???:g_object_get_data
> 13,141,122 68 18 4,841,466 1 0 4,149,828 0 0 ???:FcMemAlloc
> 13,046,816 103,019 93 3,261,704 4,542 86 4,077,130 0 0 ???:gdk_screen_get_default
> 13,025,128 557,034 454 4,670,899 6,732 80 3,685,041 3,526 14 ???:g_signal_handlers_destroy
> 12,779,529 615,121 298 5,011,580 5 0 2,505,790 0 0 ???:g_static_rw_lock_writer_unlock
> 12,762,076 1,142,353 1,426 5,659,556 43,890 97 2,649,672 28,558 863 ???:g_type_create_instance
> 12,706,954 370,540 392 3,421,103 164 58 1,466,187 4,580 2,021 ???:g_type_check_instance
> 12,679,593 73 16 4,671,429 0 0 4,004,082 0 0 ???:FcMemFree
> 12,664,619 50,619 305 4,605,316 0 0 4,605,316 0 0 string.cpp:wxString::Cmp(wchar_t const*) const
> 12,592,944 811,165 1,786 3,249,792 85,608 113 4,976,244 2,697 97 dc.cpp:wxDC::wxDC()
> 12,384,095 120,356 559 3,810,488 1,162 0 2,857,872 81 0 ???:pango_renderer_get_type
> 12,301,516 92,426 1,557 4,097,298 5,333 357 3,288,958 13,237 1,545 ???:g_param_spec_pool_lookup
> 11,811,464 49,971 105 2,779,168 0 0 4,863,544 0 0 string.h:wxStringBase::Reinit()
> 11,780,202 88,433 1,912 4,835,425 29,663 2,283 4,865,570 7,554 1,853 ???:gtk_widget_style_get_valist
> 11,749,395 725,312 282 3,062,601 15,765 52 3,622,639 1,843 1,275 ???:g_object_get_qdata
> 11,567,280 1,013,458 4,635 3,754,002 358,291 626 4,162,038 23 0 dcclient.cpp:wxWindowDC::wxWindowDC(wxWindow*)
> 11,508,576 49,933 211 4,315,716 0 0 5,035,002 0 0 string.cpp:wxStringBase::operator=(wchar_t const*)
> 11,469,622 299,590 252 3,529,112 24,447 7 2,646,840 1 0 ???:gdk_screen_get_type
> 11,438,175 78 10 4,117,743 1 0 4,117,743 0 0 dynarray.h:wxBaseArrayPtrVoid::insert(void const**, unsigned, void const* const&)
> 11,175,950 20 2 4,470,380 1 1 4,470,380 0 0 string.h:wxStringBase::reserve(unsigned)
> 11,112,595 1,050,226 157 3,605,096 127,855 220 4,003,628 722 0 treectlg.cpp:wxGenericTreeCtrl::CalculateSize(wxGenericTreeItem*, wxDC&)
> 10,976,028 97,088 2,976 3,103,708 10,299 338 2,746,918 5,526 2,307 ???:gdk_gc_set_values
> 10,878,462 125,256 1,949 3,272,340 30,871 1,902 3,406,472 9,030 3,185 ???:g_closure_invoke
> 10,815,631 212,427 331 3,327,884 13,372 7 2,495,919 4,724 238 ???:gdk_display_get_type
> 10,802,227 181,565 502 5,919,432 115 108 569,229 36 1 dynarray.cpp:wxBaseArrayPtrVoid::Grow(unsigned)
> 10,701,559 50,507 295 3,891,476 0 0 3,891,476 0 0 string.h:wxString::append(wchar_t const*)
> 10,641,280 239,723 1,030 3,192,384 14,799 245 2,394,288 0 0 ???:pango_renderer_set_color
> 10,519,775 395,085 804 2,075,362 14 0 2,476,657 14 0 ???:pango_glyph_string_set_size
> 10,488,636 76 3 4,370,265 1,561 158 5,244,318 2 0 string.h:wxStringBase::wxStringBase(wchar_t const*)
> 10,420,172 914,448 1,179 4,094,016 115,219 346 2,757,830 4,403 0 dcclient.cpp:wxWindowDC::DoGetTextExtent(wxString const&, int*, int*, int*, int*, wxFont*) const
> 10,163,142 355 289 4,429,805 14,103 6,607 2,042,010 0 0 dynarray.cpp:wxBaseArrayPtrVoid::IndexForInsert(void const*, int (*)(void const*, void const*)) const
> 10,073,946 24 18 2,289,533 0 0 3,663,250 0 0 htmltag.cpp:wxIsCDATAElement(wchar_t const*)
> 10,068,442 1,661 215 555,467 46,541 45,963 4,206,727 339 1 mimetype.cpp:wxMimeTypesManagerImpl::LoadGnomeDataFromKeyFile(wxString const&, wxArrayString const&)
> 9,935,480 95,463 641 2,876,060 2,806 663 4,183,360 2,917 779 ???:g_value_init
> 9,824,384 271,294 201 4,298,168 0 0 2,456,096 1 0 fontcmn.cpp:wxFont::operator=(wxFont const&)
> 9,713,509 9,998 1,233 4,305,857 38,867 19,392 1,935,559 1,653 14 event.cpp:wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
> 9,667,110 3,868 1,508 2,166,906 2,126 16 3,055,474 0 0 wincmn.cpp:wxWindowBase::TryParent(wxEvent&)
> 9,597,372 13 11 2,742,104 28,564 28,482 3,199,116 0 0 htmlpars.cpp:wxHtmlTextPieces::DoEmpty()
> 9,339,778 400,414 511 2,613,730 2,409 0 2,460,346 0 0 ???:pango_find_base_dir
> 9,297,973 100,628 393 2,860,912 18,893 13 2,145,690 1,957 1 ???:gdk_gc_get_type
> 9,297,912 55,302 962 3,099,304 0 0 3,099,304 0 0 htmlcell.cpp:wxHtmlContainerCell::UpdateRenderingStatePre(wxHtmlRenderingInfo&, wxHtmlCell*) const
> 9,297,912 55,002 594 6,198,608 25,146 0 1,549,652 0 0 htmlcell.h:wxHtmlRenderingInfo::GetSelection() const
> 9,297,912 54,402 7 3,099,304 0 0 3,099,304 4,786 8 htmlcell.cpp:wxHtmlContainerCell::UpdateRenderingStatePost(wxHtmlRenderingInfo&, wxHtmlCell*) const
> 9,288,482 96,608 566 2,857,992 26,576 62 2,143,500 5,681 107 ???:gdk_drawable_get_type
> 9,229,272 920,798 888 3,295,883 191,674 463 2,625,094 0 0 ???:pango_attr_iterator_get_font
> 9,140,320 5 4 2,742,096 0 0 2,742,096 0 0 htmlpars.cpp:wxHtmlTextPieces::size() const
> 9,041,900 897,853 1,338 2,841,740 81,360 473 3,358,420 0 0 strconv.cpp:wxMBConv::cWC2MB(wchar_t const*) const
> 8,960,670 50,259 312 2,986,890 0 0 2,986,890 0 0 dynarray.h:wxBaseArrayPtrVoid::size() const
> 8,810,073 315,052 240 3,915,588 99,995 666 978,897 0 0 font.h:wxFontBase::Ok() const
> 8,763,330 234,571 758 2,696,406 105,982 110 2,022,315 9,372 2,148 ???:gtk_widget_get_type
> 8,692,419 670,284 658 3,409,849 42,701 35 1,880,607 24 19 ???:g_slist_append
> 8,588,276 77,175 2,871 3,181,908 38,143 6,352 3,102,047 1 0 ???:_gtk_style_peek_property_value
> 8,575,707 319,224 225 2,041,835 0 0 2,450,202 0 0 font.cpp:wxFont::GetNativeFontInfo() const
> 8,498,356 535,629 455 2,099,363 1,498 0 3,159,570 1,315 0 ???:pango_layout_set_text
> 8,412,778 525,780 362 3,286,225 2,220 0 1,971,777 17 0 ???:g_list_delete_link
> 8,384,256 388 225 4,192,128 49,569 49,532 1,048,032 0 0 htmltag.h:wxHtmlTag::HasEnding() const
> 7,991,707 32,386 752 1,478,239 0 0 3,359,964 0 0 ???:g_value_type_compatible
> 7,967,475 66 18 1,337,475 0 0 1,566,750 0 0 ???:FcStrCmpIgnoreBlanksAndCase
> 7,912,146 49,925 316 2,877,144 0 0 2,877,144 0 0 string.h:wxString::operator=(wchar_t const*)
> 7,893,520 229,568 1,885 4,545,462 72,747 2,180 461,736 14,184 995 ???:XRenderFindFormat
> 7,873,792 212,629 319 2,952,672 0 0 1,722,392 21,576 311 ???:gdk_pango_renderer_set_override_color
> 7,830,473 530,351 521 1,992,237 98 1 2,245,607 0 0 ???:pango_itemize_with_base_dir
> 7,812,556 267,549 256 2,963,506 146,674 3,536 942,883 0 0 ???:pango_font_description_equal
> 7,812,080 100,945 574 2,704,069 78,428 711 2,403,942 0 0 list.cpp:wxListBase::Find(wxListKey const&) const
> 7,611,264 373,767 185 3,171,360 1,275 3 1,902,816 139 3 ???:g_list_free_1
> 7,604,890 36,433 479 1,829,219 111 1 3,685,135 3,871 15 ???:g_value_unset
> 7,577,170 74 4 2,273,151 0 0 3,030,868 0 0 arrstr.h:wxArrayString::wxArrayString()
> 7,560,249 640,695 590 2,690,951 106 0 1,537,684 0 0 ???:pango_font_description_merge_static
> 7,545,920 93 25 1,697,832 2 0 2,829,720 0 0 ???:FcCharSetFindLeafCreate
> 7,515,144 911,172 1,551 1,929,564 0 0 2,640,456 0 0 dc.h:wxDCBase::~wxDCBase()
> 7,492,100 139,400 127 3,746,050 31,153 2,695 3,746,050 148 0 ???:pango_font_description_copy_static
> 7,414,014 552,049 774 2,652,419 1,068 1 1,815,217 0 0 ???:pango_attr_iterator_next
> 7,399,678 176,814 533 3,777,714 111,667 94,748 831,599 0 0 htmltag.cpp:wxHtmlTag::GetNextTag() const
> 7,341,446 273,290 224 2,308,571 303 1 1,495,247 0 0 ???:pango_attr_iterator_range
> 7,258,086 94,206 2,051 2,419,362 14,915 255 2,777,786 0 0 ???:g_value_set_instance
> 7,241,650 50,589 48 2,896,660 0 0 2,896,660 0 0 arrstr.h:wxArrayString::operator[](unsigned) const
> 7,241,650 0 0 3,620,825 1,378 34 724,165 0 0 arrstr.h:wxArrayString::Item(unsigned) const
> 7,213,080 100,704 266 2,404,360 0 0 1,502,725 0 0 list.cpp:wxListKey::operator==(wxListKeyValue) const
> 7,104,981 694,661 382 2,712,784 40,595 995 1,550,228 1,999 41 ???:g_list_alloc
> 7,076,425 140,039 186 2,264,456 40 1 2,264,456 5 0 ???:g_realloc
> 7,067,373 565,233 411 2,603,769 4,875 531 1,239,890 0 0 ???:g_type_class_unref
> 6,908,916 4,364 9 3,618,956 1,588 2 986,988 0 0 ???:cairo_matrix_transform_distance
> 6,900,186 1,770 109 4,600,124 35,104 34,686 1,150,031 0 0 dynarray.h:wxBaseArrayPtrVoid::GetCount() const
> 6,802,120 72 15 2,092,960 0 0 2,616,200 0 0 string.cpp:wxStringBase::operator=(wchar_t)
> 6,797,331 110,810 893 1,716,979 35,763 0 1,809,557 7 0 ???:pango_renderer_deactivate
> 6,766,060 233,728 248 1,883,468 6,928 2,403 751,168 0 0 ???:g_type_fundamental
> 6,760,325 532,286 445 2,890,905 18,932 3 1,659,740 3,414 0 ???:g_list_free
> 6,729,204 102,402 3,363 1,037,825 15,803 2,977 390,603 2,057 0 ???:_XUpdateGCCache
> 6,690,033 64,164 323 3,079,539 5 0 1,380,483 0 0 ???:cairo_matrix_multiply
> 6,606,873 50,737 316 3,049,326 0 0 3,049,326 0 0 string.h:wxString::wxString(wxString const&, unsigned, unsigned)
> 6,604,822 459,209 117 4,717,730 0 0 943,546 0 0 ???:g_atomic_int_exchange_and_add
> 6,559,605 342,711 420 2,523,236 5,363 1,326 1,262,126 28,692 1,247 ???:g_type_class_ref
> 6,541,590 139,360 818 1,686,222 65,447 1,102 1,809,557 0 0 ???:pango_renderer_activate
> 6,512,265 286,186 97 1,823,458 646 219 2,083,887 6,401 293 ???:g_malloc0
> 6,499,584 607,531 3,278 1,929,564 2 0 2,132,676 0 0 dcclient.cpp:wxWindowDC::~wxWindowDC()
> 6,497,520 79,800 586 3,248,760 384 2 2,436,570 0 0 ???:cairo_matrix_transform_point
> 6,470,100 664,142 530 2,075,322 7,115 645 1,587,237 0 0 ???:g_type_free_instance
> 6,413,456 130,068 390 1,973,368 4,536 5 1,480,033 0 0 ???:gdk_pango_renderer_get_type
> 6,405,378 156 16 2,745,162 0 0 2,745,162 0 0 dynarray.h:wxArrayPtrVoid::insert(void**, unsigned, void* const&)
> 6,312,830 290,602 484 1,984,234 163,610 55 1,837,838 0 0 ???:pango_attr_list_unref
> 6,308,071 416,467 314 1,737,434 1,291 15 1,702,283 1,508 0 ???:pango_layout_line_unref
> 6,249,435 664,258 1,354 2,572,622 17 3 1,104,083 1 0 ???:g_datalist_clear
> 6,228,585 184,877 1,152 2,049,712 29,319 844 496,277 0 0 ???:strstr
> 6,214,919 430,534 5,266 2,184,058 174,696 615 1,762,221 5,944 0 dcclient.cpp:wxWindowDC::DoDrawText(wxString const&, int, int)
> 6,212,831 59 59 1,965,871 938 10 296,104 613 8 lzx.c:lzx_read_lens
> 6,094,464 441,900 389 2,539,360 32 0 1,523,616 25 1 ???:g_slist_free_1
> 6,047,301 33 4 2,325,885 0 0 1,860,708 0 0 string.h:wxString::operator=(wxString const&)
> 5,890,248 203,111 514 1,828,008 0 0 1,624,896 0 0 ???:gdk_screen_get_height
> 5,755,640 139 26 2,092,960 0 0 2,092,960 0 0 string.h:wxString::operator=(wchar_t)
> 5,687,136 203,111 394 1,828,008 0 0 1,624,896 0 0 ???:gdk_screen_get_height_mm
> 5,687,136 203,110 542 1,828,008 0 0 1,624,896 0 0 ???:gdk_screen_get_width_mm
> 5,687,136 202,002 452 1,828,008 234,004 27 1,624,896 0 0 ???:gdk_screen_get_width
> 5,658,940 318 21 1,414,735 0 0 2,425,260 0 0 string.cpp:wxStringBase::find(wchar_t const*, unsigned, unsigned) const
> 5,560,095 140,655 87 1,308,612 3 0 654,742 0 0 ???:g_slist_reverse
> 5,540,963 523,952 6,865 2,314,099 23,465 317 1,553,977 12,509 3 ???:pango_renderer_draw_layout_line
> 5,531,518 121,440 1,956 2,085,639 23,499 386 1,813,610 39,549 12,574 ???:XRenderCreatePicture
> 5,489,096 36,197 296 2,905,992 0 0 2,260,216 64,891 1,210 ???:cairo_matrix_init
> 5,425,664 34,943 929 2,008,704 5,244 654 1,165,184 0 0 ???:XChangeGC
> 5,381,246 382,708 741 1,281,278 108 0 1,409,409 27,828 9 ???:pango_layout_get_pixel_size
> 5,293,265 341,014 286 1,600,209 15,956 1,403 1,107,918 4,368 224 ???:g_type_class_peek_static
> 5,281,504 5,849 1,109 1,411,210 2,645 537 1,498,288 283 0 event.cpp:wxEvtHandler::TryParent(wxEvent&)
> 5,263,545 131,402 98 1,121,516 0 0 1,401,895 0 0 ???:pango_unichar_direction
> 5,256,040 525,604 481 1,839,614 0 0 1,445,411 0 0 ???:pango_break
> 5,222,216 167,610 586 1,227,708 69 0 1,334,474 0 0 ???:cairo_pattern_destroy
> 5,216,935 1,153 87 1,458,630 0 0 1,996,020 1 0 string.cpp:wxStringBase::erase(unsigned, unsigned)
> 5,167,624 273,483 500 1,879,136 5,630 3,247 2,348,920 413 2 ???:pango_glyph_string_extents
> 5,133,462 142 13 2,002,011 0 0 1,851,912 0 0 string.cpp:wxString::Find(wchar_t, bool) const
> 5,126,566 30,884 415 1,327,143 64,175 19,008 728,024 38 6 ???:gtk_widget_get_toplevel
> 5,098,989 406,637 912 1,789,655 0 0 1,515,256 0 0 ???:pango_attr_list_filter
> 5,032,957 535,980 745 2,199,997 111,969 974 1,049,437 30 2 ???:pango_find_map
> 5,003,136 28,013 13 3,335,424 50,762 35,700 833,856 0 0 htmlcell.h:wxHtmlCell::GetNext() const
> 4,977,725 2,586 83 2,986,635 2,771 164 995,545 0 0 app.h:wxAppConsole::GetInstance()
> 4,963,140 166,323 1,713 1,221,075 0 0 717,760 0 0 ???:g_type_interface_peek
> 4,916,824 80,635 597 1,340,952 38 4 2,458,412 20,825 243 ???:cairo_matrix_init_identity
> 4,883,394 52,725 334 1,350,726 24,799 14,255 1,142,922 6,974 2,781 ???:g_closure_ref
> 4,874,688 203,110 744 1,218,672 0 0 1,828,008 0 0 gdicmn.cpp:wxGetDisplaySize()
> 4,874,688 201,307 806 1,218,672 0 0 1,828,008 0 0 gdicmn.cpp:wxGetDisplaySizeMM()
> 4,837,692 44,906 875 1,365,276 113 53 1,161,352 0 0 ???:g_closure_unref
> 4,819,505 5,306 1,399 2,113,846 24,496 8,157 760,874 0 0 object.h:wxClassInfo::IsKindOf(wxClassInfo const*) const
> 4,815,119 205,089 253 1,465,471 0 0 1,674,824 407 1 colour.h:wxColour::wxColour(wxColour const&)
> 4,805,444 142,635 104 1,716,230 8,380 2,913 1,029,738 62 0 ???:pango_context_get_base_dir
> 4,787,297 358,425 2,587 1,600,706 4,703 962 1,981,274 948 266 ???:g_object_new_valist
> 4,780,983 181,650 951 1,087,164 711 86 1,276,536 0 0 ???:cairo_surface_destroy
> 4,772,832 538,534 255 1,392,076 5,627 0 2,088,114 0 0 treectlg.cpp:wxGenericTreeCtrl::SetItemImage(wxTreeItemId const&, int, wxTreeItemIcon)
> 4,753,469 16,934 644 2,056,299 154 12 1,015,601 499 34 ???:gray_raster_render
> 4,746,931 180 17 1,843,011 2,662 109 849,961 10 2 chm_lib.c:_chm_parse_UTF8
> 4,699,246 1,706 64 1,086,751 0 0 1,240,434 0 0 string.cpp:wxString::Trim(bool)
> 4,673,470 4 4 1,590,966 12,621 12,417 1,590,970 0 0 treectlg.cpp:wxGenericTreeCtrl::RefreshSelectedUnder(wxGenericTreeItem*)
> 4,664,547 27,079 320 1,209,327 7 2 1,727,610 7,080 1,964 ???:g_value_peek_pointer
> 4,624,035 270,215 1,968 2,010,450 404 0 1,166,061 11,453 5,391 ???:XRenderFillRectangles
> 4,575,270 77 7 1,372,581 0 0 1,372,581 0 0 dynarray.h:wxArrayPtrVoid::end()
> 4,575,270 1 1 2,745,162 0 0 457,527 0 0 dynarray.h:wxBaseArrayPtrVoid::end()
> 4,570,120 0 0 2,742,072 0 0 1,371,036 2,275 290 htmlpars.cpp:wxHtmlTextPiece::wxHtmlTextPiece(int, int)
> 4,509,744 1 1 1,803,898 0 0 901,948 0 0 list.h:wxListKey::~wxListKey()
> 4,500,200 1,154 3 577,101 0 0 489,186 0 0 ???:FcNameParseLangSet
> 4,470,590 26,550 1,571 1,259,100 25 0 1,258,786 0 0 dcclient.cpp:wxWindowDC::SetTextForeground(wxColour const&)
> 4,444,060 17,585 1,054 2,200,247 7,923 826 333,128 0 0 bitmap.cpp:wxBitmap::Ok() const
> 4,434,900 54 3 1,163,559 181 5 1,129,815 0 0 ???:FcNameGetObjectType
> 4,427,443 10,779 2,814 1,005,834 5,727 664 423,020 0 0 ???:g_ascii_strncasecmp
> 4,366,568 557 27 1,251,922 0 0 1,462,260 0 0 string.cpp:wxStringBase::find(wchar_t, unsigned) const
> 4,365,400 133,581 833 1,412,452 6,971 8 1,027,260 24,947 1,437 ???:XRenderQueryFormats
> 4,339,756 122,810 5,016 1,965,828 120,604 34,456 1,762,510 14,719 5 htmlcell.cpp:wxHtmlContainerCell::Draw(wxDC&, int, int, int, int, wxHtmlRenderingInfo&)
> 4,335,377 5,943 1,063 1,490,380 10,774 5,490 1,109,668 17 3 wincmn.cpp:wxWindowBase::TryValidator(wxEvent&)
> 4,326,580 83 20 1,958,640 2,083 105 1,004,748 0 0 ???:FcNameGetConstant
> 4,297,840 6,220 1,363 1,940,960 0 0 1,663,680 3 2 event.cpp:wxEvent::wxEvent(int, int)
> 4,261,780 85,845 921 1,541,494 42 9 1,178,792 12,720 5,516 ???:XRenderFreePicture
> 4,230,370 278,823 190 986,181 753 4 1,835,359 762 0 ???:pango_attr_list_get_iterator
> 4,209,086 100,712 226 1,503,245 0 0 1,503,245 0 0 list.h:wxListKey::wxListKey(wchar_t const*)
> 4,205,376 394,245 396 1,182,762 317 0 1,971,270 17,960 3,958 ???:pango_script_iter_new
> 4,205,184 134,666 99 1,576,944 0 0 788,472 0 0 ???:pango_font_description_unset_fields
> 4,175,235 401,418 218 1,481,535 43,443 272 1,616,220 2 0 ???:pango_font_map_load_fontset
> 4,084,140 204,856 342 2,450,484 0 0 1,225,242 155 0 gdicmn.h:wxSize::wxSize(int, int)
> 4,079,583 293,909 2,731 1,653,885 102,872 575 955,578 0 0 ???:gdk_colormap_query_color
> 3,977,159 228 47 1,553,162 0 0 1,054,410 1,429 468 ???:FcPatternInsertElt
> 3,938,168 50,189 220 1,211,744 0 0 1,211,744 0 0 string.h:operator==(wxString const&, wchar_t const*)
> 3,929,064 95 95 1,309,688 0 0 1,309,688 0 0 ???:CompareItemPairs(CHMListPairItem*, CHMListPairItem*)
> 3,864,414 206,997 210 939,974 246,988 258 1,253,485 0 0 ???:gtk_widget_get_pango_context
> 3,844,170 256,278 491 1,409,529 0 0 768,834 0 0 ???:pango_font_description_set_family_static
> 3,764,371 103 74 1,325,733 5 0 639,920 85 22 ???:gconv
> 3,753,592 227 52 1,018,374 9 0 1,575,610 55 0 ???:FcPatternAddWithBinding
> 3,727,680 62,127 887 1,491,072 1,194 0 745,536 0 0 ???:gdk_pango_renderer_set_stipple
> 3,725,981 477,399 3,679 1,022,598 29,965 1 1,087,571 333 0 ???:_gdk_gc_update_context
> 3,698,134 319,935 259 1,344,776 13,464 56 840,485 142 0 ???:pango_context_get_matrix
> 3,663,715 62,346 552 1,389,685 14,571 12 758,010 0 0 ???:_XAllocID
> 3,653,237 11,231 0 924,349 3,539 7 723,120 0 0 ???:cairo_surface_reference
> 3,649,943 458,336 555 1,327,252 253 1 995,439 0 0 buffer.h:wxCharBuffer::~wxCharBuffer()
> 3,611,187 19,951 891 965,159 15,823 2,144 481,096 0 0 ???:g_type_parent
> 3,570,504 295 20 797,748 5 0 693,189 1,729 1,230 ???:strcpy
> 3,548,286 262,836 215 1,051,344 125,680 802 394,254 0 0 ???:pango_map_get_engine
> 3,543,975 49 49 1,560,785 32,559 14 952,293 2 2 chm_lib.c:chm_retrieve_object
> 3,504,100 208,344 92 876,025 0 0 876,102 479 335 colour.cpp:wxColour::~wxColour()
> 3,452,904 203,110 605 1,218,672 0 0 1,015,560 0 0 utilsgtk.cpp:wxDisplaySize(int*, int*)
> 3,452,904 101,554 400 1,218,672 0 0 1,015,560 0 0 utilsgtk.cpp:wxDisplaySizeMM(int*, int*)
> 3,430,992 19,966 2,099 1,079,266 50,134 46,976 890,272 0 0 htmlcell.cpp:wxHtmlColourCell::DrawInvisible(wxDC&, int, int, wxHtmlRenderingInfo&)
> 3,419,740 132,867 107 2,051,844 130,569 3,281 170,987 0 0 ???:cairo_font_options_equal
> 3,405,800 1,946 911 1,277,175 0 0 1,447,465 1 1 event.cpp:wxCommandEvent::wxCommandEvent(int, int)
> 3,381,975 7,334 1,706 1,295,965 2 0 659,429 0 0 ???:g_strreverse
> 3,372,120 209,773 128 843,030 0 0 843,052 1,580 340 font.cpp:wxFont::~wxFont()
> 3,372,032 104,425 195 843,008 0 0 843,008 1 0 fontcmn.cpp:wxFontBase::~wxFontBase()
> 3,350,513 889 298 1,379,623 427 4 788,356 0 0 htmlcell.cpp:wxHtmlFontCell::DrawInvisible(wxDC&, int, int, wxHtmlRenderingInfo&)
> 3,326,505 35,374 1,221 855,387 12,415 738 1,045,473 0 0 ???:g_param_spec_get_qdata
> 3,303,696 100,716 590 1,201,344 0 0 1,201,344 0 0 list.h:wxObjectList::Find(wxListKey const&) const
> 3,298,484 164,474 1,593 1,346,320 0 0 875,108 7,105 2,635 ???:XRenderSetPictureFilter
> 3,288,832 205,585 278 822,208 0 0 822,208 0 0 region.cpp:wxRegion::~wxRegion()
> 3,288,592 203,427 851 822,148 0 0 822,164 36,812 1 brush.cpp:wxBrush::~wxBrush()
> 3,288,528 204,629 313 822,132 0 0 822,132 0 0 brush.h:wxBrushBase::~wxBrushBase()
> 3,269,166 3,332 1,621 798,944 22,452 8,444 872,013 335 176 ???:gtk_widget_is_focus
> 3,254,611 315,327 796 735,457 0 0 1,049,196 0 0 ???:pango_language_includes_script
> 3,231,628 4 4 1,193,214 5,870 5,304 1,093,781 0 0 treectlg.cpp:wxGenericTreeItem::DeleteChildren(wxGenericTreeCtrl*)
> 3,218,419 136,211 88 990,280 5,298 102 742,716 0 0 ???:pango_layout_get_type
> 3,140,415 127 33 947,399 0 0 1,196,590 0 0 string.cpp:wxString::AfterLast(wchar_t) const
> 3,131,226 22,759 1,124 894,636 4,390 1,406 1,192,848 2 0 ???:gdk_gc_set_foreground
> 3,123,048 394,227 315 946,512 15,133 52 1,115,736 1,016 0 ???:pango_item_free
> 3,119,072 192,402 1,959 567,104 1,245 0 1,843,088 16,524 238 ???:pango_cairo_show_glyph_string
> 3,085,962 131 16 1,402,710 0 0 1,683,252 0 0 string.h:wxStringBase::wxStringBase(wchar_t const*, unsigned)
> 3,032,920 15 15 795,520 2 1 1,143,560 0 0 treebase.cpp:wxTreeEvent::wxTreeEvent(int, int)
> 3,032,235 31,504 708 1,651,500 10,620 918 345,331 0 0 colour.cpp:wxColour::operator==(wxColour const&) const
> 3,013,270 50,667 135 903,981 0 0 903,981 0 0 list.h:wxObjectListNode::GetData() const
> 2,954,088 229,024 233 738,522 71 3 1,353,957 1 0 ???:g_object_new
> 2,945,751 10,586 912 917,529 3,517 41 869,238 3 0 ???:gdk_draw_segments
> 2,929,872 2,156 1,203 720,951 25,862 6,456 980,619 4 0 window.cpp:wxWindow::GtkUpdate()
> 2,926,076 37,623 1,446 1,117,819 59,901 127 394,602 7,811 3,378 ???:_XFlushGCCache
> 2,891,196 0 0 1,314,180 0 0 657,090 0 0 ???:pango_script_iter_get_range
> 2,883,644 248,590 1,000 1,640,694 3 0 894,924 32 0 treectlg.cpp:wxGenericTreeItem::wxGenericTreeItem(wxGenericTreeItem*, wxString const&, int, int, wxTreeItemData*)
> 2,873,640 305,146 716 1,440,432 9 0 516,504 0 0 dcclient.cpp:wxWindowDC::Destroy()
> 2,871,725 76,007 323 891,225 98,326 504 990,250 828 2 ???:gdk_drawable_get_screen
> 2,869,155 101,602 391 850,120 0 0 1,062,650 545 1 font.h:wxFont::wxFont(wxFont const&)
> 2,856,074 33,626 603 869,240 1,559 9 1,241,678 3,628 26 ???:gdk_region_rectangle
> 2,819,058 256,278 290 640,695 0 0 1,281,390 402 0 ???:pango_attr_font_desc_new
> 2,817,660 267,517 188 845,298 14,206 1 1,127,064 0 0 ???:pango_attr_iterator_destroy
> 2,806,388 437 30 919,080 990 18 968,468 0 0 string.cpp:wxString::Replace(wchar_t const*, wchar_t const*, bool)
> 2,787,200 212,954 319 643,200 0 0 1,286,400 0 0 ???:pango_layout_new
> 2,784,243 159,940 103 928,081 1,638 32 1,325,830 0 0 ???:pango_glyph_string_free
> 2,745,162 5 2 1,830,108 0 0 457,527 0 0 dynarray.h:wxBaseArrayPtrVoid::begin()
> 2,742,306 101,252 373 1,828,204 80 72 457,051 0 0 htmlpars.h:wxHtmlParser::GetEntitiesParser() const
> 2,739,776 1,442 12 843,008 0 0 843,008 882 2 font.h:wxFontBase::wxFontBase()
> 2,726,828 105,040 568 864,604 50,628 490 1,197,144 6 0 ???:pango_renderer_draw_glyphs
> 2,709,931 226,950 192 862,276 158 27 492,664 0 0 ???:g_slist_remove
> 2,701,116 400,152 242 700,284 0 0 1,000,428 0 0 treectlg.cpp:wxGenericTreeItem::GetCurrentImage() const
> 2,692,011 10,029 560 1,153,719 12,778 3,211 494,451 0 0 ???:g_quark_to_string
> 2,672,462 252 19 957,986 0 0 1,210,384 0 0 string.cpp:wxString::Find(wchar_t const*) const
> 2,671,929 611 17 822,132 0 0 822,132 0 0 brush.h:wxBrushBase::wxBrushBase()
> 2,669,801 14,529 1,863 821,562 3 0 455,663 7,219 1,104 ???:gtk_widget_class_path
> 2,662,212 76,380 437 633,860 429 0 507,088 0 0 ???:cairo_pattern_reference
> 2,653,926 75,545 298 723,798 0 0 723,798 0 0 string.h:wxString::IsEmpty() const
> 2,653,584 158,633 1,192 629,664 0 0 1,529,184 425 0 ???:cairo_pattern_create_rgb
> 2,648,568 204,056 183 814,944 0 0 814,944 0 0 region.h:wxRegion::wxRegion()
> 2,645,102 245,165 1,622 738,168 13,165 0 953,467 25 1 ???:gdk_draw_layout_with_colors
> 2,635,001 248,585 750 1,193,208 0 0 1,292,642 200 1 treectlg.cpp:wxGenericTreeCtrl::DoInsertItem(wxTreeItemId const&, unsigned, wxString const&, int, int, wxTreeItemData*)
> 2,626,344 208,148 1,774 720,303 625 594 739,464 1 0 wincmn.cpp:wxWindowBase::GetFont() const
> 2,625,297 17,144 1,502 777,058 4,434 496 455,663 5,467 669 ???:gtk_widget_path
> 2,614,345 304,890 878 738,168 38,983 995 676,654 0 0 ???:gdk_pango_renderer_set_drawable
> 2,614,345 152,010 387 738,168 2 0 676,654 0 0 ???:gdk_pango_renderer_set_gc
> 2,610,097 20,085 973 803,104 8,500 494 602,335 1,295 1 ???:gtk_container_get_type
> 2,610,066 128,840 99 1,740,044 0 0 435,011 0 0 font.h:wxFontBase::GetFontData() const
> 2,598,012 152,302 633 793,837 0 0 649,503 0 0 ???:pango_renderer_get_color
> 2,585,336 3 3 596,616 14 10 994,360 0 0 treectlg.cpp:wxGenericTreeCtrl::SendDeleteEvent(wxGenericTreeItem*)
> 2,554,964 119 9 601,168 0 0 901,752 0 0 string.h:wxString::Contains(wxString const&) const
> 2,509,846 16,794 857 765,702 6,167 225 638,130 6,769 735 ???:pthread_setspecific
> 2,474,166 59 0 1,649,444 36,066 9,450 412,361 0 0 list.h:wxNodeBase::GetData() const
> 2,473,900 4 2 346,346 0 0 1,088,516 0 0 mimetype.cpp:wxMimeTypeCommands::Add(wxString const&)
> 2,469,460 23,121 1,516 975,835 24,242 3,598 458,045 11,484 2,642 ???:_XSetClipRectangles
> 2,460,738 166,503 1,023 676,700 6,557 3 1,045,820 303 0 ???:pango_renderer_draw_layout
> 2,456,491 256,816 623 905,023 0 0 646,445 545 2 buffer.h:wxCharBuffer::wxCharBuffer(unsigned)
> 2,436,161 3 3 845,199 6,735 6,662 696,046 0 0 treectlg.cpp:wxGenericTreeItem::GetChildrenCount(bool) const
> 2,428,389 26,358 1,039 710,748 25,621 5,542 829,206 104 0 ???:gtk_container_forall
> 2,423,595 16,789 576 871,665 7,572 854 425,180 448 0 ???:pthread_getspecific
> 2,422,980 331,159 221 1,211,490 45,249 2,199 173,070 0 0 ???:cairo_font_options_hash
> 2,411,586 105,078 374 1,607,724 33,664 10,149 401,931 0 0 list.h:wxListBase::GetFirst() const
> 2,399,922 1,211 874 685,692 1 0 685,692 0 0 ???:gdk_draw_points
> 2,399,012 122,552 786 708,799 341 0 1,090,460 125 0 ???:cairo_move_to
> 2,388,762 148,518 1,360 686,622 16,996 9,433 963,889 8,894 332 ???:pango_layout_get_iter
> 2,387,062 125 29 980,581 2,112 0 985,983 0 0 ???:FcCharSetDestroy
> 2,370,196 203,978 798 721,364 0 0 824,416 0 0 brush.h:wxBrush::wxBrush(wxBrush const&)
> 2,359,896 38,440 835 697,242 0 0 1,072,680 0 0 ???:cairo_rel_line_to
> 2,259,906 1 0 1,506,604 169,562 168,692 376,651 0 0 htmltag.h:wxHtmlTag::GetNextSibling() const
> 2,241,990 265,508 205 448,398 0 0 1,195,728 499 0 ???:pango_attr_list_new
> 2,240,073 64,605 415 746,691 40,136 5,115 814,572 7 0 ???:gdk_drawable_get_size
> 2,235,735 74 8 447,147 0 0 894,294 0 0 string.cpp:operator+(wxString const&, wchar_t const*)
>
> --------------------------------------------------------------------------------
> -- User-annotated source: /home/neumann/wxGTK-2.6.2/src/html/ + htmltag.cpp
> --------------------------------------------------------------------------------
> Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw
>
> -- line 48 ----------------------------------------
> . . . . . . . . . // or -2 if this is ending tag </...>
> . . . . . . . . . int End1, End2;
> . . . . . . . . .
> . . . . . . . . . // name of this tag
> . . . . . . . . . wxChar *Name;
> . . . . . . . . . };
> . . . . . . . . .
> . . . . . . . . .
> 28 1 1 4 0 0 14 0 0 IMPLEMENT_CLASS(wxHtmlTagsCache,wxObject)
> . . . . . . . . .
> . . . . . . . . . #define CACHE_INCREMENT 64
> . . . . . . . . .
> 1,373,721 16 12 0 0 0 457,907 0 0 bool wxIsCDATAElement(const wxChar *tag)
> . . . . . . . . . {
> . . . . . . . . . return (wxStrcmp(tag, _T("SCRIPT")) == 0) ||
> 7,784,411 8 6 1,373,719 0 0 3,205,343 0 0 (wxStrcmp(tag, _T("STYLE")) == 0);
> 915,814 0 0 915,814 0 0 0 0 0 }
> . . . . . . . . .
> 112 8 6 16 0 0 56 6 1 wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source)
> . . . . . . . . . {
> 48 0 0 8 0 0 24 0 0 const wxChar *src = source.c_str();
> 40 8 6 8 0 0 24 0 0 int lng = source.Length();
> . . . . . . . . . wxChar tagBuffer[256];
> . . . . . . . . .
> 16 0 0 8 0 0 8 0 0 m_Cache = NULL;
> 16 0 0 8 0 0 8 0 0 m_CacheSize = 0;
> 16 0 0 8 0 0 8 0 0 m_CachePos = 0;
> . . . . . . . . .
> 8 0 0 0 0 0 8 0 0 int pos = 0;
> 9,867,272 8 6 6,578,176 0 0 0 0 0 while (pos < lng)
> . . . . . . . . . {
> 19,734,480 8 6 9,867,240 215,871 212,766 0 0 0 if (src[pos] == wxT('<')) // tag found:
> . . . . . . . . . {
> 2,345,540 0 0 938,216 1 0 0 0 0 if (m_CacheSize % CACHE_INCREMENT == 0)
> 110,010 8 6 36,670 81 1 29,336 78 1 m_Cache = (wxHtmlCacheItem*) realloc(m_Cache, (m_CacheSize + CACHE_INCREMENT) * sizeof(wxHtmlCacheItem));
> 2,814,648 0 0 1,407,324 0 0 938,216 80 0 int tg = m_CacheSize++;
> 1,876,432 0 0 938,216 0 0 469,108 0 0 int stpos = pos++;
> 3,283,756 0 0 1,876,432 0 0 469,108 13,154 10,901 m_Cache[tg].Key = stpos;
> . . . . . . . . .
> . . . . . . . . . int i;
> 66,121,664 16 12 28,810,187 172,180 171,491 5,626,422 13 0 for ( i = 0;
> . . . . . . . . . pos < lng && i < (int)WXSIZEOF(tagBuffer) - 1 &&
> . . . . . . . . . src[pos] != wxT('>') && !wxIsspace(src[pos]);
> . . . . . . . . . i++, pos++ )
> . . . . . . . . . {
> 22,824,460 0 0 9,129,784 0 0 6,847,338 11,267 10,104 tagBuffer[i] = (wxChar)wxToupper(src[pos]);
> . . . . . . . . . }
> 938,216 0 0 469,108 0 0 469,108 17 1 tagBuffer[i] = _T('\0');
> . . . . . . . . .
> 7,036,620 8 6 2,345,540 0 0 1,876,432 115,187 115,024 m_Cache[tg].Name = new wxChar[i+1];
> 17,573,728 8 6 13,351,756 12 1 11,006,216 0 0 memcpy(m_Cache[tg].Name, tagBuffer, (i+1)*sizeof(wxChar));
> . . . . . . . . .
> 156,931,421 0 0 85,385,726 865,048 862,749 0 0 0 while (pos < lng && src[pos] != wxT('>')) pos++;
> . . . . . . . . .
> 3,283,756 8 6 1,407,324 2 0 0 0 0 if (src[stpos+1] == wxT('/')) // ending tag:
> . . . . . . . . . {
> 1,200,303 0 0 646,317 0 0 184,662 1 0 m_Cache[tg].End1 = m_Cache[tg].End2 = -2;
> . . . . . . . . . // find matching begin tag:
> 2,970,375,760 0 0 1,485,136,138 0 0 92,331 0 0 for (i = tg; i >= 0; i--)
> 12,576,788,388 7 5 4,739,916,480 185,434,754 178,236,971 1,327,266,612 0 0 if ((m_Cache[i].End1 == -1) && (wxStrcmp(m_Cache[i].Name, tagBuffer+1) == 0))
> . . . . . . . . . {
> 568,246 0 0 324,712 0 0 81,178 0 0 m_Cache[i].End1 = stpos;
> 649,424 0 0 324,712 178 33 81,178 0 0 m_Cache[i].End2 = pos + 1;
> 81,178 0 0 0 0 0 0 0 0 break;
> . . . . . . . . . }
> . . . . . . . . . }
> . . . . . . . . . else
> . . . . . . . . . {
> 4,898,101 16 12 2,637,439 0 0 753,554 0 0 m_Cache[tg].End1 = m_Cache[tg].End2 = -1;
> . . . . . . . . .
> 2,637,439 0 0 0 0 0 753,554 0 0 if (wxIsCDATAElement(tagBuffer))
> . . . . . . . . . {
> . . . . . . . . . // store the orig pos in case we are missing the closing
> . . . . . . . . . // tag (see below)
> 8 2 2 4 0 0 4 0 0 wxInt32 old_pos = pos;
> 4 0 0 0 0 0 4 0 0 bool foundCloseTag = false;
> . . . . . . . . .
> . . . . . . . . . // find next matching tag
> 24 0 0 0 0 0 12 0 0 int tag_len = wxStrlen(tagBuffer);
> 16 2 2 8 0 0 0 0 0 while (pos < lng)
> . . . . . . . . . {
> . . . . . . . . . // find the ending tag
> 1,402 2 2 698 8 0 0 0 0 while (pos + 1 < lng &&
> . . . . . . . . . (src[pos] != '<' || src[pos+1] != '/'))
> 264 0 0 132 0 0 0 0 0 ++pos;
> 24 0 0 12 0 0 0 0 0 if (src[pos] == '<')
> 8 0 0 4 0 0 0 0 0 ++pos;
> . . . . . . . . .
> . . . . . . . . . // see if it matches
> 4 0 0 0 0 0 4 0 0 int match_pos = 0;
> 496 2 2 276 4 0 0 0 0 while (pos < lng && match_pos < tag_len && src[pos] != '>' && src[pos] != '<') {
> . . . . . . . . . // cast to wxChar needed to suppress warning in
> . . . . . . . . . // Unicode build
> 338 2 2 130 0 0 52 0 0 if ((wxChar)wxToupper(src[pos]) == tagBuffer[match_pos]) {
> 66 0 0 22 0 0 0 0 0 ++match_pos;
> . . . . . . . . . }
> 96 0 0 48 0 0 0 0 0 else if (src[pos] == wxT(' ') || src[pos] == wxT('\n') ||
> . . . . . . . . . src[pos] == wxT('\r') || src[pos] == wxT('\t')) {
> . . . . . . . . . // need to skip over these
> . . . . . . . . . }
> . . . . . . . . . else {
> 4 0 0 0 0 0 4 0 0 match_pos = 0;
> . . . . . . . . . }
> 52 0 0 26 0 0 0 0 0 ++pos;
> . . . . . . . . . }
> . . . . . . . . .
> . . . . . . . . . // found a match
> 12 0 0 8 0 0 0 0 0 if (match_pos == tag_len)
> . . . . . . . . . {
> 20 0 0 8 0 0 4 0 0 pos = pos - tag_len - 3;
> 4 0 0 0 0 0 4 0 0 foundCloseTag = true;
> 4 0 0 0 0 0 0 0 0 break;
> . . . . . . . . . }
> . . . . . . . . . else // keep looking for the closing tag
> . . . . . . . . . {
> . . . . . . . . . ++pos;
> . . . . . . . . . }
> . . . . . . . . . }
> 16 0 0 4 0 0 0 0 0 if (!foundCloseTag)
> . . . . . . . . . {
> . . . . . . . . . // we didn't find closing tag; this means the markup
> . . . . . . . . . // is incorrect and the best thing we can do is to
> . . . . . . . . . // ignore the unclosed tag and continue parsing as if
> . . . . . . . . . // it didn't exist:
> . . . . . . . . . pos = old_pos;
> . . . . . . . . . }
> . . . . . . . . . }
> . . . . . . . . . }
> . . . . . . . . . }
> . . . . . . . . .
> 6,578,160 0 0 3,289,080 11,079 9,793 0 0 0 pos++;
> . . . . . . . . . }
> . . . . . . . . .
> . . . . . . . . . // ok, we're done, now we'll free .Name members of cache - we don't need it anymore:
> 2,814,696 8 6 1,876,456 0 0 8 0 0 for (int i = 0; i < m_CacheSize; i++)
> . . . . . . . . . {
> 8,443,944 8 6 3,752,864 116,922 106,183 938,216 0 0 delete[] m_Cache[i].Name;
> 2,814,648 0 0 1,407,324 0 0 469,108 0 0 m_Cache[i].Name = NULL;
> . . . . . . . . . }
> 56 8 6 40 0 0 0 0 0 }
> . . . . . . . . .
> 1,129,953 0 0 0 0 0 376,651 0 0 void wxHtmlTagsCache::QueryTag(int at, int* end1, int* end2)
> . . . . . . . . . {
> 1,506,604 0 0 753,302 149 121 0 0 0 if (m_Cache == NULL) return;
> 3,389,859 0 0 2,259,906 152 60 0 0 0 if (m_Cache[m_CachePos].Key != at)
> . . . . . . . . . {
> 4,519,740 8 6 2,636,515 0 0 753,290 0 0 int delta = (at < m_Cache[m_CachePos].Key) ? -1 : 1;
> 4,221,693 0 0 2,814,462 21,544 21,163 0 0 0 do
> . . . . . . . . . {
> 4,690,770 0 0 2,814,462 0 0 0 0 0 if ( m_CachePos < 0 || m_CachePos == m_CacheSize )
> . . . . . . . . . {
> . . . . . . . . . // something is very wrong with HTML, give up by returning an
> . . . . . . . . . // impossibly large value which is going to be ignored by the
> . . . . . . . . . // caller
> . . . . . . . . . *end1 =
> . . . . . . . . . *end2 = INT_MAX;
> . . . . . . . . . return;
> . . . . . . . . . }
> . . . . . . . . .
> 2,814,462 2 2 1,876,308 0 0 469,077 0 0 m_CachePos += delta;
> . . . . . . . . . }
> . . . . . . . . . while (m_Cache[m_CachePos].Key != at);
> . . . . . . . . . }
> 3,389,859 8 6 2,259,906 0 0 376,651 0 0 *end1 = m_Cache[m_CachePos].End1;
> 3,389,859 0 0 2,259,906 95,789 95,371 376,651 0 0 *end2 = m_Cache[m_CachePos].End2;
> 753,302 0 0 753,302 0 0 0 0 0 }
> . . . . . . . . .
> . . . . . . . . .
> . . . . . . . . .
> . . . . . . . . .
> . . . . . . . . . //-----------------------------------------------------------------------------
> . . . . . . . . . // wxHtmlTag
> . . . . . . . . . //-----------------------------------------------------------------------------
> . . . . . . . . .
> 28 2 2 4 0 0 14 0 0 IMPLEMENT_CLASS(wxHtmlTag,wxObject)
> . . . . . . . . .
> . . . . . . . . . wxHtmlTag::wxHtmlTag(wxHtmlTag *parent,
> . . . . . . . . . const wxString& source, int pos, int end_pos,
> . . . . . . . . . wxHtmlTagsCache *cache,
> 11,299,530 24 18 1,883,255 0 0 4,143,161 0 0 wxHtmlEntitiesParser *entParser) : wxObject()
> . . . . . . . . . {
> . . . . . . . . . /* Setup DOM relations */
> . . . . . . . . .
> 753,302 0 0 376,651 0 0 376,651 0 0 m_Next = NULL;
> 2,259,906 0 0 1,506,604 0 0 753,302 0 0 m_FirstChild = m_LastChild = NULL;
> 1,129,953 0 0 753,302 0 0 376,651 0 0 m_Parent = parent;
> 753,302 8 7 376,651 0 0 0 0 0 if (parent)
> . . . . . . . . . {
> 1,883,125 0 0 1,506,500 2,258 251 376,625 0 0 m_Prev = m_Parent->m_LastChild;
> 1,506,500 0 0 753,250 0 0 0 0 0 if (m_Prev == NULL)
> 403,000 0 0 241,800 0 0 80,600 0 0 m_Parent->m_FirstChild = this;
> . . . . . . . . . else
> 1,184,100 0 0 888,075 0 0 296,025 159 47 m_Prev->m_Next = this;
> 1,883,125 0 0 1,129,875 0 0 376,625 0 0 m_Parent->m_LastChild = this;
> . . . . . . . . . }
> . . . . . . . . . else
> 52 8 7 26 0 0 26 0 0 m_Prev = NULL;
> . . . . . . . . .
> . . . . . . . . . /* Find parameters and their values: */
> . . . . . . . . .
> . . . . . . . . . int i;
> . . . . . . . . . wxChar c;
> . . . . . . . . .
> . . . . . . . . . // fill-in name, params and begin pos:
> 1,129,953 0 0 376,651 0 0 376,651 0 0 i = pos+1;
> . . . . . . . . .
> . . . . . . . . . // find tag's name and convert it to uppercase:
> 68,729,470 16 14 23,909,120 106,966 106,754 8,364,492 0 0 while ((i < end_pos) &&
> . . . . . . . . . ((c = source[i++]) != wxT(' ') && c != wxT('\r') &&
> . . . . . . . . . c != wxT('\n') && c != wxT('\t') &&
> . . . . . . . . . c != wxT('>')))
> . . . . . . . . . {
> 5,633,332 0 0 2,816,666 0 0 0 0 0 if ((c >= wxT('a')) && (c <= wxT('z')))
> 2,204,388 0 0 1,102,194 0 0 0 0 0 c -= (wxT('a') - wxT('A'));
> 12,001,304 0 0 3,428,944 0 0 5,143,416 0 0 m_Name << c;
> . . . . . . . . . }
> . . . . . . . . .
> . . . . . . . . . // if the tag has parameters, read them and "normalize" them,
> . . . . . . . . . // i.e. convert to uppercase, replace whitespaces by spaces and
> . . . . . . . . . // remove whitespaces around '=':
> 5,273,114 8 7 1,129,953 0 0 753,302 0 0 if (source[i-1] != wxT('>'))
> . . . . . . . . . {
> . . . . . . . . . #define IS_WHITE(c) (c == wxT(' ') || c == wxT('\r') || \
> . . . . . . . . . c == wxT('\n') || c == wxT('\t'))
> 2,960,890 0 0 0 0 0 1,184,356 0 0 wxString pname, pvalue;
> . . . . . . . . . wxChar quote;
> . . . . . . . . . enum
> . . . . . . . . . {
> . . . . . . . . . ST_BEFORE_NAME = 1,
> . . . . . . . . . ST_NAME,
> . . . . . . . . . ST_BEFORE_EQ,
> . . . . . . . . . ST_BEFORE_VALUE,
> . . . . . . . . . ST_VALUE
> . . . . . . . . . } state;
> . . . . . . . . .
> 296,089 0 0 0 0 0 296,089 0 0 quote = 0;
> 296,089 0 0 0 0 0 296,089 0 0 state = ST_BEFORE_NAME;
> 42,905,077 10 10 28,405,992 29 6 0 0 0 while (i < end_pos)
> . . . . . . . . . {
> 170,435,952 0 0 56,811,984 887,792 885,892 42,608,988 0 0 c = source[i++];
> . . . . . . . . .
> 29,087,346 0 0 14,543,673 0 0 0 0 0 if (c == wxT('>') && !(state == ST_VALUE && quote != 0))
> . . . . . . . . . {
> 1,184,358 5 5 592,178 0 0 0 0 0 if (state == ST_BEFORE_EQ || state == ST_NAME)
> . . . . . . . . . {
> 18 0 0 2 0 0 8 0 0 m_ParamNames.Add(pname);
> 42 2 2 4 0 0 18 0 0 m_ParamValues.Add(wxEmptyString);
> . . . . . . . . . }
> 592,174 5 5 296,087 0 0 0 0 0 else if (state == ST_VALUE && quote == 0)
> . . . . . . . . . {
> . . . . . . . . . m_ParamNames.Add(pname);
> . . . . . . . . . if (entParser)
> . . . . . . . . . m_ParamValues.Add(entParser->Parse(pvalue));
> . . . . . . . . . else
> . . . . . . . . . m_ParamValues.Add(pvalue);
> . . . . . . . . . }
> . . . . . . . . . break;
> . . . . . . . . . }
> 97,348,349 10 10 55,627,628 315 240 13,906,907 0 0 switch (state)
> . . . . . . . . . {
> . . . . . . . . . case ST_BEFORE_NAME:
> 4,574,352 0 0 2,287,176 0 0 0 0 0 if (!IS_WHITE(c))
> . . . . . . . . . {
> 3,099,918 5 5 516,653 0 0 1,549,959 0 0 pname = c;
> 516,653 0 0 0 0 0 516,653 0 0 state = ST_NAME;
> . . . . . . . . . }
> 516,653 0 0 0 0 0 0 0 0 break;
> . . . . . . . . . case ST_NAME:
> 18,302,898 0 0 9,151,446 0 0 0 0 0 if (IS_WHITE(c))
> 6 0 0 0 0 0 6 0 0 state = ST_BEFORE_EQ;
> 4,575,720 0 0 2,287,860 0 0 0 0 0 else if (c == wxT('='))
> 1,033,302 0 0 0 0 0 516,651 0 0 state = ST_BEFORE_VALUE;
> . . . . . . . . . else
> 10,627,254 5 5 1,771,209 0 0 5,313,627 0 0 pname << c;
> 1,771,209 0 0 0 0 0 0 0 0 break;
> . . . . . . . . . case ST_BEFORE_EQ:
> 12 0 0 6 0 0 0 0 0 if (c == wxT('='))
> . . . . . . . . . state = ST_BEFORE_VALUE;
> 48 2 2 24 0 0 0 0 0 else if (!IS_WHITE(c))
> . . . . . . . . . {
> 54 0 0 6 0 0 24 0 0 m_ParamNames.Add(pname);
> 126 2 2 12 0 0 54 0 0 m_ParamValues.Add(wxEmptyString);
> 42 2 2 6 0 0 18 0 0 pname = c;
> 6 0 0 0 0 0 6 0 0 state = ST_NAME;
> . . . . . . . . . }
> 6 0 0 0 0 0 0 0 0 break;
> . . . . . . . . . case ST_BEFORE_VALUE:
> 4,133,208 8 8 2,066,604 0 0 0 0 0 if (!IS_WHITE(c))
> . . . . . . . . . {
> 1,549,953 0 0 516,651 0 0 0 0 0 if (c == wxT('"') || c == wxT('\''))
> 4,649,859 0 0 1,033,302 0 0 2,066,604 0 0 quote = c, pvalue = wxEmptyString;
> . . . . . . . . . else
> . . . . . . . . . quote = 0, pvalue = c;
> 516,651 5 5 0 0 0 516,651 0 0 state = ST_VALUE;
> . . . . . . . . . }
> 516,651 0 0 0 0 0 0 0 0 break;
> . . . . . . . . . case ST_VALUE:
> 72,039,518 0 0 40,944,017 0 0 0 0 0 if ((quote != 0 && c == quote) ||
> . . . . . . . . . (quote == 0 && IS_WHITE(c)))
> . . . . . . . . . {
> 4,649,859 5 5 516,651 0 0 2,066,604 0 0 m_ParamNames.Add(pname);
> 1,033,302 0 0 516,651 0 0 0 0 0 if (quote == 0)
> . . . . . . . . . {
> . . . . . . . . . // VS: backward compatibility, no real reason,
> . . . . . . . . . // but wxHTML code relies on this... :(
> . . . . . . . . . pvalue.MakeUpper();
> . . . . . . . . . }
> 1,033,302 5 5 516,651 0 0 0 0 0 if (entParser)
> 11,882,973 5 5 1,033,302 0 0 5,166,510 0 0 m_ParamValues.Add(entParser->Parse(pvalue));
> . . . . . . . . . else
> . . . . . . . . . m_ParamValues.Add(pvalue);
> 516,651 0 0 0 0 0 516,651 0 0 state = ST_BEFORE_NAME;
> . . . . . . . . . }
> . . . . . . . . . else
> 59,091,096 0 0 9,848,516 0 0 29,545,548 0 0 pvalue << c;
> . . . . . . . . . break;
> . . . . . . . . . }
> 3,256,979 0 0 0 0 0 1,184,356 0 0 }
> . . . . . . . . .
> . . . . . . . . . #undef IS_WHITE
> . . . . . . . . . }
> 1,129,953 8 5 753,302 0 0 376,651 9 2 m_Begin = i;
> . . . . . . . . .
> 3,766,510 8 6 1,506,604 0 0 1,883,255 0 0 cache->QueryTag(pos, &m_End1, &m_End2);
> 1,506,628 0 0 1,129,969 0 0 8 0 0 if (m_End1 > end_pos) m_End1 = end_pos;
> 1,506,628 0 0 1,129,969 0 0 8 0 0 if (m_End2 > end_pos) m_End2 = end_pos;
> 1,129,961 10 7 1,129,953 0 0 0 0 0 }
> . . . . . . . . .
> 2,636,557 7 6 376,651 0 0 1,129,953 0 0 wxHtmlTag::~wxHtmlTag()
> . . . . . . . . . {
> . . . . . . . . . wxHtmlTag *t1, *t2;
> 1,129,953 7 5 753,302 11,395 11,282 376,651 0 0 t1 = m_FirstChild;
> 1,883,203 0 0 753,276 0 0 0 0 0 while (t1)
> . . . . . . . . . {
> 1,883,125 0 0 376,625 0 0 1,129,875 0 0 t2 = t1->GetNextSibling();
> 3,766,250 0 0 1,883,125 91,200 90,451 753,250 0 0 delete t1;
> 753,250 0 0 376,625 1,313 106 376,625 0 0 t1 = t2;
> . . . . . . . . . }
> 15,066,040 34 23 4,519,812 0 0 5,273,114 0 0 }
> . . . . . . . . .
> 9,588 334 1 0 0 0 3,196 0 0 bool wxHtmlTag::HasParam(const wxString& par) const
> . . . . . . . . . {
> 47,940 0 0 6,392 0 0 22,372 0 0 return (m_ParamNames.Index(par, false) != wxNOT_FOUND);
> 6,392 0 0 6,392 0 0 0 0 0 }
> . . . . . . . . .
> 3,997,176 100,247 593 666,196 0 0 1,998,588 0 0 wxString wxHtmlTag::GetParam(const wxString& par, bool with_commas) const
> . . . . . . . . . {
> 8,660,548 0 0 1,332,392 0 0 5,329,568 0 0 int index = m_ParamNames.Index(par, false);
> 1,332,392 0 0 666,196 0 0 0 0 0 if (index == wxNOT_FOUND)
> 552 58 2 138 0 0 207 0 0 return wxEmptyString;
> 1,332,254 50,225 294 666,127 0 0 0 0 0 if (with_commas)
> . . . . . . . . . {
> . . . . . . . . . // VS: backward compatibility, seems to be never used by wxHTML...
> . . . . . . . . . wxString s;
> . . . . . . . . . s << wxT('"') << m_ParamValues[index] << wxT('"');
> . . . . . . . . . return s;
> . . . . . . . . . }
> . . . . . . . . . else
> 9,325,778 100,485 590 1,998,381 0 0 3,996,762 0 0 return m_ParamValues[index];
> 2,664,784 59 2 2,664,784 0 0 0 0 0 }
> . . . . . . . . .
> . . . . . . . . . int wxHtmlTag::ScanParam(const wxString& par,
> . . . . . . . . . const wxChar *format,
> 4 0 0 0 0 0 2 0 0 void *param) const
> . . . . . . . . . {
> 7 0 0 2 0 0 5 0 0 wxString parval = GetParam(par);
> 19 1 1 2 0 0 9 0 0 return wxSscanf(parval, format, param);
> 4 0 0 4 0 0 0 0 0 }
> . . . . . . . . .
> 52 5 3 0 0 0 26 0 0 bool wxHtmlTag::GetParamAsColour(const wxString& par, wxColour *clr) const
> . . . . . . . . . {
> 91 5 3 26 0 0 65 0 0 wxString str = GetParam(par);
> . . . . . . . . .
> 115 0 0 0 0 0 38 0 0 if (str.empty()) return false;
> 10 1 1 0 0 0 3 0 0 if (str.GetChar(0) == wxT('#'))
> . . . . . . . . . {
> . . . . . . . . . unsigned long tmp;
> 11 0 0 2 0 0 5 0 0 if (ScanParam(par, wxT("#%lX"), &tmp) != 1)
> . . . . . . . . . return false;
> . . . . . . . . . *clr = wxColour((unsigned char)((tmp & 0xFF0000) >> 16),
> . . . . . . . . . (unsigned char)((tmp & 0x00FF00) >> 8),
> 31 2 2 4 0 0 10 0 0 (unsigned char)(tmp & 0x0000FF));
> 2 1 1 0 0 0 1 0 0 return true;
> . . . . . . . . . }
> . . . . . . . . . else
> . . . . . . . . . {
> . . . . . . . . . // Handle colours defined in HTML 4.0:
> . . . . . . . . . #define HTML_COLOUR(name,r,g,b) \
> . . . . . . . . . if (str.IsSameAs(wxT(name), false)) \
> . . . . . . . . . { *clr = wxColour(r,g,b); return true; }
> . . . . . . . . . HTML_COLOUR("black", 0x00,0x00,0x00)
> -- line 438 ----------------------------------------
> -- line 449 ----------------------------------------
> . . . . . . . . . HTML_COLOUR("yellow", 0xFF,0xFF,0x00)
> . . . . . . . . . HTML_COLOUR("navy", 0x00,0x00,0x80)
> . . . . . . . . . HTML_COLOUR("blue", 0x00,0x00,0xFF)
> . . . . . . . . . HTML_COLOUR("teal", 0x00,0x80,0x80)
> . . . . . . . . . HTML_COLOUR("aqua", 0x00,0xFF,0xFF)
> . . . . . . . . . #undef HTML_COLOUR
> . . . . . . . . . }
> . . . . . . . . .
> 78 5 2 13 0 0 26 0 0 return false;
> 39 4 2 39 0 0 0 0 0 }
> . . . . . . . . .
> 2,056 225 0 0 0 0 1,028 0 0 bool wxHtmlTag::GetParamAsInt(const wxString& par, int *clr) const
> . . . . . . . . . {
> 4,786 0 0 1,028 0 0 1,879 0 0 if (!HasParam(par)) return false;
> . . . . . . . . . long i;
> 4,231 382 3 868 0 0 2,124 0 0 bool succ = GetParam(par).ToLong(&i);
> 531 0 0 354 0 0 177 1 0 *clr = (int)i;
> 708 0 0 177 0 0 177 0 0 return succ;
> 1,542 0 0 1,542 0 0 0 0 0 }
> . . . . . . . . .
> . . . . . . . . . wxString wxHtmlTag::GetAllParams() const
> . . . . . . . . . {
> . . . . . . . . . // VS: this function is for backward compatibility only,
> . . . . . . . . . // never used by wxHTML
> . . . . . . . . . wxString s;
> . . . . . . . . . size_t cnt = m_ParamNames.GetCount();
> . . . . . . . . . for (size_t i = 0; i < cnt; i++)
> -- line 475 ----------------------------------------
> -- line 492 ----------------------------------------
> . . . . . . . . . {
> . . . . . . . . . wxHtmlTag *cur = (wxHtmlTag*)this;
> . . . . . . . . . while (cur->m_Prev)
> . . . . . . . . . cur = cur->m_Prev;
> . . . . . . . . . return cur;
> . . . . . . . . . }
> . . . . . . . . . }
> . . . . . . . . .
> 54 3 3 0 0 0 18 0 0 wxHtmlTag *wxHtmlTag::GetLastSibling() const
> . . . . . . . . . {
> 72 0 0 36 0 0 0 0 0 if (m_Parent)
> . . . . . . . . . return m_Parent->m_LastChild;
> . . . . . . . . . else
> . . . . . . . . . {
> 36 0 0 18 0 0 18 0 0 wxHtmlTag *cur = (wxHtmlTag*)this;
> 570 3 2 276 0 0 0 0 0 while (cur->m_Next)
> 360 0 0 240 0 0 120 0 0 cur = cur->m_Next;
> 54 0 0 36 0 0 18 0 0 return cur;
> . . . . . . . . . }
> 36 0 0 36 0 0 0 0 0 }
> . . . . . . . . .
> 1,127,184 75,966 182 0 0 0 375,728 0 0 wxHtmlTag *wxHtmlTag::GetNextTag() const
> . . . . . . . . . {
> 1,823,488 0 0 911,744 105,527 93,137 80,144 0 0 if (m_FirstChild) return m_FirstChild;
> 2,062,232 50,084 69 1,031,116 0 0 219,974 0 0 if (m_Next) return m_Next;
> 226,830 323 48 151,220 684 678 75,610 0 0 wxHtmlTag *cur = m_Parent;
> 151,222 0 0 75,610 0 0 1 0 0 if (!cur) return NULL;
> 641,112 0 0 320,556 5,453 930 0 0 0 while (cur->m_Parent && !cur->m_Next)
> 13,599 0 0 9,066 0 0 4,533 0 0 cur = cur->m_Parent;
> 602,555 50,441 234 526,946 3 3 75,609 0 0 return cur->m_Next;
> 751,463 1 1 751,458 0 0 3 0 0 }
> 8 1 1 2 0 0 2 0 0
> . . . . . . . . . #if WXWIN_COMPATIBILITY_2_2
> . . . . . . . . .
> . . . . . . . . . bool wxHtmlTag::IsEnding() const
> . . . . . . . . . {
> . . . . . . . . . return false;
> . . . . . . . . . }
> . . . . . . . . .
> . . . . . . . . . #endif // WXWIN_COMPATIBILITY_2_2
> -- line 531 ----------------------------------------
>
> --------------------------------------------------------------------------------
> Ir I1mr I2mr Dr D1mr D2mr Dw D1mw D2mw
> --------------------------------------------------------------------------------
> 32 0 0 32 27 34 19 1 2 percentage of events annotated
>

Reply all
Reply to author
Forward
0 new messages