Changeset 73729 in webkit


Ignore:
Timestamp:
Dec 10, 2010 8:05:12 AM (13 years ago)
Author:
andreas.kling@nokia.com
Message:

2010-12-10 Andreas Kling <kling@webkit.org>

Reviewed by Eric Seidel.

Don't do GraphicsContext save/restore just to preserve the CompositeOperator
https://bugs.webkit.org/show_bug.cgi?id=50070

Add GraphicsContext::compositeOperation() so we don't have to do a full
save/restore if the only context-tainting call is setCompositeOperation().

GraphicsContext::setCompositeOperation() now stores the op in its state
and calls a port-specific setPlatformCompositeOperation().

No new tests, this is an optimization.

  • platform/graphics/GraphicsContext.cpp: (WebCore::GraphicsContext::setCompositeOperation): (WebCore::GraphicsContext::compositeOperation):
  • platform/graphics/GraphicsContext.h:
  • platform/graphics/GraphicsContextPrivate.h: (WebCore::GraphicsContextState::GraphicsContextState):
  • platform/graphics/Image.cpp: (WebCore::Image::fillWithSolidColor):
  • platform/graphics/cairo/GraphicsContextCairo.cpp: (WebCore::GraphicsContext::setPlatformCompositeOperation):
  • platform/graphics/cg/GraphicsContextCG.cpp: (WebCore::GraphicsContext::setPlatformCompositeOperation):
  • platform/graphics/haiku/GraphicsContextHaiku.cpp: (WebCore::GraphicsContext::setPlatformCompositeOperation):
  • platform/graphics/mac/GraphicsContextMac.mm: (WebCore::GraphicsContext::setPlatformCompositeOperation):
  • platform/graphics/openvg/GraphicsContextOpenVG.cpp: (WebCore::GraphicsContext::setPlatformCompositeOperation):
  • platform/graphics/qt/GraphicsContextQt.cpp: (WebCore::GraphicsContext::setPlatformCompositeOperation):
  • platform/graphics/skia/GraphicsContextSkia.cpp: (WebCore::GraphicsContext::setPlatformCompositeOperation):
  • platform/graphics/skia/SkiaUtils.cpp: (WebCore::WebCoreCompositeToSkiaComposite):
  • platform/graphics/wince/GraphicsContextWinCE.cpp: (WebCore::GraphicsContext::setPlatformCompositeOperation):
  • platform/graphics/wx/GraphicsContextWx.cpp: (WebCore::GraphicsContext::setPlatformCompositeOperation):
  • rendering/RenderBoxModelObject.cpp: (WebCore::RenderBoxModelObject::paintFillLayerExtended):
  • rendering/RenderView.cpp: (WebCore::RenderView::paintBoxDecorations):
Location:
trunk/WebCore
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r73728 r73729  
     12010-12-10  Andreas Kling  <kling@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Don't do GraphicsContext save/restore just to preserve the CompositeOperator
     6        https://bugs.webkit.org/show_bug.cgi?id=50070
     7
     8        Add GraphicsContext::compositeOperation() so we don't have to do a full
     9        save/restore if the only context-tainting call is setCompositeOperation().
     10
     11        GraphicsContext::setCompositeOperation() now stores the op in its state
     12        and calls a port-specific setPlatformCompositeOperation().
     13
     14        No new tests, this is an optimization.
     15
     16        * platform/graphics/GraphicsContext.cpp:
     17        (WebCore::GraphicsContext::setCompositeOperation):
     18        (WebCore::GraphicsContext::compositeOperation):
     19        * platform/graphics/GraphicsContext.h:
     20        * platform/graphics/GraphicsContextPrivate.h:
     21        (WebCore::GraphicsContextState::GraphicsContextState):
     22        * platform/graphics/Image.cpp:
     23        (WebCore::Image::fillWithSolidColor):
     24        * platform/graphics/cairo/GraphicsContextCairo.cpp:
     25        (WebCore::GraphicsContext::setPlatformCompositeOperation):
     26        * platform/graphics/cg/GraphicsContextCG.cpp:
     27        (WebCore::GraphicsContext::setPlatformCompositeOperation):
     28        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
     29        (WebCore::GraphicsContext::setPlatformCompositeOperation):
     30        * platform/graphics/mac/GraphicsContextMac.mm:
     31        (WebCore::GraphicsContext::setPlatformCompositeOperation):
     32        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
     33        (WebCore::GraphicsContext::setPlatformCompositeOperation):
     34        * platform/graphics/qt/GraphicsContextQt.cpp:
     35        (WebCore::GraphicsContext::setPlatformCompositeOperation):
     36        * platform/graphics/skia/GraphicsContextSkia.cpp:
     37        (WebCore::GraphicsContext::setPlatformCompositeOperation):
     38        * platform/graphics/skia/SkiaUtils.cpp:
     39        (WebCore::WebCoreCompositeToSkiaComposite):
     40        * platform/graphics/wince/GraphicsContextWinCE.cpp:
     41        (WebCore::GraphicsContext::setPlatformCompositeOperation):
     42        * platform/graphics/wx/GraphicsContextWx.cpp:
     43        (WebCore::GraphicsContext::setPlatformCompositeOperation):
     44        * rendering/RenderBoxModelObject.cpp:
     45        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
     46        * rendering/RenderView.cpp:
     47        (WebCore::RenderView::paintBoxDecorations):
     48
    1492010-12-10  Renata Hodovan  <reni@webkit.org>
    250
  • trunk/WebCore/platform/graphics/GraphicsContext.cpp

    r73728 r73729  
    552552}
    553553
     554void GraphicsContext::setCompositeOperation(CompositeOperator compositeOperation)
     555{
     556    m_state.compositeOperator = compositeOperation;
     557    setPlatformCompositeOperation(compositeOperation);
     558}
     559
     560CompositeOperator GraphicsContext::compositeOperation() const
     561{
     562    return m_state.compositeOperator;
     563}
     564
    554565#if !PLATFORM(SKIA)
    555566void GraphicsContext::setPlatformFillGradient(Gradient*)
  • trunk/WebCore/platform/graphics/GraphicsContext.h

    r73728 r73729  
    163163            , strokeColorSpace(ColorSpaceDeviceRGB)
    164164            , fillColorSpace(ColorSpaceDeviceRGB)
     165            , compositeOperator(CompositeSourceOver)
    165166            , shouldAntialias(true)
    166167            , paintingDisabled(false)
     
    194195        ColorSpace strokeColorSpace;
    195196        ColorSpace fillColorSpace;
     197
     198        CompositeOperator compositeOperator;
    196199
    197200        bool shouldAntialias;
     
    353356
    354357        void setCompositeOperation(CompositeOperator);
     358        CompositeOperator compositeOperation() const;
    355359
    356360#if PLATFORM(SKIA)
     
    499503        void clearPlatformShadow();
    500504
     505        void setPlatformCompositeOperation(CompositeOperator);
     506
    501507        static void adjustLineToPixelBoundaries(FloatPoint& p1, FloatPoint& p2, float strokeWidth, const StrokeStyle&);
    502508
  • trunk/WebCore/platform/graphics/Image.cpp

    r56447 r73729  
    8282        return;
    8383   
    84     ctxt->save();
     84    CompositeOperator previousOperator = ctxt->compositeOperation();
    8585    ctxt->setCompositeOperation(!color.hasAlpha() && op == CompositeSourceOver ? CompositeCopy : op);
    8686    ctxt->fillRect(dstRect, color, styleColorSpace);
    87     ctxt->restore();
     87    ctxt->setCompositeOperation(previousOperator);
    8888}
    8989
  • trunk/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp

    r73728 r73729  
    998998}
    999999
    1000 void GraphicsContext::setCompositeOperation(CompositeOperator op)
     1000void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op)
    10011001{
    10021002    if (paintingDisabled())
  • trunk/WebCore/platform/graphics/cg/GraphicsContextCG.cpp

    r73728 r73729  
    11891189}
    11901190
    1191 #ifndef BUILDING_ON_TIGER // Tiger's setCompositeOperation() is defined in GraphicsContextMac.mm.
    1192 void GraphicsContext::setCompositeOperation(CompositeOperator mode)
     1191#ifndef BUILDING_ON_TIGER // Tiger's setPlatformCompositeOperation() is defined in GraphicsContextMac.mm.
     1192void GraphicsContext::setPlatformCompositeOperation(CompositeOperator mode)
    11931193{
    11941194    if (paintingDisabled())
  • trunk/WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp

    r73728 r73729  
    344344}
    345345
    346 void GraphicsContext::setCompositeOperation(CompositeOperator op)
     346void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op)
    347347{
    348348    if (paintingDisabled())
     
    359359        break;
    360360    default:
    361         printf("GraphicsContext::setCompositeOperation: Unsupported composite operation %s\n",
     361        printf("GraphicsContext::setPlatformCompositeOperation: Unsupported composite operation %s\n",
    362362                compositeOperatorName(op).utf8().data());
    363363    }
  • trunk/WebCore/platform/graphics/mac/GraphicsContextMac.mm

    r72528 r73729  
    8888}
    8989
    90 #ifdef BUILDING_ON_TIGER // Post-Tiger's setCompositeOperation() is defined in GraphicsContextCG.cpp.
    91 void GraphicsContext::setCompositeOperation(CompositeOperator op)
     90#ifdef BUILDING_ON_TIGER // Post-Tiger's setPlatformCompositeOperation() is defined in GraphicsContextCG.cpp.
     91void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op)
    9292{
    9393    if (paintingDisabled())
  • trunk/WebCore/platform/graphics/openvg/GraphicsContextOpenVG.cpp

    r73728 r73729  
    365365}
    366366
    367 void GraphicsContext::setCompositeOperation(CompositeOperator op)
     367void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op)
    368368{
    369369    if (paintingDisabled())
  • trunk/WebCore/platform/graphics/qt/GraphicsContextQt.cpp

    r73728 r73729  
    11311131}
    11321132
    1133 void GraphicsContext::setCompositeOperation(CompositeOperator op)
    1134 {
    1135     if (paintingDisabled())
    1136         return;
    1137 
    1138     if (m_data->p()->paintEngine()->hasFeature(QPaintEngine::PorterDuff))
    1139         m_data->p()->setCompositionMode(toQtCompositionMode(op));
     1133void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op)
     1134{
     1135    if (paintingDisabled())
     1136        return;
     1137
     1138    QPainter* painter = m_data->p();
     1139
     1140    if (!painter->paintEngine()->hasFeature(QPaintEngine::PorterDuff))
     1141        return;
     1142
     1143    painter->setCompositionMode(toQtCompositionMode(op));
    11401144}
    11411145
  • trunk/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp

    r73728 r73729  
    927927}
    928928
    929 void GraphicsContext::setCompositeOperation(CompositeOperator op)
     929void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op)
    930930{
    931931    if (paintingDisabled())
  • trunk/WebCore/platform/graphics/skia/SkiaUtils.cpp

    r63485 r73729  
    7171    }
    7272
    73     SkDEBUGF(("GraphicsContext::setCompositeOperation uknown CompositeOperator %d\n", op));
     73    SkDEBUGF(("GraphicsContext::setPlatformCompositeOperation unknown CompositeOperator %d\n", op));
    7474    return SkXfermode::kSrcOver_Mode; // fall-back
    7575}
  • trunk/WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp

    r73728 r73729  
    11741174}
    11751175
    1176 void GraphicsContext::setCompositeOperation(CompositeOperator op)
     1176void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op)
    11771177{
    11781178    notImplemented();
  • trunk/WebCore/platform/graphics/wx/GraphicsContextWx.cpp

    r73728 r73729  
    443443}
    444444
    445 void GraphicsContext::setCompositeOperation(CompositeOperator op)
     445void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op)
    446446{
    447447    if (m_data->context)
  • trunk/WebCore/rendering/RenderBoxModelObject.cpp

    r72926 r73729  
    672672            Color baseColor = view()->frameView()->baseBackgroundColor();
    673673            if (baseColor.alpha() > 0) {
    674                 context->save();
     674                CompositeOperator previousOperator = context->compositeOperation();
    675675                context->setCompositeOperation(CompositeCopy);
    676676                context->fillRect(rect, baseColor, style()->colorSpace());
    677                 context->restore();
     677                context->setCompositeOperation(previousOperator);
    678678            } else
    679679                context->clearRect(rect);
  • trunk/WebCore/rendering/RenderView.cpp

    r73525 r73729  
    222222        Color baseColor = frameView()->baseBackgroundColor();
    223223        if (baseColor.alpha() > 0) {
    224             paintInfo.context->save();
     224            CompositeOperator previousOperator = paintInfo.context->compositeOperation();
    225225            paintInfo.context->setCompositeOperation(CompositeCopy);
    226226            paintInfo.context->fillRect(paintInfo.rect, baseColor, style()->colorSpace());
    227             paintInfo.context->restore();
     227            paintInfo.context->setCompositeOperation(previousOperator);
    228228        } else
    229229            paintInfo.context->clearRect(paintInfo.rect);
Note: See TracChangeset for help on using the changeset viewer.