Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1343)

Unified Diff: Source/core/rendering/svg/RenderSVGResourceFilter.cpp

Issue 104023007: Refactoring ImageBuffer to decouple it from Canvas2DLayerBridge (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: build fixes for win+mac Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/rendering/svg/RenderSVGResourceFilter.cpp
diff --git a/Source/core/rendering/svg/RenderSVGResourceFilter.cpp b/Source/core/rendering/svg/RenderSVGResourceFilter.cpp
index 8d44c5cd4deac92629669c90cf7cb4532e19e2b9..e4dec7517a300a38633b5feabe3f6e9ffabe067c 100644
--- a/Source/core/rendering/svg/RenderSVGResourceFilter.cpp
+++ b/Source/core/rendering/svg/RenderSVGResourceFilter.cpp
@@ -28,9 +28,11 @@
#include "core/page/Settings.h"
#include "core/platform/graphics/filters/SourceAlpha.h"
#include "core/platform/graphics/filters/SourceGraphic.h"
+#include "core/platform/graphics/gpu/AcceleratedImageBufferSurface.h"
#include "core/rendering/svg/RenderSVGResourceFilterPrimitive.h"
#include "core/rendering/svg/SVGRenderingContext.h"
#include "core/svg/SVGFilterPrimitiveStandardAttributes.h"
+#include "platform/graphics/UnacceleratedImageBufferSurface.h"
using namespace std;
@@ -115,16 +117,21 @@ bool RenderSVGResourceFilter::fitsInMaximumImageSize(const FloatSize& size, Floa
}
static bool createImageBuffer(const FloatRect& targetRect, const AffineTransform& absoluteTransform,
- OwnPtr<ImageBuffer>& imageBuffer, RenderingMode renderingMode)
+ OwnPtr<ImageBuffer>& imageBuffer, bool accelerated)
{
IntRect paintRect = SVGRenderingContext::calculateImageBufferRect(targetRect, absoluteTransform);
// Don't create empty ImageBuffers.
if (paintRect.isEmpty())
return false;
- OwnPtr<ImageBuffer> image = ImageBuffer::create(paintRect.size(), 1, renderingMode);
- if (!image)
+ OwnPtr<ImageBufferSurface> surface;
+ if (accelerated)
+ surface = adoptPtr(new AcceleratedImageBufferSurface(paintRect.size()));
+ if (!surface || !surface->isValid())
+ surface = adoptPtr(new UnacceleratedImageBufferSurface(paintRect.size()));
+ if (!surface->isValid())
return false;
+ OwnPtr<ImageBuffer> image = adoptPtr(new ImageBuffer(surface.release()));
GraphicsContext* imageContext = image->context();
ASSERT(imageContext);
@@ -230,8 +237,8 @@ bool RenderSVGResourceFilter::applyResource(RenderObject* object, RenderStyle*,
effectiveTransform.multiply(filterData->shearFreeAbsoluteTransform);
OwnPtr<ImageBuffer> sourceGraphic;
- RenderingMode renderingMode = object->document().settings()->acceleratedFiltersEnabled() ? Accelerated : Unaccelerated;
- if (!createImageBuffer(filterData->drawingRegion, effectiveTransform, sourceGraphic, renderingMode)) {
+ bool isAccelerated = object->document().settings()->acceleratedFiltersEnabled();
+ if (!createImageBuffer(filterData->drawingRegion, effectiveTransform, sourceGraphic, isAccelerated)) {
ASSERT(!m_filter.contains(object));
filterData->savedContext = context;
m_filter.set(object, filterData.release());
@@ -239,7 +246,7 @@ bool RenderSVGResourceFilter::applyResource(RenderObject* object, RenderStyle*,
}
// Set the rendering mode from the page's settings.
- filterData->filter->setRenderingMode(renderingMode);
+ filterData->filter->setIsAccelerated(isAccelerated);
GraphicsContext* sourceGraphicContext = sourceGraphic->context();
ASSERT(sourceGraphicContext);

Powered by Google App Engine
This is Rietveld 408576698