author Nicholas Nethercote <>
Wed, 12 Jul 2017 15:13:37 +1000
changeset 419917 129793760f2d718ed61ba17d9aacd57c7ec6785b
parent 371004 1d0eb83ca237bafb36c81e98f64a535bcf1b0984
child 452147 9d2c81fe9e4cf274e0446450a3da6e67626f336b
permissions -rw-r--r--
Bug 1380227 - Avoid many UTF16toUTF8 and UTF8toUTF16 conversions in nsStringBundle. r=emk. Most of the names passed to nsIStringBundle::{Get,Format}StringFromUTF8Name have one of the two following forms: - a 16-bit C string literal, which is then converted to an 8-bit string in order for the lookup to occur; - an 8-bit C string literal converted to a 16-bit string, which is then converted back to an 8-bit string in order for the lookup to occur. This patch introduces and uses alternative methods that can take an 8-bit C string literal, which requires changing some signatures in other methods and functions. It replaces all C++ uses of the old methods. The patch also changes the existing {Get,Format}StringFromName() methods so they take an AUTF8String argument for the name instead of a wstring, because that's nicer for JS code. Even though there is a method for C++ code and a different one for JS code, |binaryname| is used so that the existing method names can be used for the common case in both languages. The change reduces the number of NS_ConvertUTF8toUTF16 and NS_ConvertUTF16toUTF8 conversions while running Speedometer v2 from ~270,000 to ~160,000. (Most of these conversions involved the string "deprecatedReferrerDirective" in nsCSPParser.cpp.)

# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at

with Files('**'):
    BUG_COMPONENT = ('Core', 'Layout')

DIRS += [


    DIRS += ['printing']


DIRS += ['build', 'media']

    TEST_DIRS += ['tools/layout-debug']

CRASHTEST_MANIFESTS += ['../testing/crashtest/crashtests.list']