Commit d6021f6a authored by bokan@chromium.org's avatar bokan@chromium.org

Combined scale factor and delta updates into one call.

When synchronizing page scale values between trees, setting the page scale
factor and deltas seperately means that the observer functions called when
the page scale factor was changed get called with a transient, incorrect
total page scale factor. This CL combines the seperate methods for updating
the page scale factor and page scale delta into one and updated tree
synchronizations to use this new one-shot function. The old methods remain
but call into the newly added method.

BUG=366249

Review URL: https://codereview.chromium.org/315003009

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276804 0039d316-1c4b-4281-b951-d872f2087c98
parent 7aeb8a93
...@@ -342,10 +342,11 @@ void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) { ...@@ -342,10 +342,11 @@ void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) {
sync_tree->set_sent_page_scale_delta(1.f); sync_tree->set_sent_page_scale_delta(1.f);
} }
sync_tree->SetPageScaleFactorAndLimits(page_scale_factor_, sync_tree->SetPageScaleValues(
page_scale_factor_,
min_page_scale_factor_, min_page_scale_factor_,
max_page_scale_factor_); max_page_scale_factor_,
sync_tree->SetPageScaleDelta(page_scale_delta / sent_page_scale_delta); page_scale_delta / sent_page_scale_delta);
sync_tree->PassSwapPromises(&swap_promise_list_); sync_tree->PassSwapPromises(&swap_promise_list_);
......
...@@ -194,9 +194,8 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) { ...@@ -194,9 +194,8 @@ void LayerTreeImpl::PushPropertiesTo(LayerTreeImpl* target_tree) {
target_tree->PassSwapPromises(&swap_promise_list_); target_tree->PassSwapPromises(&swap_promise_list_);
target_tree->SetPageScaleFactorAndLimits( target_tree->SetPageScaleValues(
page_scale_factor(), min_page_scale_factor(), max_page_scale_factor()); page_scale_factor(), min_page_scale_factor(), max_page_scale_factor(),
target_tree->SetPageScaleDelta(
target_tree->page_scale_delta() / target_tree->sent_page_scale_delta()); target_tree->page_scale_delta() / target_tree->sent_page_scale_delta());
target_tree->set_sent_page_scale_delta(1); target_tree->set_sent_page_scale_delta(1);
...@@ -290,43 +289,38 @@ void ForceScrollbarParameterUpdateAfterScaleChange(LayerImpl* current_layer) { ...@@ -290,43 +289,38 @@ void ForceScrollbarParameterUpdateAfterScaleChange(LayerImpl* current_layer) {
void LayerTreeImpl::SetPageScaleFactorAndLimits(float page_scale_factor, void LayerTreeImpl::SetPageScaleFactorAndLimits(float page_scale_factor,
float min_page_scale_factor, float max_page_scale_factor) { float min_page_scale_factor, float max_page_scale_factor) {
if (!page_scale_factor) SetPageScaleValues(page_scale_factor, min_page_scale_factor,
return; max_page_scale_factor, page_scale_delta_);
}
if (min_page_scale_factor == min_page_scale_factor_ && void LayerTreeImpl::SetPageScaleDelta(float delta) {
max_page_scale_factor == max_page_scale_factor_ && SetPageScaleValues(page_scale_factor_, min_page_scale_factor_,
page_scale_factor == page_scale_factor_) max_page_scale_factor_, delta);
return; }
void LayerTreeImpl::SetPageScaleValues(float page_scale_factor,
float min_page_scale_factor, float max_page_scale_factor,
float page_scale_delta) {
bool page_scale_changed =
min_page_scale_factor != min_page_scale_factor_ ||
max_page_scale_factor != max_page_scale_factor_ ||
page_scale_factor != page_scale_factor_;
min_page_scale_factor_ = min_page_scale_factor; min_page_scale_factor_ = min_page_scale_factor;
max_page_scale_factor_ = max_page_scale_factor; max_page_scale_factor_ = max_page_scale_factor;
page_scale_factor_ = page_scale_factor; page_scale_factor_ = page_scale_factor;
if (root_layer_scroll_offset_delegate_) { float total = page_scale_factor_ * page_scale_delta;
root_layer_scroll_offset_delegate_->UpdateRootLayerState(
TotalScrollOffset(),
TotalMaxScrollOffset(),
ScrollableSize(),
total_page_scale_factor(),
this->min_page_scale_factor(),
this->max_page_scale_factor());
}
ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer());
}
void LayerTreeImpl::SetPageScaleDelta(float delta) {
// Clamp to the current min/max limits.
float total = page_scale_factor_ * delta;
if (min_page_scale_factor_ && total < min_page_scale_factor_) if (min_page_scale_factor_ && total < min_page_scale_factor_)
delta = min_page_scale_factor_ / page_scale_factor_; page_scale_delta = min_page_scale_factor_ / page_scale_factor_;
else if (max_page_scale_factor_ && total > max_page_scale_factor_) else if (max_page_scale_factor_ && total > max_page_scale_factor_)
delta = max_page_scale_factor_ / page_scale_factor_; page_scale_delta = max_page_scale_factor_ / page_scale_factor_;
if (delta == page_scale_delta_) if (page_scale_delta_ == page_scale_delta && !page_scale_changed)
return; return;
page_scale_delta_ = delta; if (page_scale_delta_ != page_scale_delta) {
page_scale_delta_ = page_scale_delta;
if (IsActiveTree()) { if (IsActiveTree()) {
LayerTreeImpl* pending_tree = layer_tree_host_impl_->pending_tree(); LayerTreeImpl* pending_tree = layer_tree_host_impl_->pending_tree();
...@@ -338,6 +332,7 @@ void LayerTreeImpl::SetPageScaleDelta(float delta) { ...@@ -338,6 +332,7 @@ void LayerTreeImpl::SetPageScaleDelta(float delta) {
} }
set_needs_update_draw_properties(); set_needs_update_draw_properties();
}
if (root_layer_scroll_offset_delegate_) { if (root_layer_scroll_offset_delegate_) {
root_layer_scroll_offset_delegate_->UpdateRootLayerState( root_layer_scroll_offset_delegate_->UpdateRootLayerState(
...@@ -345,9 +340,11 @@ void LayerTreeImpl::SetPageScaleDelta(float delta) { ...@@ -345,9 +340,11 @@ void LayerTreeImpl::SetPageScaleDelta(float delta) {
TotalMaxScrollOffset(), TotalMaxScrollOffset(),
ScrollableSize(), ScrollableSize(),
total_page_scale_factor(), total_page_scale_factor(),
min_page_scale_factor(), min_page_scale_factor_,
max_page_scale_factor()); max_page_scale_factor_);
} }
ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer());
} }
gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const { gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const {
......
...@@ -155,6 +155,9 @@ class CC_EXPORT LayerTreeImpl { ...@@ -155,6 +155,9 @@ class CC_EXPORT LayerTreeImpl {
void SetPageScaleFactorAndLimits(float page_scale_factor, void SetPageScaleFactorAndLimits(float page_scale_factor,
float min_page_scale_factor, float max_page_scale_factor); float min_page_scale_factor, float max_page_scale_factor);
void SetPageScaleDelta(float delta); void SetPageScaleDelta(float delta);
void SetPageScaleValues(float page_scale_factor,
float min_page_scale_factor, float max_page_scale_factor,
float page_scale_delta);
float total_page_scale_factor() const { float total_page_scale_factor() const {
return page_scale_factor_ * page_scale_delta_; return page_scale_factor_ * page_scale_delta_;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment