| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights 
      reserved. | 2  * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights 
      reserved. | 
| 3  * | 3  * | 
| 4  * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4  * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 
| 5  * | 5  * | 
| 6  * Other contributors: | 6  * Other contributors: | 
| 7  *   Robert O'Callahan <roc+@cs.cmu.edu> | 7  *   Robert O'Callahan <roc+@cs.cmu.edu> | 
| 8  *   David Baron <dbaron@fas.harvard.edu> | 8  *   David Baron <dbaron@fas.harvard.edu> | 
| 9  *   Christian Biesinger <cbiesinger@web.de> | 9  *   Christian Biesinger <cbiesinger@web.de> | 
| 10  *   Randall Jesup <rjesup@wgate.com> | 10  *   Randall Jesup <rjesup@wgate.com> | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 69 #include "core/platform/HistogramSupport.h" | 69 #include "core/platform/HistogramSupport.h" | 
| 70 #include "core/platform/PlatformGestureEvent.h" | 70 #include "core/platform/PlatformGestureEvent.h" | 
| 71 #include "core/platform/PlatformMouseEvent.h" | 71 #include "core/platform/PlatformMouseEvent.h" | 
| 72 #include "core/platform/ScrollAnimator.h" | 72 #include "core/platform/ScrollAnimator.h" | 
| 73 #include "core/platform/Scrollbar.h" | 73 #include "core/platform/Scrollbar.h" | 
| 74 #include "core/platform/ScrollbarTheme.h" | 74 #include "core/platform/ScrollbarTheme.h" | 
| 75 #include "core/platform/chromium/TraceEvent.h" | 75 #include "core/platform/chromium/TraceEvent.h" | 
| 76 #include "core/platform/graphics/FloatPoint3D.h" | 76 #include "core/platform/graphics/FloatPoint3D.h" | 
| 77 #include "core/platform/graphics/FloatRect.h" | 77 #include "core/platform/graphics/FloatRect.h" | 
| 78 #include "core/platform/graphics/GraphicsContextStateSaver.h" | 78 #include "core/platform/graphics/GraphicsContextStateSaver.h" | 
|  | 79 #include "core/platform/graphics/filters/ReferenceFilter.h" | 
|  | 80 #include "core/platform/graphics/filters/SourceGraphic.h" | 
| 79 #include "core/platform/graphics/filters/custom/CustomFilterGlobalContext.h" | 81 #include "core/platform/graphics/filters/custom/CustomFilterGlobalContext.h" | 
| 80 #include "core/platform/graphics/filters/custom/CustomFilterOperation.h" | 82 #include "core/platform/graphics/filters/custom/CustomFilterOperation.h" | 
| 81 #include "core/platform/graphics/filters/custom/CustomFilterValidatedProgram.h" | 83 #include "core/platform/graphics/filters/custom/CustomFilterValidatedProgram.h" | 
| 82 #include "core/platform/graphics/filters/custom/ValidatedCustomFilterOperation.h
      " | 84 #include "core/platform/graphics/filters/custom/ValidatedCustomFilterOperation.h
      " | 
| 83 #include "core/platform/graphics/transforms/ScaleTransformOperation.h" | 85 #include "core/platform/graphics/transforms/ScaleTransformOperation.h" | 
| 84 #include "core/platform/graphics/transforms/TransformationMatrix.h" | 86 #include "core/platform/graphics/transforms/TransformationMatrix.h" | 
| 85 #include "core/platform/graphics/transforms/TranslateTransformOperation.h" | 87 #include "core/platform/graphics/transforms/TranslateTransformOperation.h" | 
| 86 #include "core/rendering/ColumnInfo.h" | 88 #include "core/rendering/ColumnInfo.h" | 
| 87 #include "core/rendering/FilterEffectRenderer.h" | 89 #include "core/rendering/FilterEffectRenderer.h" | 
| 88 #include "core/rendering/HitTestRequest.h" | 90 #include "core/rendering/HitTestRequest.h" | 
| 89 #include "core/rendering/HitTestResult.h" | 91 #include "core/rendering/HitTestResult.h" | 
| 90 #include "core/rendering/HitTestingTransformState.h" | 92 #include "core/rendering/HitTestingTransformState.h" | 
| 91 #include "core/rendering/OverlapTestRequestClient.h" | 93 #include "core/rendering/OverlapTestRequestClient.h" | 
| 92 #include "core/rendering/RenderArena.h" | 94 #include "core/rendering/RenderArena.h" | 
| 93 #include "core/rendering/RenderFlowThread.h" | 95 #include "core/rendering/RenderFlowThread.h" | 
| 94 #include "core/rendering/RenderGeometryMap.h" | 96 #include "core/rendering/RenderGeometryMap.h" | 
| 95 #include "core/rendering/RenderInline.h" | 97 #include "core/rendering/RenderInline.h" | 
| 96 #include "core/rendering/RenderLayerBacking.h" | 98 #include "core/rendering/RenderLayerBacking.h" | 
| 97 #include "core/rendering/RenderLayerCompositor.h" | 99 #include "core/rendering/RenderLayerCompositor.h" | 
| 98 #include "core/rendering/RenderReplica.h" | 100 #include "core/rendering/RenderReplica.h" | 
| 99 #include "core/rendering/RenderScrollbar.h" | 101 #include "core/rendering/RenderScrollbar.h" | 
| 100 #include "core/rendering/RenderScrollbarPart.h" | 102 #include "core/rendering/RenderScrollbarPart.h" | 
| 101 #include "core/rendering/RenderTreeAsText.h" | 103 #include "core/rendering/RenderTreeAsText.h" | 
| 102 #include "core/rendering/RenderView.h" | 104 #include "core/rendering/RenderView.h" | 
|  | 105 #include "core/rendering/svg/ReferenceFilterBuilder.h" | 
| 103 #include "core/rendering/svg/RenderSVGResourceClipper.h" | 106 #include "core/rendering/svg/RenderSVGResourceClipper.h" | 
| 104 #include <wtf/MemoryInstrumentationVector.h> | 107 #include <wtf/MemoryInstrumentationVector.h> | 
| 105 #include <wtf/StdLibExtras.h> | 108 #include <wtf/StdLibExtras.h> | 
| 106 #include <wtf/text/CString.h> | 109 #include <wtf/text/CString.h> | 
| 107 #include <wtf/UnusedParam.h> | 110 #include <wtf/UnusedParam.h> | 
| 108 | 111 | 
| 109 #define MIN_INTERSECT_FOR_REVEAL 32 | 112 #define MIN_INTERSECT_FOR_REVEAL 32 | 
| 110 | 113 | 
| 111 using namespace std; | 114 using namespace std; | 
| 112 | 115 | 
| (...skipping 5926 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6039     if (!hasOrHadFilters(oldStyle, newStyle)) | 6042     if (!hasOrHadFilters(oldStyle, newStyle)) | 
| 6040         return; | 6043         return; | 
| 6041 | 6044 | 
| 6042     updateOrRemoveFilterClients(); | 6045     updateOrRemoveFilterClients(); | 
| 6043     // During an accelerated animation, both WebKit and the compositor animate p
      roperties. | 6046     // During an accelerated animation, both WebKit and the compositor animate p
      roperties. | 
| 6044     // However, WebKit shouldn't ask the compositor to update its filters if the
       compositor is performing the animation. | 6047     // However, WebKit shouldn't ask the compositor to update its filters if the
       compositor is performing the animation. | 
| 6045     bool shouldUpdateFilters = isComposited() && !renderer()->animation()->isRun
      ningAcceleratedAnimationOnRenderer(renderer(), CSSPropertyWebkitFilter); | 6048     bool shouldUpdateFilters = isComposited() && !renderer()->animation()->isRun
      ningAcceleratedAnimationOnRenderer(renderer(), CSSPropertyWebkitFilter); | 
| 6046     if (shouldUpdateFilters) | 6049     if (shouldUpdateFilters) | 
| 6047         backing()->updateFilters(renderer()->style()); | 6050         backing()->updateFilters(renderer()->style()); | 
| 6048     updateOrRemoveFilterEffectRenderer(); | 6051     updateOrRemoveFilterEffectRenderer(); | 
| 6049     // FIXME: Accelerated SVG reference filters still rely on FilterEffectRender
      er to build the filter graph. |  | 
| 6050     // Thus, we have to call updateFilters again, after we have a FilterEffectRe
      nderer. |  | 
| 6051     // FilterEffectRenderer is intended to render software filters and shouldn't
       be needed for accelerated filters. |  | 
| 6052     // We should extract the SVG graph building functionality out of FilterEffec
      tRenderer, and it should happen in RenderLayer::computeFilterOperations. |  | 
| 6053     // https://bugs.webkit.org/show_bug.cgi?id=114051 |  | 
| 6054     if (shouldUpdateFilters && newStyle->filter().hasReferenceFilter()) |  | 
| 6055         backing()->updateFilters(renderer()->style()); |  | 
| 6056 } | 6052 } | 
| 6057 | 6053 | 
| 6058 void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle) | 6054 void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle) | 
| 6059 { | 6055 { | 
| 6060     updateIsNormalFlowOnly(); | 6056     updateIsNormalFlowOnly(); | 
| 6061 | 6057 | 
| 6062     updateResizerAreaSet(); | 6058     updateResizerAreaSet(); | 
| 6063     updateScrollbarsAfterStyleChange(oldStyle); | 6059     updateScrollbarsAfterStyleChange(oldStyle); | 
| 6064     updateStackingContextsAfterStyleChange(oldStyle); | 6060     updateStackingContextsAfterStyleChange(oldStyle); | 
| 6065     updateVisibilityAfterStyleChange(oldStyle); | 6061     updateVisibilityAfterStyleChange(oldStyle); | 
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6238 bool RenderLayer::isCSSCustomFilterEnabled() const | 6234 bool RenderLayer::isCSSCustomFilterEnabled() const | 
| 6239 { | 6235 { | 
| 6240     // We only want to enable shaders if WebGL is also enabled on this platform. | 6236     // We only want to enable shaders if WebGL is also enabled on this platform. | 
| 6241     const Settings* settings = renderer()->document()->settings(); | 6237     const Settings* settings = renderer()->document()->settings(); | 
| 6242     return settings && settings->isCSSCustomFilterEnabled() && settings->webGLEn
      abled(); | 6238     return settings && settings->isCSSCustomFilterEnabled() && settings->webGLEn
      abled(); | 
| 6243 } | 6239 } | 
| 6244 | 6240 | 
| 6245 FilterOperations RenderLayer::computeFilterOperations(const RenderStyle* style) | 6241 FilterOperations RenderLayer::computeFilterOperations(const RenderStyle* style) | 
| 6246 { | 6242 { | 
| 6247     const FilterOperations& filters = style->filter(); | 6243     const FilterOperations& filters = style->filter(); | 
|  | 6244     if (filters.hasReferenceFilter()) { | 
|  | 6245         for (size_t i = 0; i < filters.size(); ++i) { | 
|  | 6246             FilterOperation* filterOperation = filters.operations().at(i).get(); | 
|  | 6247             if (filterOperation->getOperationType() != FilterOperation::REFERENC
      E) | 
|  | 6248                 continue; | 
|  | 6249             ReferenceFilterOperation* referenceOperation = static_cast<Reference
      FilterOperation*>(filterOperation); | 
|  | 6250             // FIXME: Cache the ReferenceFilter if it didn't change. | 
|  | 6251             RefPtr<ReferenceFilter> referenceFilter = ReferenceFilter::create(); | 
|  | 6252             float zoom = style->effectiveZoom(); | 
|  | 6253             referenceFilter->setFilterResolution(FloatSize(zoom, zoom)); | 
|  | 6254             referenceFilter->setLastEffect(ReferenceFilterBuilder::build(referen
      ceFilter.get(), renderer(), referenceFilter->sourceGraphic(), | 
|  | 6255                 referenceOperation)); | 
|  | 6256             referenceOperation->setFilter(referenceFilter.release()); | 
|  | 6257         } | 
|  | 6258     } | 
|  | 6259 | 
| 6248     if (!filters.hasCustomFilter()) | 6260     if (!filters.hasCustomFilter()) | 
| 6249         return filters; | 6261         return filters; | 
| 6250 | 6262 | 
| 6251     if (!isCSSCustomFilterEnabled()) { | 6263     if (!isCSSCustomFilterEnabled()) { | 
| 6252         // CSS Custom filters should not parse at all in this case, but there mi
      ght be | 6264         // CSS Custom filters should not parse at all in this case, but there mi
      ght be | 
| 6253         // remaining styles that were parsed when the flag was enabled. Reproduc
      es in DumpRenderTree | 6265         // remaining styles that were parsed when the flag was enabled. Reproduc
      es in DumpRenderTree | 
| 6254         // because it resets the flag while the previous test is still loaded. | 6266         // because it resets the flag while the previous test is still loaded. | 
| 6255         return FilterOperations(); | 6267         return FilterOperations(); | 
| 6256     } | 6268     } | 
| 6257 | 6269 | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6303 { | 6315 { | 
| 6304     // FilterEffectRenderer is only used to render the filters in software mode, | 6316     // FilterEffectRenderer is only used to render the filters in software mode, | 
| 6305     // so we always need to run updateOrRemoveFilterEffectRenderer after the com
      posited | 6317     // so we always need to run updateOrRemoveFilterEffectRenderer after the com
      posited | 
| 6306     // mode might have changed for this layer. | 6318     // mode might have changed for this layer. | 
| 6307     if (!paintsWithFilters()) { | 6319     if (!paintsWithFilters()) { | 
| 6308         // Don't delete the whole filter info here, because we might use it | 6320         // Don't delete the whole filter info here, because we might use it | 
| 6309         // for loading CSS shader files. | 6321         // for loading CSS shader files. | 
| 6310         if (RenderLayerFilterInfo* filterInfo = this->filterInfo()) | 6322         if (RenderLayerFilterInfo* filterInfo = this->filterInfo()) | 
| 6311             filterInfo->setRenderer(0); | 6323             filterInfo->setRenderer(0); | 
| 6312 | 6324 | 
| 6313         // FIXME: Accelerated SVG reference filters shouldn't rely on FilterEffe
      ctRenderer to build the filter graph. | 6325         return; | 
| 6314         // https://bugs.webkit.org/show_bug.cgi?id=114051 |  | 
| 6315 |  | 
| 6316         // Early-return only if we *don't* have reference filters. |  | 
| 6317         // For reference filters, we still want the FilterEffect graph built |  | 
| 6318         // for us, even if we're composited. |  | 
| 6319         if (!renderer()->style()->filter().hasReferenceFilter()) |  | 
| 6320             return; |  | 
| 6321     } | 6326     } | 
| 6322 | 6327 | 
| 6323     RenderLayerFilterInfo* filterInfo = ensureFilterInfo(); | 6328     RenderLayerFilterInfo* filterInfo = ensureFilterInfo(); | 
| 6324     if (!filterInfo->renderer()) { | 6329     if (!filterInfo->renderer()) { | 
| 6325         RefPtr<FilterEffectRenderer> filterRenderer = FilterEffectRenderer::crea
      te(); | 6330         RefPtr<FilterEffectRenderer> filterRenderer = FilterEffectRenderer::crea
      te(); | 
| 6326         RenderingMode renderingMode = renderer()->frame()->page()->settings()->a
      cceleratedFiltersEnabled() ? Accelerated : Unaccelerated; | 6331         RenderingMode renderingMode = renderer()->frame()->page()->settings()->a
      cceleratedFiltersEnabled() ? Accelerated : Unaccelerated; | 
| 6327         filterRenderer->setRenderingMode(renderingMode); | 6332         filterRenderer->setRenderingMode(renderingMode); | 
| 6328         filterInfo->setRenderer(filterRenderer.release()); | 6333         filterInfo->setRenderer(filterRenderer.release()); | 
| 6329 | 6334 | 
| 6330         // We can optimize away code paths in other places if we know that there
       are no software filters. | 6335         // We can optimize away code paths in other places if we know that there
       are no software filters. | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6382     } | 6387     } | 
| 6383 } | 6388 } | 
| 6384 | 6389 | 
| 6385 void showLayerTree(const WebCore::RenderObject* renderer) | 6390 void showLayerTree(const WebCore::RenderObject* renderer) | 
| 6386 { | 6391 { | 
| 6387     if (!renderer) | 6392     if (!renderer) | 
| 6388         return; | 6393         return; | 
| 6389     showLayerTree(renderer->enclosingLayer()); | 6394     showLayerTree(renderer->enclosingLayer()); | 
| 6390 } | 6395 } | 
| 6391 #endif | 6396 #endif | 
| OLD | NEW | 
|---|