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

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 1418273002: cc: Move draw params from SetExternalDrawConstraints to OnDraw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: EXPECT_SCOPED Created 5 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host_impl.cc
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 974d82116d8c0f81d2fbe4af7c4aa1ae996ee220..d94f6c41aa1950241db724296fe752bba670e834 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -9,6 +9,7 @@
#include <map>
#include <set>
+#include "base/auto_reset.h"
#include "base/basictypes.h"
#include "base/containers/hash_tables.h"
#include "base/containers/small_map.h"
@@ -1453,60 +1454,32 @@ void LayerTreeHostImpl::SetManagedMemoryPolicy(
client_->SetNeedsCommitOnImplThread();
}
-void LayerTreeHostImpl::SetExternalDrawConstraints(
- const gfx::Transform& transform,
- const gfx::Rect& viewport,
- const gfx::Rect& clip,
- const gfx::Rect& viewport_rect_for_tile_priority,
- const gfx::Transform& transform_for_tile_priority,
- bool resourceless_software_draw) {
+void LayerTreeHostImpl::SetExternalTilePriorityConstraints(
+ const gfx::Rect& viewport_rect,
+ const gfx::Transform& transform) {
gfx::Rect viewport_rect_for_tile_priority_in_view_space;
- if (!resourceless_software_draw) {
- gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization);
- if (transform_for_tile_priority.GetInverse(&screen_to_view)) {
- // Convert from screen space to view space.
- viewport_rect_for_tile_priority_in_view_space =
- MathUtil::ProjectEnclosingClippedRect(
- screen_to_view, viewport_rect_for_tile_priority);
- }
+ gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization);
+ if (transform.GetInverse(&screen_to_view)) {
+ // Convert from screen space to view space.
+ viewport_rect_for_tile_priority_in_view_space =
+ MathUtil::ProjectEnclosingClippedRect(screen_to_view, viewport_rect);
}
- const bool transform_changed = external_transform_ != transform;
- const bool viewport_changed = external_viewport_ != viewport;
- const bool clip_changed = external_clip_ != clip;
- const bool resourceless_software_draw_changed =
- resourceless_software_draw_ != resourceless_software_draw;
const bool tile_priority_params_changed =
viewport_rect_for_tile_priority_ !=
viewport_rect_for_tile_priority_in_view_space;
- // UpdateDrawProperties does not depend on clip.
- if (transform_changed || viewport_changed ||
- resourceless_software_draw_changed || tile_priority_params_changed) {
- active_tree_->set_needs_update_draw_properties();
- }
-
- external_transform_ = transform;
- external_viewport_ = viewport;
- external_clip_ = clip;
viewport_rect_for_tile_priority_ =
viewport_rect_for_tile_priority_in_view_space;
- resourceless_software_draw_ = resourceless_software_draw;
-
- // When not toggling resourceless software draw, need to set redraw for
- // all changes to draw parameters. Damage will be set externally by Android
- // WebView for resourceless software draw toggles, so ignored here.
- const bool draw_params_changed = transform_changed || viewport_changed ||
- clip_changed || tile_priority_params_changed;
- if (!resourceless_software_draw_changed && draw_params_changed) {
+
+ if (tile_priority_params_changed) {
+ active_tree_->set_needs_update_draw_properties();
+
+ // Compositor, not OutputSurface, is responsible for setting damage and
+ // triggering redraw for constraint changes.
SetFullRootLayerDamage();
SetNeedsRedraw();
}
-
- if (resourceless_software_draw_changed) {
- client_->OnResourcelessSoftareDrawStateChanged(resourceless_software_draw);
- client_->OnCanDrawStateChanged(CanDraw());
- }
}
void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) {
@@ -1556,8 +1529,53 @@ void LayerTreeHostImpl::ReclaimResources(const CompositorFrameAck* ack) {
}
}
-void LayerTreeHostImpl::OnDraw() {
- client_->OnDrawForOutputSurface();
+void LayerTreeHostImpl::OnDraw(const gfx::Transform& transform,
+ const gfx::Rect& viewport,
+ const gfx::Rect& clip,
+ bool resourceless_software_draw) {
+ DCHECK(!resourceless_software_draw_);
+ const bool transform_changed = external_transform_ != transform;
+ const bool viewport_changed = external_viewport_ != viewport;
+ const bool clip_changed = external_clip_ != clip;
+
+ external_transform_ = transform;
+ external_viewport_ = viewport;
+ external_clip_ = clip;
+
+ {
+ base::AutoReset<bool> resourceless_software_draw_reset(
+ &resourceless_software_draw_, resourceless_software_draw);
+
+ // For resourceless software draw, always set full damage to ensure they
+ // always swap. Otherwise, need to set redraw for any changes to draw
+ // parameters.
+ const bool draw_params_changed =
+ transform_changed || viewport_changed || clip_changed;
+ if (resourceless_software_draw_ || draw_params_changed) {
+ SetFullRootLayerDamage();
+ SetNeedsRedraw();
+ }
+
+ // UpdateDrawProperties does not depend on clip.
+ if (transform_changed || viewport_changed || resourceless_software_draw_) {
+ active_tree_->set_needs_update_draw_properties();
+ }
+
+ if (resourceless_software_draw) {
+ client_->OnCanDrawStateChanged(CanDraw());
+ }
+
+ client_->OnDrawForOutputSurface(resourceless_software_draw_);
+ }
+
+ if (resourceless_software_draw) {
+ active_tree_->set_needs_update_draw_properties();
+ client_->OnCanDrawStateChanged(CanDraw());
+ // This draw may have reset all damage, which would lead to subsequent
+ // incorrect hardware draw, so explicitly set damage for next hardware
+ // draw as well.
+ SetFullRootLayerDamage();
+ }
}
void LayerTreeHostImpl::OnCanDrawStateChangedForTree() {
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698