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

Unified Diff: cc/software_renderer.cc

Issue 11967033: [CLOSED] In-browser software compositing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix the lack SkCanvas::clear scissoring. Created 7 years, 11 months 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
« no previous file with comments | « cc/software_renderer.h ('k') | cc/software_renderer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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)
« no previous file with comments | « cc/software_renderer.h ('k') | cc/software_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698