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

Unified Diff: cc/delegated_renderer_layer_impl.cc

Issue 12340095: cc: Make damage on delegated frame damage the host layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit Created 7 years, 10 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/delegated_renderer_layer_impl.h ('k') | cc/layer_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/delegated_renderer_layer_impl.cc
diff --git a/cc/delegated_renderer_layer_impl.cc b/cc/delegated_renderer_layer_impl.cc
index 85920f326f54d23008260febcc045e8443e9eda7..a8cdd549d1fbbe70d8165d28aa903c8e479606e9 100644
--- a/cc/delegated_renderer_layer_impl.cc
+++ b/cc/delegated_renderer_layer_impl.cc
@@ -5,6 +5,7 @@
#include "cc/delegated_renderer_layer_impl.h"
#include "cc/append_quads_data.h"
+#include "cc/delegated_frame_data.h"
#include "cc/layer_tree_impl.h"
#include "cc/math_util.h"
#include "cc/quad_sink.h"
@@ -35,6 +36,46 @@ bool DelegatedRendererLayerImpl::hasContributingDelegatedRenderPasses() const {
return render_passes_in_draw_order_.size() > 1;
}
+void DelegatedRendererLayerImpl::SetFrameData(
+ scoped_ptr<DelegatedFrameData> frame_data,
+ gfx::RectF damage_in_frame) {
+ CreateChildIdIfNeeded();
+ DCHECK(child_id_);
+
+ // Display size is already set so we can compute what the damage rect
+ // will be in layer space.
+ RenderPass* new_root_pass = frame_data->render_pass_list.empty() ?
+ NULL : frame_data->render_pass_list.back();
+ bool new_frame_is_empty = !new_root_pass;
+
+ RenderPass* old_root_pass = render_passes_in_draw_order_.empty() ?
+ NULL : render_passes_in_draw_order_.back();
+ bool old_frame_is_empty = !old_root_pass;
+
+ gfx::RectF damage_in_layer;
+ if (new_frame_is_empty) {
+ if (!old_frame_is_empty)
+ damage_in_layer = gfx::Rect(bounds());
+ } else {
+ DCHECK(!new_root_pass->output_rect.IsEmpty());
+ damage_in_layer = MathUtil::mapClippedRect(
+ DelegatedFrameToLayerSpaceTransform(new_root_pass->output_rect.size()),
+ damage_in_frame);
+ }
+ setUpdateRect(gfx::UnionRects(updateRect(), damage_in_layer));
+
+ // TODO(danakj): Convert the resource ids the render passes and return data
+ // for a frame ack.
+ SetRenderPasses(frame_data->render_pass_list);
+}
+
+void DelegatedRendererLayerImpl::SetDisplaySize(gfx::Size size) {
+ if (display_size_ == size)
+ return;
+ display_size_ = size;
+ noteLayerPropertyChanged();
+}
+
void DelegatedRendererLayerImpl::SetRenderPasses(
ScopedPtrVector<RenderPass>& render_passes_in_draw_order) {
gfx::RectF old_root_damage;
@@ -73,6 +114,17 @@ void DelegatedRendererLayerImpl::didLoseOutputSurface() {
ClearChildId();
}
+gfx::Transform DelegatedRendererLayerImpl::DelegatedFrameToLayerSpaceTransform(
+ gfx::Size frame_size) const {
+ gfx::Size display_size = display_size_.IsEmpty() ? bounds() : display_size_;
+
+ gfx::Transform delegated_frame_to_layer_space_transform;
+ delegated_frame_to_layer_space_transform.Scale(
+ static_cast<double>(display_size.width()) / frame_size.width(),
+ static_cast<double>(display_size.height()) / frame_size.height());
+ return delegated_frame_to_layer_space_transform;
+}
+
static inline int IndexToId(int index) { return index + 1; }
static inline int IdToIndex(int id) { return id - 1; }
@@ -171,16 +223,8 @@ void DelegatedRendererLayerImpl::AppendRenderPassQuads(
// Don't allow areas inside the bounds that are empty.
DCHECK(display_size_.IsEmpty() ||
gfx::Rect(display_size_).Contains(gfx::Rect(bounds())));
- gfx::Size display_size =
- display_size_.IsEmpty() ? bounds() : display_size_;
-
- gfx::Transform delegated_frame_to_layer_space_transform;
- delegated_frame_to_layer_space_transform.Scale(
- static_cast<double>(display_size.width()) / frame_size.width(),
- static_cast<double>(display_size.height()) / frame_size.height());
-
gfx::Transform delegated_frame_to_target_transform =
- drawTransform() * delegated_frame_to_layer_space_transform;
+ drawTransform() * DelegatedFrameToLayerSpaceTransform(frame_size);
output_shared_quad_state->content_to_target_transform.ConcatTransform(
delegated_frame_to_target_transform);
« no previous file with comments | « cc/delegated_renderer_layer_impl.h ('k') | cc/layer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698