2014-04-25 3:31 GMT-04:00 Henri Sivonen <hsivo...@hsivonen.fi>: > On Thu, Apr 24, 2014 at 4:20 PM, Benoit Jacob <jacob.benoi...@gmail.com> > wrote: > > 2014-04-24 8:31 GMT-04:00 Henri Sivonen <hsivo...@hsivonen.fi>: > > > >> I have prepared a queue of patches that removes Netscape-era (circa > >> 1999) internationalization code that efforts to implement the Encoding > >> Standard have shown unnecessary to have in Firefox. This makes libxul > >> on ARMv7 smaller by 181 KB, so that's a win. > > > > Have we measured the impact of this change on actual memory usage (as > > opposed to virtual address space size) ? > > No, we haven't. I don't have a B2G phone, but I could give my whole > patch queue in one diff to someone who wants to try. > > > Have we explored how much this problem could be automatically helped by > the > > linker being smart about locality? > > Not to my knowledge, but I'm very skeptical about getting these > benefits by having the linker be smart so that the dead code ends up > on memory pages that aren't actually mapped to real RAM. > > The code that is no longer in use is sufficiently intermingled with > code that's still is in use. Useful and useless plain old C data is > included side-by-side. Useful and useless classes are included next to > each other in unified compilation units. Since the classes are > instantiated via XPCOM, a linker that's unaware of XPCOM couldn't tell > that some classes are in use and some aren't via static analysis. All > of them would look equally dead or alive depending on what we do you > take on the root of the caller chain being function pointers in a > contract ID table. > > Using PGO to determine what's dead code and what's not wouldn't work, > either, if the profiling run was "load mozilla.org", because the run > would exercise too little code, or if the profiling run was "all the > unit tests", because the profiling run would exercise too much code. >
Thanks for this answer, it does totally make sense (and shed light on the specifics here that make this hard to solve automatically). Benoit > > On Fri, Apr 25, 2014 at 2:03 AM, Ehsan Akhgari <ehsan.akhg...@gmail.com> > wrote: > >> * Are we building and shipping dead code in ICU on B2G? > > > > No. That is at least partly covered by bug 864843. > > Using system ICU seems wrong in terms of correctness. That's the > reason why we don't use system ICU on Mac and desktop Linux, right? > > For a given phone, the Android base system practically never updates, > so for a given Firefox version, the Web-exposed APIs would have as > many behaviors as there are differing ICU snapshots on different > Android versions out there. > > As for B2G, considering that Gonk is supposed to update less often > than Gecko, it seems like a bad idea to have ICU be part of Gonk > rather than part of Gecko on B2G. > > > In my experience, ICU is unfortunately a hot potato. :( The real blocker > > there is finding someone who can tell us what bits of ICU _are_ used in > the > > JS engine. > > Apart from ICU initialization/shutdown, the callers seem to be > http://mxr.mozilla.org/mozilla-central/source/js/src/builtin/Intl.cpp > and http://mxr.mozilla.org/mozilla-central/source/js/src/jsstr.cpp#852 > . > > So the JS engine uses: > * Collation > * Number formatting > * Date and time formatting > * Normalization > > It looks like the JS engine has its own copy of the Unicode database > for other purposes. It seems like that should be unified with ICU so > that there'd be only one copy of the Unicode database. > > Additionally, we should probably rewrite nsCollation users to use ICU > collation and delete nsCollation. > > Therefore, it looks like we should turn off (if we haven't already): > * The ICU LayoutEngine. > * Ustdio > * ICU encoding converters and their mapping tables. > * ICU break iterators and their data. > * ICU transliterators and their data. > > http://apps.icu-project.org/datacustom/ gives a good idea of what > there is to turn off. > > > The parts used in Gecko for <input type=number> are pretty > > small. And of course someone needs to figure out the black magic of > > conveying the information to the ICU build system. > > So it looks like we already build with UCONFIG_NO_LEGACY_CONVERSION: > > http://mxr.mozilla.org/mozilla-central/source/intl/icu/source/common/unicode/uconfig.h#264 > > However, that flag is misdesigned in the sense that it considers > US-ASCII, ISO-8859-1, UTF-7, UTF-32, CESU-8, SCSU and BOCU-1 as > non-legacy, even though, frankly, those are legacy, too. (UTF-16 is > legacy also, but it's legacy we need, since both ICU and Gecko are > UTF-16 legacy code bases!) > > http://mxr.mozilla.org/mozilla-central/source/intl/icu/source/common/unicode/uconfig.h#267 > > So I guess the situation isn't quite as bad as I thought. > > We should probably set UCONFIG_NO_CONVERSION to 1 and > U_CHARSET_IS_UTF8 to 1 per: > > http://mxr.mozilla.org/mozilla-central/source/intl/icu/source/common/unicode/uconfig.h#248 > After all, we should easily be able to make sure that we don't use > non-UTF-8 encodings when passing char* to ICU. > > Also, If the ICU build system is an configurable enough, I think we > should consider identifying what parts of ICU we can delete even > though the build system doesn't let us to and then automate the > deletion as a script so that it can be repeated with future imports of > ICU. > > >> * Do we have any mechanisms in place for preventing stuff like the > >> ICU encoding converters becoming part of the building the future? > > > > No, that is not possible to automate. > > I was thinking of policy / review solutions. > > >> * How should we identify code that we build but that isn't used > >> anywhere? > > > > I'm afraid we need humans for that. > > Yeah, but how do we get humans to do that? > > -- > Henri Sivonen > hsivo...@hsivonen.fi > https://hsivonen.fi/ > _______________________________________________ > dev-platform mailing list > dev-platform@lists.mozilla.org > https://lists.mozilla.org/listinfo/dev-platform > _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform