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

Unified Diff: cc/delegated_renderer_layer_impl.cc

Issue 11821015: cc: Use the size of the source frame along with the source frame's renderpasses (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add displaySize() 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
Index: cc/delegated_renderer_layer_impl.cc
diff --git a/cc/delegated_renderer_layer_impl.cc b/cc/delegated_renderer_layer_impl.cc
index e2c3739c3373731bd1b3b2f19562b397d3b89b25..c9c2a4e68e0dac519a0e7430306845b5ad7902e5 100644
--- a/cc/delegated_renderer_layer_impl.cc
+++ b/cc/delegated_renderer_layer_impl.cc
@@ -107,6 +107,11 @@ void DelegatedRendererLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData
RenderPass::Id targetRenderPassId = appendQuadsData.renderPassId;
+ const RenderPass* rootDelegatedRenderPass = m_renderPassesInDrawOrder.back();
+
+ DCHECK(rootDelegatedRenderPass->output_rect.origin().IsOrigin());
+ gfx::Size frameSize = rootDelegatedRenderPass->output_rect.size();
+
// If the index of the renderPassId is 0, then it is a renderPass generated for a layer
// in this compositor, not the delegated renderer. Then we want to merge our root renderPass with
// the target renderPass. Otherwise, it is some renderPass which we added from the delegated
@@ -116,19 +121,18 @@ void DelegatedRendererLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData
// Verify that the renderPass we are appending to is created our renderTarget.
DCHECK(targetRenderPassId.layer_id == renderTarget()->id());
- const RenderPass* rootDelegatedRenderPass = m_renderPassesInDrawOrder.back();
- appendRenderPassQuads(quadSink, appendQuadsData, rootDelegatedRenderPass);
+ appendRenderPassQuads(quadSink, appendQuadsData, rootDelegatedRenderPass, frameSize);
} else {
// Verify that the renderPass we are appending to was created by us.
DCHECK(targetRenderPassId.layer_id == id());
int renderPassIndex = idToIndex(targetRenderPassId.index);
const RenderPass* delegatedRenderPass = m_renderPassesInDrawOrder[renderPassIndex];
- appendRenderPassQuads(quadSink, appendQuadsData, delegatedRenderPass);
+ appendRenderPassQuads(quadSink, appendQuadsData, delegatedRenderPass, frameSize);
}
}
-void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsData, const RenderPass* delegatedRenderPass) const
+void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsData, const RenderPass* delegatedRenderPass, gfx::Size frameSize) const
{
const SharedQuadState* currentSharedQuadState = 0;
SharedQuadState* copiedSharedQuadState = 0;
@@ -145,9 +149,18 @@ void DelegatedRendererLayerImpl::appendRenderPassQuads(QuadSink& quadSink, Appen
// This layer must be drawing to a renderTarget other than itself.
DCHECK(renderTarget() != this);
- copiedSharedQuadState->content_to_target_transform = drawTransform() * copiedSharedQuadState->content_to_target_transform;
- copiedSharedQuadState->clipped_rect_in_target = MathUtil::mapClippedRect(drawTransform(), copiedSharedQuadState->clipped_rect_in_target);
- copiedSharedQuadState->clip_rect = MathUtil::mapClippedRect(drawTransform(), copiedSharedQuadState->clip_rect);
+ // Don't allow areas inside the bounds that are empty.
+ DCHECK(m_displaySize.IsEmpty() || gfx::Rect(m_displaySize).Contains(gfx::Rect(bounds())));
+ gfx::Size displaySize = m_displaySize.IsEmpty() ? bounds() : m_displaySize;
+
+ gfx::Transform delegatedFrameToLayerSpaceTransform;
+ delegatedFrameToLayerSpaceTransform.Scale(
+ static_cast<double>(displaySize.width()) / frameSize.width(),
+ static_cast<double>(displaySize.height()) / frameSize.height());
piman 2013/01/19 02:02:47 perf nit: should we factor out drawTransform() * d
+
+ copiedSharedQuadState->content_to_target_transform = drawTransform() * delegatedFrameToLayerSpaceTransform * copiedSharedQuadState->content_to_target_transform;
+ copiedSharedQuadState->clipped_rect_in_target = MathUtil::mapClippedRect(drawTransform() * delegatedFrameToLayerSpaceTransform, copiedSharedQuadState->clipped_rect_in_target);
+ copiedSharedQuadState->clip_rect = MathUtil::mapClippedRect(drawTransform() * delegatedFrameToLayerSpaceTransform, copiedSharedQuadState->clip_rect);
copiedSharedQuadState->opacity *= drawOpacity();
}
}

Powered by Google App Engine
This is Rietveld 408576698