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

Side by Side Diff: cc/trees/layer_tree_host_unittest_scroll.cc

Issue 2641023002: cc: Remove ReflectedMainFrameState. (Closed)
Patch Set: Created 3 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 unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_in_process.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 2039 matching lines...) Expand 10 before | Expand all | Expand 10 after
2050 void AfterTest() override {} 2050 void AfterTest() override {}
2051 2051
2052 private: 2052 private:
2053 gfx::ScrollOffset initial_scroll_; 2053 gfx::ScrollOffset initial_scroll_;
2054 gfx::ScrollOffset second_scroll_; 2054 gfx::ScrollOffset second_scroll_;
2055 gfx::Vector2dF scroll_amount_; 2055 gfx::Vector2dF scroll_amount_;
2056 }; 2056 };
2057 2057
2058 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostScrollTestPropertyTreeUpdate); 2058 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostScrollTestPropertyTreeUpdate);
2059 2059
2060 class LayerTreeHostScrollTestAppliesReflectedDeltas
2061 : public LayerTreeHostScrollTest {
2062 public:
2063 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
2064
2065 void SetupTree() override {
2066 LayerTreeHostScrollTest::SetupTree();
2067
2068 gfx::Size scroll_layer_bounds(200, 200);
2069 layer_tree()->outer_viewport_scroll_layer()->SetBounds(scroll_layer_bounds);
2070 layer_tree()->outer_viewport_scroll_layer()->SetScrollOffset(
2071 initial_offset_);
2072 layer_tree()->outer_viewport_scroll_layer()->set_did_scroll_callback(
2073 base::Bind(&LayerTreeHostScrollTestAppliesReflectedDeltas::
2074 DidScrollOuterViewport,
2075 base::Unretained(this)));
2076
2077 layer_tree()->SetPageScaleFactorAndLimits(initial_page_scale_, 0.f, 1.f);
2078 }
2079
2080 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override {
2081 LayerImpl* outer_viewport_layer = host_impl->OuterViewportScrollLayer();
2082
2083 switch (host_impl->active_tree()->source_frame_number()) {
2084 case 0: {
2085 // We have the first tree, so let's scroll the outer viewport layer and
2086 // change the page scale.
2087 outer_viewport_layer->ScrollBy(outer_viewport_offset_deltas_[0]);
2088 last_active_offset_ = outer_viewport_layer->CurrentScrollOffset();
2089
2090 host_impl->active_tree()->page_scale_factor()->SetCurrent(
2091 initial_page_scale_ * page_scale_update_);
2092 last_page_scale_ =
2093 host_impl->active_tree()->current_page_scale_factor();
2094
2095 PostSetNeedsCommitToMainThread();
2096 } break;
2097 case 1:
2098 // The scroll offset on the active tree should remain unchanged.
2099 EXPECT_EQ(last_active_offset_,
2100 outer_viewport_layer->CurrentScrollOffset());
2101 EXPECT_EQ(last_page_scale_,
2102 host_impl->active_tree()->current_page_scale_factor());
2103
2104 // Scroll again to make sure that only the delta applied in this frame
2105 // is reported to the main thread.
2106 outer_viewport_layer->ScrollBy(outer_viewport_offset_deltas_[1]);
2107 last_active_offset_ = outer_viewport_layer->CurrentScrollOffset();
2108
2109 PostSetNeedsCommitToMainThread();
2110 break;
2111 case 2:
2112 // The scroll offset on the active tree should remain unchanged.
2113 EXPECT_EQ(last_active_offset_,
2114 outer_viewport_layer->CurrentScrollOffset());
2115 EXPECT_EQ(last_page_scale_,
2116 host_impl->active_tree()->current_page_scale_factor());
2117
2118 // One last frame to make sure we reach consistent state.
2119 PostSetNeedsCommitToMainThread();
2120 break;
2121 case 3:
2122 // The scroll offset on the active tree should remain unchanged.
2123 EXPECT_EQ(last_active_offset_,
2124 outer_viewport_layer->CurrentScrollOffset());
2125 EXPECT_EQ(last_page_scale_,
2126 host_impl->active_tree()->current_page_scale_factor());
2127
2128 EndTest();
2129 break;
2130 }
2131 }
2132
2133 void WillCommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
2134 LayerTreeImpl* sync_tree = host_impl->sync_tree();
2135 LayerImpl* outer_viewport_layer = sync_tree->OuterViewportScrollLayer();
2136 TransformNode* node = sync_tree->property_trees()->transform_tree.Node(
2137 outer_viewport_layer->transform_tree_index());
2138
2139 switch (host_impl->sync_tree()->source_frame_number()) {
2140 case 1:
2141 case 2:
2142 // Pushing page scale/scroll offset from the main thread should have
2143 // resulted in a request to update draw properties. This is necessary
2144 // to ensure that the draw properties are recomputed on the pending
2145 // tree post-commit, since the property trees update on the main thread
2146 // did not include the additionally reflected delta.
2147 EXPECT_TRUE(host_impl->sync_tree()->needs_update_draw_properties());
2148 EXPECT_TRUE(node->needs_local_transform_update);
2149 break;
2150 }
2151 }
2152
2153 void BeginMainFrame(const BeginFrameArgs& args) override {
2154 switch (layer_tree_host()->SourceFrameNumber()) {
2155 case 1:
2156 // Pretend that we could not apply the deltas this frame and send them
2157 // back to the impl thread.
2158 layer_tree()->outer_viewport_scroll_layer()->SetScrollOffset(
2159 initial_offset_);
2160 layer_tree()->SetPageScaleFactorAndLimits(initial_page_scale_, 0.f,
2161 1.f);
2162
2163 SendReflectedMainFrameState(0);
2164 break;
2165 case 2:
2166 // Pretend that the previous delta was handled and now reflect back the
2167 // new delta.
2168 layer_tree()->outer_viewport_scroll_layer()->SetScrollOffset(
2169 gfx::ScrollOffsetWithDelta(initial_offset_,
2170 outer_viewport_offset_deltas_[0]));
2171 layer_tree()->SetPageScaleFactorAndLimits(
2172 initial_page_scale_ * page_scale_update_, 0.f, 1.f);
2173
2174 SendReflectedMainFrameState(1);
2175 break;
2176 case 3:
2177 // Reflect all the deltas on the tree during the main frame itself.
2178 gfx::ScrollOffset scroll_offset =
2179 layer_tree()->outer_viewport_scroll_layer()->scroll_offset();
2180 layer_tree()->outer_viewport_scroll_layer()->SetScrollOffset(
2181 gfx::ScrollOffsetWithDelta(scroll_offset,
2182 outer_viewport_offset_deltas_[1]));
2183 break;
2184 }
2185 }
2186
2187 void DidScrollOuterViewport() {
2188 Layer* outer_viewport_layer = layer_tree()->outer_viewport_scroll_layer();
2189 gfx::ScrollOffset expected_offset;
2190 switch (layer_tree_host()->SourceFrameNumber()) {
2191 case 0:
2192 NOTREACHED();
2193 case 1:
2194 expected_offset = gfx::ScrollOffsetWithDelta(
2195 initial_offset_, outer_viewport_offset_deltas_[0]);
2196 EXPECT_EQ(outer_viewport_layer->scroll_offset(), expected_offset);
2197 break;
2198 case 2:
2199 // Since the first delta was reflected back and not applied on the main
2200 // thread, the value here should only include the delta from the second
2201 // update.
2202 expected_offset = gfx::ScrollOffsetWithDelta(
2203 initial_offset_, outer_viewport_offset_deltas_[1]);
2204 EXPECT_EQ(outer_viewport_layer->scroll_offset(), expected_offset);
2205 break;
2206 default:
2207 NOTREACHED();
2208 }
2209 }
2210
2211 void AfterTest() override {}
2212
2213 private:
2214 void SendReflectedMainFrameState(int delta_to_reflect) {
2215 std::unique_ptr<ReflectedMainFrameState> reflected_main_frame_state =
2216 base::MakeUnique<ReflectedMainFrameState>();
2217
2218 ReflectedMainFrameState::ScrollUpdate scroll_update;
2219 scroll_update.layer_id = layer_tree()->outer_viewport_scroll_layer()->id();
2220 scroll_update.scroll_delta =
2221 outer_viewport_offset_deltas_[delta_to_reflect];
2222 reflected_main_frame_state->scrolls.push_back(scroll_update);
2223
2224 if (delta_to_reflect == 0)
2225 reflected_main_frame_state->page_scale_delta = page_scale_update_;
2226
2227 layer_tree_host_in_process()->SetReflectedMainFrameState(
2228 std::move(reflected_main_frame_state));
2229 }
2230
2231 // Accessed on the impl thread.
2232 gfx::ScrollOffset last_active_offset_;
2233 float last_page_scale_ = 0.f;
2234
2235 const gfx::ScrollOffset initial_offset_ = gfx::ScrollOffset(2, 3);
2236 const gfx::Vector2dF outer_viewport_offset_deltas_[2] = {
2237 gfx::Vector2dF(10, 3), gfx::Vector2dF(5, 3)};
2238
2239 const float initial_page_scale_ = 0.5f;
2240 const float page_scale_update_ = 0.2f;
2241 };
2242
2243 // The reflected deltas are supported in threaded mode only.
2244 MULTI_THREAD_TEST_F(LayerTreeHostScrollTestAppliesReflectedDeltas);
2245
2246 } // namespace 2060 } // namespace
2247 } // namespace cc 2061 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_in_process.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698