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

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: tests fixed Created 5 years, 1 month 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/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 0590b357569574b48df9fc8ee1c17b4d828fd70f..f3b2e65595cdccd5af198a38e6005608d4f1d39d 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"
@@ -1227,6 +1228,17 @@ size_t LayerTreeHostImpl::SourceAnimationFrameNumberForTesting() const {
return fps_counter_->current_frame_number();
}
+void LayerTreeHostImpl::SetExternalViewporForTesting(
danakj 2015/11/24 21:17:31 Why aren't callers of this just using SetExternalD
boliu 2015/11/24 23:27:38 external_viewport_ is set in OnDraw now, so this i
danakj 2015/12/10 22:33:54 If you call CalcDrawProps you can pass whatever vi
+ const gfx::Rect& external_viewport) {
+ external_viewport_ = external_viewport;
+}
+
+void LayerTreeHostImpl::SetResourcelessSoftwareDrawForTesting(
+ bool resourceless_software_draw) {
+ resourceless_software_draw_ = resourceless_software_draw;
+ active_tree_->set_needs_update_draw_properties();
+}
+
void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy(
const ManagedMemoryPolicy& policy) {
if (!resource_pool_)
@@ -1424,59 +1436,29 @@ void LayerTreeHostImpl::SetManagedMemoryPolicy(
}
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) {
+ const gfx::Transform& transform_for_tile_priority) {
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_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);
}
- 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();
SetFullRootLayerDamage();
danakj 2015/11/24 21:17:31 Can you explain why this and SetNeedsRedraw() stil
boliu 2015/11/24 23:27:38 Essentially this replaces SetNeedsRedrawRect from
SetNeedsRedraw();
}
-
- if (resourceless_software_draw_changed) {
- client_->OnResourcelessSoftareDrawStateChanged(resourceless_software_draw);
- client_->OnCanDrawStateChanged(CanDraw());
- }
}
void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) {
@@ -1526,8 +1508,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 all changes to draw
danakj 2015/11/24 21:17:30 all changes => any changes
boliu 2015/11/24 23:27:38 Done.
+ // 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() {

Powered by Google App Engine
This is Rietveld 408576698