author | Nicholas Nethercote <nnethercote@mozilla.com> |
Thu, 17 Dec 2015 19:36:09 -0800 | |
changeset 278260 | 41a7345c2c4aa3b2a4dbf7b5a6b65fc28027d523 |
parent 278259 | affc1fd3d231a31a28ef8125523335d9274f233a |
child 278261 | 9ad2588ed167f967de511e3858626fbb227f8ba3 |
push id | 29847 |
push user | cbook@mozilla.com |
push date | Mon, 04 Jan 2016 10:55:44 +0000 |
treeherder | autoland@0771c5eab32f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | dholbert |
bugs | 1233605 |
milestone | 46.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/layers/client/ClientLayerManager.cpp +++ b/gfx/layers/client/ClientLayerManager.cpp @@ -185,17 +185,16 @@ ClientLayerManager::BeginTransactionWith MOZ_LAYERS_LOG(("[----- BeginTransaction")); Log(); #endif NS_ASSERTION(!InTransaction(), "Nested transactions not allowed"); mPhase = PHASE_CONSTRUCTION; MOZ_ASSERT(mKeepAlive.IsEmpty(), "uncommitted txn?"); - RefPtr<gfxContext> targetContext = aTarget; // If the last transaction was incomplete (a failed DoEmptyTransaction), // don't signal a new transaction to ShadowLayerForwarder. Carry on adding // to the previous transaction. dom::ScreenOrientationInternal orientation; if (dom::TabChild* window = mWidget->GetOwningTabChild()) { orientation = window->GetOrientation(); } else {
--- a/gfx/layers/client/TiledContentClient.cpp +++ b/gfx/layers/client/TiledContentClient.cpp @@ -1323,18 +1323,16 @@ ClientMultiTiledLayerBuffer::ValidateTil MOZ_ASSERT(!backBufferOnWhite, "Component alpha only supported with TiledDrawTarget"); // We must not keep a reference to the DrawTarget after it has been unlocked, // make sure these are null'd before unlocking as destruction of the context // may cause the target to be flushed. RefPtr<DrawTarget> drawTarget = backBuffer->BorrowDrawTarget(); drawTarget->SetTransform(Matrix()); - RefPtr<gfxContext> ctxt = new gfxContext(drawTarget); - // XXX Perhaps we should just copy the bounding rectangle here? RefPtr<gfx::SourceSurface> source = mSinglePaintDrawTarget->Snapshot(); nsIntRegionRectIterator it(aDirtyRegion); for (const IntRect* dirtyRect = it.Next(); dirtyRect != nullptr; dirtyRect = it.Next()) { #ifdef GFX_TILEDLAYER_PREF_WARNINGS printf_stderr(" break into subdirtyRect %i, %i, %i, %i\n", dirtyRect->x, dirtyRect->y, dirtyRect->width, dirtyRect->height); #endif @@ -1358,17 +1356,16 @@ ClientMultiTiledLayerBuffer::ValidateTil // The new buffer is now validated, remove the dirty region from it. aTile.mInvalidBack.SubOut(offsetScaledDirtyRegion); #ifdef GFX_TILEDLAYER_DEBUG_OVERLAY DrawDebugOverlay(drawTarget, aTileOrigin.x * mResolution, aTileOrigin.y * GetPresShellResolution(), GetTileLength(), GetTileLength()); #endif - ctxt = nullptr; drawTarget = nullptr; nsIntRegion tileRegion = IntRect(aTileOrigin.x, aTileOrigin.y, GetScaledTileSize().width, GetScaledTileSize().height); // Intersect this area with the portion that's invalid. tileRegion.SubOut(GetValidRegion()); tileRegion.SubOut(aDirtyRegion); // Has now been validated
--- a/gfx/thebes/gfxFont.cpp +++ b/gfx/thebes/gfxFont.cpp @@ -1711,18 +1711,19 @@ gfxFont::DrawOneGlyph(uint32_t aGlyphID, if (RenderSVGGlyph(runParams.context, devPt, mode, aGlyphID, fontParams.contextPaint, runParams.callbacks, *aEmittedGlyphs)) { return; } } if (fontParams.haveColorGlyphs && - RenderColorGlyph(runParams.context, fontParams.scaledFont, - fontParams.renderingOptions, fontParams.drawOptions, + RenderColorGlyph(runParams.dt, + fontParams.scaledFont, fontParams.renderingOptions, + fontParams.drawOptions, fontParams.matInv * gfx::Point(devPt.x, devPt.y), aGlyphID)) { return; } aBuffer.OutputGlyph(aGlyphID, devPt); // Synthetic bolding (if required) by multi-striking. @@ -2093,44 +2094,43 @@ gfxFont::RenderSVGGlyph(gfxContext *aCon if (aCallbacks && aEmittedGlyphs) { aCallbacks->NotifyGlyphPathEmitted(); aEmittedGlyphs = false; } return RenderSVGGlyph(aContext, aPoint, aDrawMode, aGlyphId, aContextPaint); } bool -gfxFont::RenderColorGlyph(gfxContext* aContext, +gfxFont::RenderColorGlyph(DrawTarget* aDrawTarget, mozilla::gfx::ScaledFont* scaledFont, GlyphRenderingOptions* aRenderingOptions, mozilla::gfx::DrawOptions aDrawOptions, const mozilla::gfx::Point& aPoint, uint32_t aGlyphId) const { nsAutoTArray<uint16_t, 8> layerGlyphs; nsAutoTArray<mozilla::gfx::Color, 8> layerColors; if (!GetFontEntry()->GetColorLayersInfo(aGlyphId, layerGlyphs, layerColors)) { return false; } - RefPtr<DrawTarget> dt = aContext->GetDrawTarget(); for (uint32_t layerIndex = 0; layerIndex < layerGlyphs.Length(); layerIndex++) { Glyph glyph; glyph.mIndex = layerGlyphs[layerIndex]; glyph.mPosition = aPoint; mozilla::gfx::GlyphBuffer buffer; buffer.mGlyphs = &glyph; buffer.mNumGlyphs = 1; - dt->FillGlyphs(scaledFont, buffer, - ColorPattern(layerColors[layerIndex]), - aDrawOptions, aRenderingOptions); + aDrawTarget->FillGlyphs(scaledFont, buffer, + ColorPattern(layerColors[layerIndex]), + aDrawOptions, aRenderingOptions); } return true; } static void UnionRange(gfxFloat aX, gfxFloat* aDestMin, gfxFloat* aDestMax) { *aDestMin = std::min(*aDestMin, aX);
--- a/gfx/thebes/gfxFont.h +++ b/gfx/thebes/gfxFont.h @@ -2120,17 +2120,17 @@ protected: bool RenderSVGGlyph(gfxContext *aContext, gfxPoint aPoint, DrawMode aDrawMode, uint32_t aGlyphId, gfxTextContextPaint *aContextPaint) const; bool RenderSVGGlyph(gfxContext *aContext, gfxPoint aPoint, DrawMode aDrawMode, uint32_t aGlyphId, gfxTextContextPaint *aContextPaint, gfxTextRunDrawCallbacks *aCallbacks, bool& aEmittedGlyphs) const; - bool RenderColorGlyph(gfxContext* aContext, + bool RenderColorGlyph(DrawTarget* aDrawTarget, mozilla::gfx::ScaledFont* scaledFont, mozilla::gfx::GlyphRenderingOptions* renderingOptions, mozilla::gfx::DrawOptions drawOptions, const mozilla::gfx::Point& aPoint, uint32_t aGlyphId) const; // Bug 674909. When synthetic bolding text by drawing twice, need to // render using a pixel offset in device pixels, otherwise text
--- a/layout/base/FrameLayerBuilder.cpp +++ b/layout/base/FrameLayerBuilder.cpp @@ -5731,25 +5731,25 @@ FrameLayerBuilder::PaintItems(nsTArray<C } } /** * Returns true if it is preferred to draw the list of display * items separately for each rect in the visible region rather * than clipping to a complex region. */ -static bool ShouldDrawRectsSeparately(gfxContext* aContext, DrawRegionClip aClip) +static bool +ShouldDrawRectsSeparately(DrawTarget* aDrawTarget, DrawRegionClip aClip) { if (!gfxPrefs::LayoutPaintRectsSeparately() || aClip == DrawRegionClip::NONE) { return false; } - DrawTarget *dt = aContext->GetDrawTarget(); - return !dt->SupportsRegionClipping(); + return !aDrawTarget->SupportsRegionClipping(); } static void DrawForcedBackgroundColor(DrawTarget& aDrawTarget, Layer* aLayer, nscolor aBackgroundColor) { if (NS_GET_A(aBackgroundColor) > 0) { LayerIntRect r = aLayer->GetVisibleRegion().GetBounds(); @@ -5816,17 +5816,18 @@ FrameLayerBuilder::DrawPaintedLayer(Pain } PaintedDisplayItemLayerUserData* userData = static_cast<PaintedDisplayItemLayerUserData*> (aLayer->GetUserData(&gPaintedDisplayItemLayerUserData)); NS_ASSERTION(userData, "where did our user data go?"); - bool shouldDrawRectsSeparately = ShouldDrawRectsSeparately(aContext, aClip); + bool shouldDrawRectsSeparately = + ShouldDrawRectsSeparately(&aDrawTarget, aClip); if (!shouldDrawRectsSeparately) { if (aClip == DrawRegionClip::DRAW) { gfxUtils::ClipToRegion(aContext, aRegionToDraw); } DrawForcedBackgroundColor(aDrawTarget, aLayer, userData->mForcedBackgroundColor);
--- a/layout/base/nsCSSRendering.cpp +++ b/layout/base/nsCSSRendering.cpp @@ -924,20 +924,19 @@ nsCSSRendering::PaintOutline(nsPresConte // convert the border widths Float outlineWidths[4] = { Float(width / twipsPerPixel), Float(width / twipsPerPixel), Float(width / twipsPerPixel), Float(width / twipsPerPixel) }; // start drawing - gfxContext *ctx = aRenderingContext.ThebesContext(); nsCSSBorderRenderer br(aPresContext->Type(), - ctx->GetDrawTarget(), + aRenderingContext.GetDrawTarget(), oRect, outlineStyles, outlineWidths, outlineRadii, outlineColors, nullptr, bgColor); br.DrawBorders();
--- a/layout/xul/nsTextBoxFrame.cpp +++ b/layout/xul/nsTextBoxFrame.cpp @@ -471,17 +471,16 @@ nsTextBoxFrame::DrawText(nsRenderingCont (wm.IsVerticalRL() ? aTextRect.width - ascent : ascent)); baselinePt.y = aTextRect.y; } else { baselinePt.x = aTextRect.x; baselinePt.y = presContext->RoundAppUnitsToNearestDevPixels(aTextRect.y + ascent); } - RefPtr<gfxContext> ctx = aRenderingContext.ThebesContext(); Point pt(presContext->AppUnitsToGfxUnits(aTextRect.x), presContext->AppUnitsToGfxUnits(aTextRect.y)); Float width = presContext->AppUnitsToGfxUnits(aTextRect.width); gfxFloat ascentPixel = presContext->AppUnitsToGfxUnits(ascent); Float xInFrame = Float(PresContext()->AppUnitsToGfxUnits(mTextDrawRect.x)); gfxRect dirtyRect(presContext->AppUnitsToGfxUnits(aDirtyRect)); // XXX todo: vertical-mode support for decorations not tested yet,