Index: cc/software_renderer.cc |
diff --git a/cc/software_renderer.cc b/cc/software_renderer.cc |
index 11466da7fedc75fc31ec1f7f31c4dbf9f111950f..01589f468d26f764296f8ef64ad9bc9ad8db2227 100644 |
--- a/cc/software_renderer.cc |
+++ b/cc/software_renderer.cc |
@@ -69,6 +69,7 @@ SoftwareRenderer::SoftwareRenderer(RendererClient* client, ResourceProvider* res |
m_capabilities.usingSetVisibility = true; |
// The updater can access bitmaps while the SoftwareRenderer is using them. |
m_capabilities.allowPartialTextureUpdates = true; |
+ m_capabilities.usingPartialSwap = true; |
viewportChanged(); |
} |
@@ -84,22 +85,22 @@ const RendererCapabilities& SoftwareRenderer::capabilities() const |
void SoftwareRenderer::viewportChanged() |
{ |
- m_outputDevice->DidChangeViewportSize(viewportSize()); |
+ m_outputDevice->Resize(viewportSize()); |
} |
void SoftwareRenderer::beginDrawingFrame(DrawingFrame& frame) |
{ |
TRACE_EVENT0("cc", "SoftwareRenderer::beginDrawingFrame"); |
- m_skRootCanvas = make_scoped_ptr(new SkCanvas(m_outputDevice->Lock(true)->getSkBitmap())); |
+ m_skRootCanvas = m_outputDevice->BeginPaint(); |
} |
void SoftwareRenderer::finishDrawingFrame(DrawingFrame& frame) |
{ |
TRACE_EVENT0("cc", "SoftwareRenderer::finishDrawingFrame"); |
m_currentFramebufferLock.reset(); |
- m_skCurrentCanvas = 0; |
- m_skRootCanvas.reset(); |
- m_outputDevice->Unlock(); |
+ m_skCurrentCanvas = NULL; |
+ m_skRootCanvas = NULL; |
+ m_outputDevice->EndPaint(gfx::ToEnclosingRect(frame.rootDamageRect)); |
} |
bool SoftwareRenderer::flippedFramebuffer() const |
@@ -131,7 +132,7 @@ void SoftwareRenderer::finish() |
void SoftwareRenderer::bindFramebufferToOutputSurface(DrawingFrame& frame) |
{ |
m_currentFramebufferLock.reset(); |
- m_skCurrentCanvas = m_skRootCanvas.get(); |
+ m_skCurrentCanvas = m_skRootCanvas; |
} |
bool SoftwareRenderer::bindFramebufferToTexture(DrawingFrame& frame, const ScopedResource* texture, const gfx::Rect& framebufferRect) |
@@ -156,7 +157,9 @@ void SoftwareRenderer::clearFramebuffer(DrawingFrame& frame) |
} else { |
#ifndef NDEBUG |
// On DEBUG builds, opaque render passes are cleared to blue to easily see regions that were not drawn on the screen. |
- m_skCurrentCanvas->clear(SkColorSetARGB(255, 0, 0, 255)); |
+ SkPaint paint = m_skCurrentPaint; |
+ paint.setColor(SkColorSetARGB(255, 0, 0, 255)); |
+ m_skCurrentCanvas->drawPaint(paint); |
#endif |
} |
} |
@@ -363,12 +366,11 @@ bool SoftwareRenderer::swapBuffers() |
void SoftwareRenderer::getFramebufferPixels(void *pixels, const gfx::Rect& rect) |
{ |
TRACE_EVENT0("cc", "SoftwareRenderer::getFramebufferPixels"); |
- SkBitmap fullBitmap = m_outputDevice->Lock(false)->getSkBitmap(); |
SkBitmap subsetBitmap; |
- SkIRect invertRect = SkIRect::MakeXYWH(rect.x(), viewportSize().height() - rect.bottom(), rect.width(), rect.height()); |
- fullBitmap.extractSubset(&subsetBitmap, invertRect); |
- subsetBitmap.copyPixelsTo(pixels, rect.width() * rect.height() * 4, rect.width() * 4); |
- m_outputDevice->Unlock(); |
+ m_outputDevice->CopyToBitmap(rect, &subsetBitmap); |
+ subsetBitmap.copyPixelsTo(pixels, |
+ 4 * rect.width() * rect.height(), |
+ 4 * rect.width()); |
} |
void SoftwareRenderer::setVisible(bool visible) |