Optimize GlyphPage for case where all glyphs are available in the same font.
<http://webkit.org/b/108835>
<rdar://problem/13157042>

Reviewed by Antti Koivisto.

Let GlyphPage begin optimistically assuming that all its glyphs will be represented in
the same SimpleFontData*. In this (very common) case, only keep a single SimpleFontData*.

If glyphs from multiple fonts are mixed in one page, an array of per-glyph SimpleFontData*
is allocated transparently.

4.98 MB progression on Membuster3.

* platform/graphics/GlyphPageTreeNode.cpp:
(WebCore::GlyphPageTreeNode::initializePage):
* platform/graphics/GlyphPage.h:
(WebCore::GlyphPage::createUninitialized):
(WebCore::GlyphPage::createZeroedSystemFallbackPage):
(WebCore::GlyphPage::createCopiedSystemFallbackPage):

    There are now three ways of constructing a GlyphPage, two of them are only used for
    creating system fallback pages.

(WebCore::GlyphPage::setGlyphDataForIndex):

    Hold off creating a SimpleFontData* array until we're sure there are two different
    SimpleFontData* backing the glyphs in this page.
    We don't store font data for glyph #0, instead we let the getters always return null for it.

(WebCore::GlyphPage::~GlyphPage):

    Free the SimpleFontData* array if needed.

(WebCore::GlyphPage::glyphDataForCharacter):
(WebCore::GlyphPage::glyphDataForIndex):
(WebCore::GlyphPage::fontDataForCharacter):

    The font data for glyph #0 is always a null pointer now.

(WebCore::GlyphPage::clearForFontData):

    Updated for new storage format.

* rendering/svg/SVGTextRunRenderingContext.cpp:
(WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):

    Fix bug where non-zero glyph was temporarily associated with null font data,
    which triggered the new assertion in setGlyphDataForIndex().

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@141990 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[chromium] turn TestRunner library into a component build
https://bugs.webkit.org/show_bug.cgi?id=108466

Reviewed by Adam Barth.

To achieve this, we need to drop all dependencies on WTF.

* DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:
* DumpRenderTree/DumpRenderTree.gypi:
* DumpRenderTree/chromium/TestRunner/public/WebPreferences.h:
* DumpRenderTree/chromium/TestRunner/public/WebTask.h:
* DumpRenderTree/chromium/TestRunner/public/WebTestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
* DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h:
* DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h:
* DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.cpp:
(WebTestRunner::AccessibilityUIElement::AccessibilityUIElement):
(WebTestRunner::AccessibilityUIElementList::getOrCreate):
(WebTestRunner::AccessibilityUIElementList::createRoot):
* DumpRenderTree/chromium/TestRunner/src/AccessibilityUIElementChromium.h:
(AccessibilityUIElementList):
* DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:
(WebTestRunner::CppBoundClass::~CppBoundClass):
(WebTestRunner::CppBoundClass::invoke):
(WebTestRunner::CppBoundClass::getProperty):
(WebTestRunner::CppBoundClass::setProperty):
(WebTestRunner::CppBoundClass::bindCallback):
(WebTestRunner::CppBoundClass::bindGetterCallback):
(WebTestRunner::CppBoundClass::bindProperty):
(WebTestRunner::CppBoundClass::getAsCppVariant):
* DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:
(WebTestRunner):
(CppBoundClass):
(WebTestRunner::CppBoundClass::bindProperty):
(WebTestRunner::CppBoundClass::bindFallbackCallback):
(WebTestRunner::CppBoundClass::bindFallbackMethod):
* DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:
(WebTestRunner::CppVariant::toString):
(WebTestRunner::CppVariant::toInt32):
(WebTestRunner::CppVariant::toDouble):
(WebTestRunner::CppVariant::toBoolean):
(WebTestRunner::CppVariant::toStringVector):
(WebTestRunner::CppVariant::invoke):
(WebTestRunner::CppVariant::invokeDefault):
* DumpRenderTree/chromium/TestRunner/src/CppVariant.h:
(CppVariant):
* DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:
(WebTestRunner):
(WebTestRunner::EventSender::EventSender):
(WebTestRunner::EventSender::reset):
(WebTestRunner::EventSender::mouseDown):
(WebTestRunner::EventSender::mouseUp):
(WebTestRunner::EventSender::mouseMoveTo):
(WebTestRunner::EventSender::keyDown):
(WebTestRunner::EventSender::dispatchMessage):
(WebTestRunner::EventSender::leapForward):
(WebTestRunner::EventSender::replaySavedEvents):
(WebTestRunner::makeMenuItemStringsFor):
(WebTestRunner::EventSender::contextClick):
(WebTestRunner::EventSender::beginDragWithFiles):
(WebTestRunner::EventSender::addTouchPoint):
(WebTestRunner::EventSender::releaseTouchPoint):
(WebTestRunner::EventSender::updateTouchPoint):
(WebTestRunner::EventSender::cancelTouchPoint):
(WebTestRunner::EventSender::sendCurrentTouchEvent):
(WebTestRunner::EventSender::gestureEvent):
* DumpRenderTree/chromium/TestRunner/src/KeyCodeMapping.cpp:
(WebTestRunner::NativeKeyCodeForWindowsKeyCode):
* DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.cpp:
(WebTestRunner::MockGrammarCheck::checkGrammarOfString):
(WebTestRunner):
* DumpRenderTree/chromium/TestRunner/src/MockGrammarCheck.h:
(WebTestRunner):
(MockGrammarCheck):
* DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.cpp:
(WebTestRunner::MockSpellCheck::spellCheckWord):
(WebTestRunner::MockSpellCheck::initializeIfNeeded):
(WebTestRunner):
* DumpRenderTree/chromium/TestRunner/src/MockSpellCheck.h:
(MockSpellCheck):
* DumpRenderTree/chromium/TestRunner/src/SpellCheckClient.cpp:
(WebTestRunner::SpellCheckClient::checkTextOfParagraph):
(WebTestRunner::SpellCheckClient::finishLastTextCheck):
* DumpRenderTree/chromium/TestRunner/src/TestCommon.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.
(isASCIIAlpha):
(isNotASCIIAlpha):
* DumpRenderTree/chromium/TestRunner/src/TestInterfaces.cpp:
(WebTestRunner::TestInterfaces::TestInterfaces):
* DumpRenderTree/chromium/TestRunner/src/TestInterfaces.h:
(TestInterfaces):
* DumpRenderTree/chromium/TestRunner/src/TestPlugin.cpp:
(WebTestRunner::TestPlugin::TestPlugin):
(WebTestRunner::TestPlugin::initialize):
(WebTestRunner::TestPlugin::destroy):
(WebTestRunner::TestPlugin::parsePrimitive):
(WebTestRunner::TestPlugin::parseColor):
(WebTestRunner::TestPlugin::initProgram):
(WebTestRunner::TestPlugin::initPrimitive):
(WebTestRunner::TestPlugin::drawPrimitive):
(WebTestRunner::TestPlugin::loadShader):
(WebTestRunner::TestPlugin::loadProgram):
(WebTestRunner::TestPlugin::handleDragStatusUpdate):
* DumpRenderTree/chromium/TestRunner/src/TestPlugin.h:
(TestPlugin):
* DumpRenderTree/chromium/TestRunner/src/TestRunner.cpp:
(WebTestRunner::TestRunner::WorkQueue::processWorkSoon):
(WebTestRunner::TestRunner::WorkQueue::processWork):
(WebTestRunner::TestRunner::WorkQueue::reset):
(WebTestRunner::TestRunner::WorkQueue::addWork):
(WebTestRunner::TestRunner::TestRunner):
(WebTestRunner::TestRunner::reset):
(WebTestRunner::TestRunner::policyDelegateDone):
(WebTestRunner::TestRunner::findString):
(WebTestRunner::TestRunner::setTextSubpixelPositioning):
(WebTestRunner::TestRunner::overridePreference):
(WebTestRunner::TestRunner::deliverWebIntent):
(WebTestRunner::TestRunner::setBackingScaleFactor):
(WebTestRunner::TestRunner::simulateLegacyWebNotificationClick):
(WebTestRunner::TestRunner::setMockSpeechInputDumpRect):
(WebTestRunner::TestRunner::wasMockSpeechRecognitionAborted):
(WebTestRunner::TestRunner::setPointerLockWillFailSynchronously):
* DumpRenderTree/chromium/TestRunner/src/TestRunner.h:
(WebTestRunner::TestRunner::WorkQueue::isEmpty):
(TestRunner):
* DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:
(WebTestRunner::TextInputController::markedRange):
(WebTestRunner::TextInputController::selectedRange):
(WebTestRunner::TextInputController::firstRectForCharacterRange):
* DumpRenderTree/chromium/TestRunner/src/WebPreferences.cpp:
(WebTestRunner::WebPreferences::reset):
* DumpRenderTree/chromium/TestRunner/src/WebTask.cpp:
(WebTestRunner::WebTaskList::~WebTaskList):
(WebTestRunner::WebTaskList::registerTask):
(WebTestRunner::WebTaskList::unregisterTask):
(WebTestRunner::WebTaskList::revokeAll):
* DumpRenderTree/chromium/TestRunner/src/WebTestInterfaces.cpp:
(WebTestRunner::WebTestInterfaces::WebTestInterfaces):
(WebTestRunner::WebTestInterfaces::~WebTestInterfaces):
(WebTestRunner::WebTestInterfaces::testInterfaces):
* DumpRenderTree/chromium/TestRunner/src/WebTestProxy.cpp:
(WebTestRunner::WebTestProxyBase::~WebTestProxyBase):
(WebTestRunner::WebTestProxyBase::spellCheckClient):
(WebTestRunner::WebTestProxyBase::registerIntentService):
(WebTestRunner::WebTestProxyBase::dispatchIntent):
(WebTestRunner::WebTestProxyBase::assignIdentifierToRequest):
* DumpRenderTree/chromium/TestRunner/src/config.h: Copied from Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@141991 268f45cc-cd09-0410-ab3c-d52691b4dbfc