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

Side by Side Diff: cc/layers/scrollbar_layer_unittest.cc

Issue 409193002: Avoid div-by-zero in thumb quad computation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « cc/layers/scrollbar_layer_impl_base.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 "base/containers/hash_tables.h" 5 #include "base/containers/hash_tables.h"
6 #include "cc/animation/scrollbar_animation_controller.h" 6 #include "cc/animation/scrollbar_animation_controller.h"
7 #include "cc/layers/append_quads_data.h" 7 #include "cc/layers/append_quads_data.h"
8 #include "cc/layers/painted_scrollbar_layer.h" 8 #include "cc/layers/painted_scrollbar_layer.h"
9 #include "cc/layers/painted_scrollbar_layer_impl.h" 9 #include "cc/layers/painted_scrollbar_layer_impl.h"
10 #include "cc/layers/scrollbar_layer_interface.h" 10 #include "cc/layers/scrollbar_layer_interface.h"
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 // position). 267 // position).
268 scrollbar_layer->fake_scrollbar()->set_track_rect(gfx::Rect(30, 12, 50, 6)); 268 scrollbar_layer->fake_scrollbar()->set_track_rect(gfx::Rect(30, 12, 50, 6));
269 269
270 UPDATE_AND_EXTRACT_LAYER_POINTERS(); 270 UPDATE_AND_EXTRACT_LAYER_POINTERS();
271 EXPECT_EQ(gfx::Rect(44, 0, 6, 4).ToString(), 271 EXPECT_EQ(gfx::Rect(44, 0, 6, 4).ToString(),
272 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); 272 scrollbar_layer_impl->ComputeThumbQuadRect().ToString());
273 } 273 }
274 274
275 TEST(ScrollbarLayerTest, SolidColorDrawQuads) { 275 TEST(ScrollbarLayerTest, SolidColorDrawQuads) {
276 const int kThumbThickness = 3; 276 const int kThumbThickness = 3;
277 const int kTrackStart = 0; 277 const int kTrackStart = 1;
weiliangc 2014/07/22 18:49:46 I don't understand why we need to change TrackStar
Ian Vollick 2014/07/22 18:55:00 It's a good question. I did this so that I can mor
weiliangc 2014/07/22 19:00:12 Ah didn't realize the first test case has 40->39 a
278 const int kTrackLength = 100; 278 const int kTrackLength = 100;
279 279
280 LayerTreeSettings layer_tree_settings; 280 LayerTreeSettings layer_tree_settings;
281 scoped_ptr<FakeLayerTreeHost> host = 281 scoped_ptr<FakeLayerTreeHost> host =
282 FakeLayerTreeHost::Create(layer_tree_settings); 282 FakeLayerTreeHost::Create(layer_tree_settings);
283 283
284 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true)); 284 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true));
285 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( 285 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar(
286 host.get(), scrollbar.Pass(), false, true, kThumbThickness, kTrackStart); 286 host.get(), scrollbar.Pass(), false, true, kThumbThickness, kTrackStart);
287 ScrollbarLayerImplBase* scrollbar_layer_impl = 287 ScrollbarLayerImplBase* scrollbar_layer_impl =
288 static_cast<SolidColorScrollbarLayerImpl*>( 288 static_cast<SolidColorScrollbarLayerImpl*>(
289 layer_impl_tree_root->children()[1]); 289 layer_impl_tree_root->children()[1]);
290 scrollbar_layer_impl->SetBounds(gfx::Size(kTrackLength, kThumbThickness)); 290 scrollbar_layer_impl->SetBounds(gfx::Size(kTrackLength, kThumbThickness));
291 scrollbar_layer_impl->SetCurrentPos(10.f); 291 scrollbar_layer_impl->SetCurrentPos(10.f);
292 scrollbar_layer_impl->SetMaximum(100); 292 scrollbar_layer_impl->SetMaximum(100);
293 scrollbar_layer_impl->SetVisibleToTotalLengthRatio(0.4f); 293 scrollbar_layer_impl->SetVisibleToTotalLengthRatio(0.4f);
294 294
295 // Thickness should be overridden to 3. 295 // Thickness should be overridden to 3.
296 { 296 {
297 MockOcclusionTracker<LayerImpl> occlusion_tracker; 297 MockOcclusionTracker<LayerImpl> occlusion_tracker;
298 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 298 scoped_ptr<RenderPass> render_pass = RenderPass::Create();
299 AppendQuadsData data; 299 AppendQuadsData data;
300 scrollbar_layer_impl->AppendQuads( 300 scrollbar_layer_impl->AppendQuads(
301 render_pass.get(), occlusion_tracker, &data); 301 render_pass.get(), occlusion_tracker, &data);
302 302
303 const QuadList& quads = render_pass->quad_list; 303 const QuadList& quads = render_pass->quad_list;
304 ASSERT_EQ(1u, quads.size()); 304 ASSERT_EQ(1u, quads.size());
305 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material); 305 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material);
306 EXPECT_RECT_EQ(gfx::Rect(6, 0, 40, 3), quads[0]->rect); 306 EXPECT_RECT_EQ(gfx::Rect(6, 0, 39, 3), quads[0]->rect);
307 } 307 }
308 308
309 // Contents scale should scale the draw quad. 309 // Contents scale should scale the draw quad.
310 scrollbar_layer_impl->draw_properties().contents_scale_x = 2.f; 310 scrollbar_layer_impl->draw_properties().contents_scale_x = 2.f;
311 scrollbar_layer_impl->draw_properties().contents_scale_y = 2.f; 311 scrollbar_layer_impl->draw_properties().contents_scale_y = 2.f;
312 { 312 {
313 MockOcclusionTracker<LayerImpl> occlusion_tracker; 313 MockOcclusionTracker<LayerImpl> occlusion_tracker;
314 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 314 scoped_ptr<RenderPass> render_pass = RenderPass::Create();
315 AppendQuadsData data; 315 AppendQuadsData data;
316 scrollbar_layer_impl->AppendQuads( 316 scrollbar_layer_impl->AppendQuads(
317 render_pass.get(), occlusion_tracker, &data); 317 render_pass.get(), occlusion_tracker, &data);
318 318
319 const QuadList& quads = render_pass->quad_list; 319 const QuadList& quads = render_pass->quad_list;
320 ASSERT_EQ(1u, quads.size()); 320 ASSERT_EQ(1u, quads.size());
321 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material); 321 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material);
322 EXPECT_RECT_EQ(gfx::Rect(12, 0, 80, 6), quads[0]->rect); 322 EXPECT_RECT_EQ(gfx::Rect(12, 0, 78, 6), quads[0]->rect);
323 } 323 }
324 scrollbar_layer_impl->draw_properties().contents_scale_x = 1.f; 324 scrollbar_layer_impl->draw_properties().contents_scale_x = 1.f;
325 scrollbar_layer_impl->draw_properties().contents_scale_y = 1.f; 325 scrollbar_layer_impl->draw_properties().contents_scale_y = 1.f;
326 326
327 // For solid color scrollbars, position and size should reflect the 327 // For solid color scrollbars, position and size should reflect the
328 // current viewport state. 328 // current viewport state.
329 scrollbar_layer_impl->SetVisibleToTotalLengthRatio(0.2f); 329 scrollbar_layer_impl->SetVisibleToTotalLengthRatio(0.2f);
330 { 330 {
331 MockOcclusionTracker<LayerImpl> occlusion_tracker; 331 MockOcclusionTracker<LayerImpl> occlusion_tracker;
332 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); 332 scoped_ptr<RenderPass> render_pass = RenderPass::Create();
333 AppendQuadsData data; 333 AppendQuadsData data;
334 scrollbar_layer_impl->AppendQuads( 334 scrollbar_layer_impl->AppendQuads(
335 render_pass.get(), occlusion_tracker, &data); 335 render_pass.get(), occlusion_tracker, &data);
336 336
337 const QuadList& quads = render_pass->quad_list; 337 const QuadList& quads = render_pass->quad_list;
338 ASSERT_EQ(1u, quads.size()); 338 ASSERT_EQ(1u, quads.size());
339 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material); 339 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material);
340 EXPECT_RECT_EQ(gfx::Rect(8, 0, 20, 3), quads[0]->rect); 340 EXPECT_RECT_EQ(gfx::Rect(8, 0, 19, 3), quads[0]->rect);
341 }
342
343 // We shouldn't attempt div-by-zero when the maximum is zero.
344 scrollbar_layer_impl->SetCurrentPos(0.f);
345 scrollbar_layer_impl->SetMaximum(0);
346 {
347 MockOcclusionTracker<LayerImpl> occlusion_tracker;
348 scoped_ptr<RenderPass> render_pass = RenderPass::Create();
349 AppendQuadsData data;
350 scrollbar_layer_impl->AppendQuads(
351 render_pass.get(), occlusion_tracker, &data);
352
353 const QuadList& quads = render_pass->quad_list;
354 ASSERT_EQ(1u, quads.size());
355 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material);
356 EXPECT_RECT_EQ(gfx::Rect(1, 0, 19, 3), quads[0]->rect);
341 } 357 }
342 } 358 }
343 359
344 TEST(ScrollbarLayerTest, LayerDrivenSolidColorDrawQuads) { 360 TEST(ScrollbarLayerTest, LayerDrivenSolidColorDrawQuads) {
345 const int kThumbThickness = 3; 361 const int kThumbThickness = 3;
346 const int kTrackStart = 0; 362 const int kTrackStart = 0;
347 const int kTrackLength = 10; 363 const int kTrackLength = 10;
348 364
349 LayerTreeSettings layer_tree_settings; 365 LayerTreeSettings layer_tree_settings;
350 scoped_ptr<FakeLayerTreeHost> host = 366 scoped_ptr<FakeLayerTreeHost> host =
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 TestScale(gfx::Rect(1240, 0, 15, 1333), 2.7754839f); 909 TestScale(gfx::Rect(1240, 0, 15, 1333), 2.7754839f);
894 TestScale(gfx::Rect(1240, 0, 15, 677), 2.46677136f); 910 TestScale(gfx::Rect(1240, 0, 15, 677), 2.46677136f);
895 911
896 // Horizontal Scrollbars. 912 // Horizontal Scrollbars.
897 TestScale(gfx::Rect(0, 1240, 1333, 15), 2.7754839f); 913 TestScale(gfx::Rect(0, 1240, 1333, 15), 2.7754839f);
898 TestScale(gfx::Rect(0, 1240, 677, 15), 2.46677136f); 914 TestScale(gfx::Rect(0, 1240, 677, 15), 2.46677136f);
899 } 915 }
900 916
901 } // namespace 917 } // namespace
902 } // namespace cc 918 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/scrollbar_layer_impl_base.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698