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

Side by Side Diff: cc/occlusion_tracker_unittest.cc

Issue 11871008: cc: Stop using drawableContentRect for occlusion. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « cc/occlusion_tracker.cc ('k') | cc/quad_culler.cc » ('j') | 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/occlusion_tracker.h" 5 #include "cc/occlusion_tracker.h"
6 6
7 #include "cc/layer.h" 7 #include "cc/layer.h"
8 #include "cc/layer_animation_controller.h" 8 #include "cc/layer_animation_controller.h"
9 #include "cc/layer_impl.h" 9 #include "cc/layer_impl.h"
10 #include "cc/layer_tree_host_common.h" 10 #include "cc/layer_tree_host_common.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 }; 82 };
83 83
84 static inline bool layerImplDrawTransformIsUnknown(const Layer* layer) { return layer->drawTransformIsAnimating(); } 84 static inline bool layerImplDrawTransformIsUnknown(const Layer* layer) { return layer->drawTransformIsAnimating(); }
85 static inline bool layerImplDrawTransformIsUnknown(const LayerImpl*) { return fa lse; } 85 static inline bool layerImplDrawTransformIsUnknown(const LayerImpl*) { return fa lse; }
86 86
87 template<typename LayerType, typename RenderSurfaceType> 87 template<typename LayerType, typename RenderSurfaceType>
88 class TestOcclusionTrackerWithClip : public TestOcclusionTrackerBase<LayerType, RenderSurfaceType> { 88 class TestOcclusionTrackerWithClip : public TestOcclusionTrackerBase<LayerType, RenderSurfaceType> {
89 public: 89 public:
90 TestOcclusionTrackerWithClip(gfx::Rect viewportRect, bool recordMetricsForFr ame = false) 90 TestOcclusionTrackerWithClip(gfx::Rect viewportRect, bool recordMetricsForFr ame = false)
91 : TestOcclusionTrackerBase<LayerType, RenderSurfaceType>(viewportRect, r ecordMetricsForFrame) 91 : TestOcclusionTrackerBase<LayerType, RenderSurfaceType>(viewportRect, r ecordMetricsForFrame)
92 , m_overrideLayerClipRect(false)
93 { 92 {
94 } 93 }
95 94
96 void setLayerClipRect(const gfx::Rect& rect) { m_overrideLayerClipRect = tru e; m_layerClipRect = rect;}
97 void useDefaultLayerClipRect() { m_overrideLayerClipRect = false; }
98 // Returns true if the given rect in content space for the layer is fully oc cluded in either screen space or the layer's target surface.
99 bool occludedLayer(const LayerType* layer, const gfx::Rect& contentRect, boo l* hasOcclusionFromOutsideTargetSurface = 0) const 95 bool occludedLayer(const LayerType* layer, const gfx::Rect& contentRect, boo l* hasOcclusionFromOutsideTargetSurface = 0) const
100 { 96 {
101 return this->occluded(layer->renderTarget(), contentRect, layer->drawTra nsform(), layerImplDrawTransformIsUnknown(layer), layerClipRectInTarget(layer), hasOcclusionFromOutsideTargetSurface); 97 return this->occluded(layer->renderTarget(), contentRect, layer->drawTra nsform(), layerImplDrawTransformIsUnknown(layer), layer->isClipped(), layer->cli pRect(), hasOcclusionFromOutsideTargetSurface);
102 } 98 }
103 // Gives an unoccluded sub-rect of |contentRect| in the content space of the layer. Simple wrapper around unoccludedContentRect. 99 // Gives an unoccluded sub-rect of |contentRect| in the content space of the layer. Simple wrapper around unoccludedContentRect.
104 gfx::Rect unoccludedLayerContentRect(const LayerType* layer, const gfx::Rect & contentRect, bool* hasOcclusionFromOutsideTargetSurface = 0) const 100 gfx::Rect unoccludedLayerContentRect(const LayerType* layer, const gfx::Rect & contentRect, bool* hasOcclusionFromOutsideTargetSurface = 0) const
105 { 101 {
106 return this->unoccludedContentRect(layer->renderTarget(), contentRect, l ayer->drawTransform(), layerImplDrawTransformIsUnknown(layer), layerClipRectInTa rget(layer), hasOcclusionFromOutsideTargetSurface); 102 return this->unoccludedContentRect(layer->renderTarget(), contentRect, l ayer->drawTransform(), layerImplDrawTransformIsUnknown(layer), layer->isClipped( ), layer->clipRect(), hasOcclusionFromOutsideTargetSurface);
107 } 103 }
108
109
110 protected:
111 virtual gfx::Rect layerClipRectInTarget(const LayerType* layer) const { retu rn m_overrideLayerClipRect ? m_layerClipRect : OcclusionTrackerBase<LayerType, R enderSurfaceType>::layerClipRectInTarget(layer); }
112
113 private:
114 bool m_overrideLayerClipRect;
115 gfx::Rect m_layerClipRect;
116 }; 104 };
117 105
118 struct OcclusionTrackerTestMainThreadTypes { 106 struct OcclusionTrackerTestMainThreadTypes {
119 typedef Layer LayerType; 107 typedef Layer LayerType;
120 typedef LayerTreeHost HostType; 108 typedef LayerTreeHost HostType;
121 typedef RenderSurface RenderSurfaceType; 109 typedef RenderSurface RenderSurfaceType;
122 typedef TestContentLayer ContentLayerType; 110 typedef TestContentLayer ContentLayerType;
123 typedef scoped_refptr<Layer> LayerPtrType; 111 typedef scoped_refptr<Layer> LayerPtrType;
124 typedef scoped_refptr<ContentLayerType> ContentLayerPtrType; 112 typedef scoped_refptr<ContentLayerType> ContentLayerPtrType;
125 typedef LayerIterator<Layer, std::vector<scoped_refptr<Layer> >, RenderSurfa ce, LayerIteratorActions::FrontToBack> TestLayerIterator; 113 typedef LayerIterator<Layer, std::vector<scoped_refptr<Layer> >, RenderSurfa ce, LayerIteratorActions::FrontToBack> TestLayerIterator;
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 466
479 void runMyTest() 467 void runMyTest()
480 { 468 {
481 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::PointF(0, 0), gfx::Size(200, 200)); 469 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::PointF(0, 0), gfx::Size(200, 200));
482 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true); 470 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true);
483 typename Types::ContentLayerType* layer = this->createDrawingLayer(paren t, this->identityMatrix, gfx::PointF(30, 30), gfx::Size(500, 500), true); 471 typename Types::ContentLayerType* layer = this->createDrawingLayer(paren t, this->identityMatrix, gfx::PointF(30, 30), gfx::Size(500, 500), true);
484 parent->setMasksToBounds(true); 472 parent->setMasksToBounds(true);
485 this->calcDrawEtc(root); 473 this->calcDrawEtc(root);
486 474
487 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 475 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
488 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
489 476
490 this->visitLayer(layer, occlusion); 477 this->visitLayer(layer, occlusion);
491 this->enterLayer(parent, occlusion); 478 this->enterLayer(parent, occlusion);
492 479
493 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 480 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
494 EXPECT_EQ(gfx::Rect(30, 30, 70, 70).ToString(), occlusion.occlusionFromI nsideTarget().ToString()); 481 EXPECT_EQ(gfx::Rect(30, 30, 70, 70).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
495 482
496 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 30, 70, 70))); 483 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 30, 70, 70)));
497 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(29, 30, 70, 70))) ; 484 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(29, 30, 70, 70))) ;
498 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 29, 70, 70))) ; 485 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 29, 70, 70))) ;
499 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(31, 30, 70, 70))) ;
500 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 31, 70, 70))) ;
501
502 occlusion.useDefaultLayerClipRect();
503 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 30, 70, 70)));
504 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(29, 30, 70, 70))) ;
505 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 29, 70, 70))) ;
506 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(31, 30, 70, 70))); 486 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(31, 30, 70, 70)));
507 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 31, 70, 70))); 487 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 31, 70, 70)));
508 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
509 488
510 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 3 0, 70, 70)).IsEmpty()); 489 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 3 0, 70, 70)).IsEmpty());
511 EXPECT_RECT_EQ(gfx::Rect(29, 30, 1, 70), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 30, 70, 70))); 490 EXPECT_RECT_EQ(gfx::Rect(29, 30, 1, 70), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 30, 70, 70)));
512 EXPECT_RECT_EQ(gfx::Rect(29, 29, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(29, 29, 70, 70))); 491 EXPECT_RECT_EQ(gfx::Rect(29, 29, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(29, 29, 70, 70)));
513 EXPECT_RECT_EQ(gfx::Rect(30, 29, 70, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(30, 29, 70, 70))); 492 EXPECT_RECT_EQ(gfx::Rect(30, 29, 70, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(30, 29, 70, 70)));
514 EXPECT_RECT_EQ(gfx::Rect(31, 29, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(31, 29, 70, 70))); 493 EXPECT_RECT_EQ(gfx::Rect(31, 29, 69, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(31, 29, 70, 70)));
515 EXPECT_RECT_EQ(gfx::Rect(100, 30, 1, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(31, 30, 70, 70))); 494 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(31, 30, 70, 70)));
516 EXPECT_RECT_EQ(gfx::Rect(31, 31, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(31, 31, 70, 70))); 495 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(31, 31, 70, 70)));
517 EXPECT_RECT_EQ(gfx::Rect(30, 100, 70, 1), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(30, 31, 70, 70))); 496 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 31, 70, 70)));
518 EXPECT_RECT_EQ(gfx::Rect(29, 31, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(29, 31, 70, 70))); 497 EXPECT_RECT_EQ(gfx::Rect(29, 31, 1, 69), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 31, 70, 70)));
519 } 498 }
520 }; 499 };
521 500
522 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestIdentityTransforms); 501 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestIdentityTransforms);
523 502
524 template<class Types> 503 template<class Types>
525 class OcclusionTrackerTestQuadsMismatchLayer : public OcclusionTrackerTest<Types > { 504 class OcclusionTrackerTestQuadsMismatchLayer : public OcclusionTrackerTest<Types > {
526 protected: 505 protected:
527 OcclusionTrackerTestQuadsMismatchLayer(bool opaqueLayers) : OcclusionTracker Test<Types>(opaqueLayers) {} 506 OcclusionTrackerTestQuadsMismatchLayer(bool opaqueLayers) : OcclusionTracker Test<Types>(opaqueLayers) {}
528 void runMyTest() 507 void runMyTest()
(...skipping 15 matching lines...) Expand all
544 EXPECT_EQ(gfx::Rect(20, 20, 50, 50).ToString(), occlusion.occlusionFromI nsideTarget().ToString()); 523 EXPECT_EQ(gfx::Rect(20, 20, 50, 50).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
545 524
546 // This checks cases where the quads don't match their "containing" 525 // This checks cases where the quads don't match their "containing"
547 // layers, e.g. in terms of transforms or clip rect. This is typical for 526 // layers, e.g. in terms of transforms or clip rect. This is typical for
548 // DelegatedRendererLayer. 527 // DelegatedRendererLayer.
549 528
550 gfx::Transform quadTransform; 529 gfx::Transform quadTransform;
551 quadTransform.Translate(30, 30); 530 quadTransform.Translate(30, 30);
552 gfx::Rect clipRectInTarget(0, 0, 100, 100); 531 gfx::Rect clipRectInTarget(0, 0, 100, 100);
553 532
554 EXPECT_TRUE(occlusion.unoccludedContentRect(parent, gfx::Rect(0, 0, 10, 10), quadTransform, false, clipRectInTarget).IsEmpty()); 533 EXPECT_TRUE(occlusion.unoccludedContentRect(parent, gfx::Rect(0, 0, 10, 10), quadTransform, false, true, clipRectInTarget).IsEmpty());
555 EXPECT_RECT_EQ(gfx::Rect(0, 0, 10, 10), occlusion.unoccludedContentRect( parent, gfx::Rect(0, 0, 10, 10), quadTransform, true, clipRectInTarget)); 534 EXPECT_RECT_EQ(gfx::Rect(0, 0, 10, 10), occlusion.unoccludedContentRect( parent, gfx::Rect(0, 0, 10, 10), quadTransform, true, true, clipRectInTarget));
556 EXPECT_RECT_EQ(gfx::Rect(40, 40, 10, 10), occlusion.unoccludedContentRec t(parent, gfx::Rect(40, 40, 10, 10), quadTransform, false, clipRectInTarget)); 535 EXPECT_RECT_EQ(gfx::Rect(40, 40, 10, 10), occlusion.unoccludedContentRec t(parent, gfx::Rect(40, 40, 10, 10), quadTransform, false, true, clipRectInTarge t));
557 EXPECT_RECT_EQ(gfx::Rect(40, 30, 5, 10), occlusion.unoccludedContentRect (parent, gfx::Rect(35, 30, 10, 10), quadTransform, false, clipRectInTarget)); 536 EXPECT_RECT_EQ(gfx::Rect(40, 30, 5, 10), occlusion.unoccludedContentRect (parent, gfx::Rect(35, 30, 10, 10), quadTransform, false, true, clipRectInTarget ));
558 EXPECT_RECT_EQ(gfx::Rect(40, 40, 5, 5), occlusion.unoccludedContentRect( parent, gfx::Rect(40, 40, 10, 10), quadTransform, false, gfx::Rect(0, 0, 75, 75) )); 537 EXPECT_RECT_EQ(gfx::Rect(40, 40, 5, 5), occlusion.unoccludedContentRect( parent, gfx::Rect(40, 40, 10, 10), quadTransform, false, true, gfx::Rect(0, 0, 7 5, 75)));
559 } 538 }
560 }; 539 };
561 540
562 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestQuadsMismatchLayer); 541 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestQuadsMismatchLayer);
563 542
564 template<class Types> 543 template<class Types>
565 class OcclusionTrackerTestRotatedChild : public OcclusionTrackerTest<Types> { 544 class OcclusionTrackerTestRotatedChild : public OcclusionTrackerTest<Types> {
566 protected: 545 protected:
567 OcclusionTrackerTestRotatedChild(bool opaqueLayers) : OcclusionTrackerTest<T ypes>(opaqueLayers) {} 546 OcclusionTrackerTestRotatedChild(bool opaqueLayers) : OcclusionTrackerTest<T ypes>(opaqueLayers) {}
568 void runMyTest() 547 void runMyTest()
569 { 548 {
570 gfx::Transform layerTransform; 549 gfx::Transform layerTransform;
571 layerTransform.Translate(250, 250); 550 layerTransform.Translate(250, 250);
572 layerTransform.Rotate(90); 551 layerTransform.Rotate(90);
573 layerTransform.Translate(-250, -250); 552 layerTransform.Translate(-250, -250);
574 553
575 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::Point(0, 0), gfx::Size(200, 200)); 554 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::Point(0, 0), gfx::Size(200, 200));
576 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true); 555 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true);
577 typename Types::ContentLayerType* layer = this->createDrawingLayer(paren t, layerTransform, gfx::PointF(30, 30), gfx::Size(500, 500), true); 556 typename Types::ContentLayerType* layer = this->createDrawingLayer(paren t, layerTransform, gfx::PointF(30, 30), gfx::Size(500, 500), true);
578 parent->setMasksToBounds(true); 557 parent->setMasksToBounds(true);
579 this->calcDrawEtc(root); 558 this->calcDrawEtc(root);
580 559
581 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 560 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
582 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
583 561
584 this->visitLayer(layer, occlusion); 562 this->visitLayer(layer, occlusion);
585 this->enterLayer(parent, occlusion); 563 this->enterLayer(parent, occlusion);
586 564
587 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 565 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
588 EXPECT_EQ(gfx::Rect(30, 30, 70, 70).ToString(), occlusion.occlusionFromI nsideTarget().ToString()); 566 EXPECT_EQ(gfx::Rect(30, 30, 70, 70).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
589 567
590 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 30, 70, 70))); 568 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 30, 70, 70)));
591 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(29, 30, 70, 70))) ; 569 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(29, 30, 70, 70))) ;
592 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 29, 70, 70))) ; 570 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 29, 70, 70))) ;
593 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(31, 30, 70, 70))) ;
594 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 31, 70, 70))) ;
595
596 occlusion.useDefaultLayerClipRect();
597 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 30, 70, 70)));
598 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(29, 30, 70, 70))) ;
599 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 29, 70, 70))) ;
600 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(31, 30, 70, 70))); 571 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(31, 30, 70, 70)));
601 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 31, 70, 70))); 572 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 31, 70, 70)));
602 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
603 573
604 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 3 0, 70, 70)).IsEmpty()); 574 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 3 0, 70, 70)).IsEmpty());
605 EXPECT_RECT_EQ(gfx::Rect(29, 30, 1, 70), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 30, 70, 70))); 575 EXPECT_RECT_EQ(gfx::Rect(29, 30, 1, 70), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 30, 70, 70)));
606 EXPECT_RECT_EQ(gfx::Rect(29, 29, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(29, 29, 70, 70))); 576 EXPECT_RECT_EQ(gfx::Rect(29, 29, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(29, 29, 70, 70)));
607 EXPECT_RECT_EQ(gfx::Rect(30, 29, 70, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(30, 29, 70, 70))); 577 EXPECT_RECT_EQ(gfx::Rect(30, 29, 70, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(30, 29, 70, 70)));
608 EXPECT_RECT_EQ(gfx::Rect(31, 29, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(31, 29, 70, 70))); 578 EXPECT_RECT_EQ(gfx::Rect(31, 29, 69, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(31, 29, 70, 70)));
609 EXPECT_RECT_EQ(gfx::Rect(100, 30, 1, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(31, 30, 70, 70))); 579 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(31, 30, 70, 70)));
610 EXPECT_RECT_EQ(gfx::Rect(31, 31, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(31, 31, 70, 70))); 580 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(31, 31, 70, 70)));
611 EXPECT_RECT_EQ(gfx::Rect(30, 100, 70, 1), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(30, 31, 70, 70))); 581 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 31, 70, 70)));
612 EXPECT_RECT_EQ(gfx::Rect(29, 31, 70, 70), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(29, 31, 70, 70))); 582 EXPECT_RECT_EQ(gfx::Rect(29, 31, 1, 69), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 31, 70, 70)));
613 } 583 }
614 }; 584 };
615 585
616 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestRotatedChild); 586 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestRotatedChild);
617 587
618 template<class Types> 588 template<class Types>
619 class OcclusionTrackerTestTranslatedChild : public OcclusionTrackerTest<Types> { 589 class OcclusionTrackerTestTranslatedChild : public OcclusionTrackerTest<Types> {
620 protected: 590 protected:
621 OcclusionTrackerTestTranslatedChild(bool opaqueLayers) : OcclusionTrackerTes t<Types>(opaqueLayers) {} 591 OcclusionTrackerTestTranslatedChild(bool opaqueLayers) : OcclusionTrackerTes t<Types>(opaqueLayers) {}
622 void runMyTest() 592 void runMyTest()
623 { 593 {
624 gfx::Transform layerTransform; 594 gfx::Transform layerTransform;
625 layerTransform.Translate(20, 20); 595 layerTransform.Translate(20, 20);
626 596
627 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::PointF(0, 0), gfx::Size(200, 200)); 597 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::PointF(0, 0), gfx::Size(200, 200));
628 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true); 598 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true);
629 typename Types::ContentLayerType* layer = this->createDrawingLayer(paren t, layerTransform, gfx::PointF(30, 30), gfx::Size(500, 500), true); 599 typename Types::ContentLayerType* layer = this->createDrawingLayer(paren t, layerTransform, gfx::PointF(30, 30), gfx::Size(500, 500), true);
630 parent->setMasksToBounds(true); 600 parent->setMasksToBounds(true);
631 this->calcDrawEtc(root); 601 this->calcDrawEtc(root);
632 602
633 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 603 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
634 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
635 604
636 this->visitLayer(layer, occlusion); 605 this->visitLayer(layer, occlusion);
637 this->enterLayer(parent, occlusion); 606 this->enterLayer(parent, occlusion);
638 607
639 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 608 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
640 EXPECT_EQ(gfx::Rect(50, 50, 50, 50).ToString(), occlusion.occlusionFromI nsideTarget().ToString()); 609 EXPECT_EQ(gfx::Rect(50, 50, 50, 50).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
641 610
642 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(50, 50, 50, 50))); 611 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(50, 50, 50, 50)));
643 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(49, 50, 50, 50))) ; 612 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(49, 50, 50, 50))) ;
644 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(50, 49, 50, 50))) ; 613 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(50, 49, 50, 50))) ;
645 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(51, 50, 50, 50))) ;
646 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(50, 51, 50, 50))) ;
647
648 occlusion.useDefaultLayerClipRect();
649 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(50, 50, 50, 50)));
650 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(49, 50, 50, 50))) ;
651 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(50, 49, 50, 50))) ;
652 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(51, 50, 50, 50))); 614 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(51, 50, 50, 50)));
653 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(50, 51, 50, 50))); 615 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(50, 51, 50, 50)));
654 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
655 616
656 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(50, 5 0, 50, 50)).IsEmpty()); 617 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(50, 5 0, 50, 50)).IsEmpty());
657 EXPECT_RECT_EQ(gfx::Rect(49, 50, 1, 50), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(49, 50, 50, 50))); 618 EXPECT_RECT_EQ(gfx::Rect(49, 50, 1, 50), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(49, 50, 50, 50)));
658 EXPECT_RECT_EQ(gfx::Rect(49, 49, 50, 50), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(49, 49, 50, 50))); 619 EXPECT_RECT_EQ(gfx::Rect(49, 49, 50, 50), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(49, 49, 50, 50)));
659 EXPECT_RECT_EQ(gfx::Rect(50, 49, 50, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(50, 49, 50, 50)));
660 EXPECT_RECT_EQ(gfx::Rect(51, 49, 50, 50), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(51, 49, 50, 50)));
661 EXPECT_RECT_EQ(gfx::Rect(100, 50, 1, 50), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(51, 50, 50, 50)));
662 EXPECT_RECT_EQ(gfx::Rect(51, 51, 50, 50), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(51, 51, 50, 50)));
663 EXPECT_RECT_EQ(gfx::Rect(50, 100, 50, 1), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(50, 51, 50, 50)));
664 EXPECT_RECT_EQ(gfx::Rect(49, 51, 50, 50), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(49, 51, 50, 50)));
665
666 occlusion.useDefaultLayerClipRect();
667 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(50, 5 0, 50, 50)).IsEmpty());
668 EXPECT_RECT_EQ(gfx::Rect(49, 50, 1, 50), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(49, 50, 50, 50)));
669 EXPECT_RECT_EQ(gfx::Rect(49, 49, 50, 50), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(49, 49, 50, 50)));
670 EXPECT_RECT_EQ(gfx::Rect(50, 49, 50, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(50, 49, 50, 50))); 620 EXPECT_RECT_EQ(gfx::Rect(50, 49, 50, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(50, 49, 50, 50)));
671 EXPECT_RECT_EQ(gfx::Rect(51, 49, 49, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(51, 49, 50, 50))); 621 EXPECT_RECT_EQ(gfx::Rect(51, 49, 49, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(51, 49, 50, 50)));
672 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(51, 5 0, 50, 50)).IsEmpty()); 622 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(51, 5 0, 50, 50)).IsEmpty());
673 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(51, 5 1, 50, 50)).IsEmpty()); 623 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(51, 5 1, 50, 50)).IsEmpty());
674 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(50, 5 1, 50, 50)).IsEmpty()); 624 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(50, 5 1, 50, 50)).IsEmpty());
675 EXPECT_RECT_EQ(gfx::Rect(49, 51, 1, 49), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(49, 51, 50, 50))); 625 EXPECT_RECT_EQ(gfx::Rect(49, 51, 1, 49), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(49, 51, 50, 50)));
676 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
677 } 626 }
678 }; 627 };
679 628
680 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestTranslatedChild); 629 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestTranslatedChild);
681 630
682 template<class Types> 631 template<class Types>
683 class OcclusionTrackerTestChildInRotatedChild : public OcclusionTrackerTest<Type s> { 632 class OcclusionTrackerTestChildInRotatedChild : public OcclusionTrackerTest<Type s> {
684 protected: 633 protected:
685 OcclusionTrackerTestChildInRotatedChild(bool opaqueLayers) : OcclusionTracke rTest<Types>(opaqueLayers) {} 634 OcclusionTrackerTestChildInRotatedChild(bool opaqueLayers) : OcclusionTracke rTest<Types>(opaqueLayers) {}
686 void runMyTest() 635 void runMyTest()
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 parent->setMasksToBounds(true); 748 parent->setMasksToBounds(true);
800 typename Types::LayerType* child = this->createLayer(parent, childTransf orm, gfx::PointF(30, 30), gfx::Size(500, 500)); 749 typename Types::LayerType* child = this->createLayer(parent, childTransf orm, gfx::PointF(30, 30), gfx::Size(500, 500));
801 child->setMasksToBounds(true); 750 child->setMasksToBounds(true);
802 typename Types::ContentLayerType* layer = this->createDrawingLayer(child , this->identityMatrix, gfx::PointF(10, 10), gfx::Size(500, 500), true); 751 typename Types::ContentLayerType* layer = this->createDrawingLayer(child , this->identityMatrix, gfx::PointF(10, 10), gfx::Size(500, 500), true);
803 // |child2| makes |parent|'s surface get considered by OcclusionTracker first, instead of |child|'s. This exercises different code in 752 // |child2| makes |parent|'s surface get considered by OcclusionTracker first, instead of |child|'s. This exercises different code in
804 // leaveToTargetRenderSurface, as the target surface has already been se en. 753 // leaveToTargetRenderSurface, as the target surface has already been se en.
805 typename Types::ContentLayerType* child2 = this->createDrawingLayer(pare nt, this->identityMatrix, gfx::PointF(30, 30), gfx::Size(60, 20), true); 754 typename Types::ContentLayerType* child2 = this->createDrawingLayer(pare nt, this->identityMatrix, gfx::PointF(30, 30), gfx::Size(60, 20), true);
806 this->calcDrawEtc(root); 755 this->calcDrawEtc(root);
807 756
808 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 757 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
809 occlusion.setLayerClipRect(gfx::Rect(-10, -10, 1000, 1000));
810 758
811 this->visitLayer(child2, occlusion); 759 this->visitLayer(child2, occlusion);
812 760
813 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 761 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
814 EXPECT_EQ(gfx::Rect(30, 30, 60, 20).ToString(), occlusion.occlusionFromI nsideTarget().ToString()); 762 EXPECT_EQ(gfx::Rect(30, 30, 60, 20).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
815 763
816 this->visitLayer(layer, occlusion); 764 this->visitLayer(layer, occlusion);
817 765
818 EXPECT_EQ(gfx::Rect(0, 440, 20, 60).ToString(), occlusion.occlusionFromO utsideTarget().ToString()); 766 EXPECT_EQ(gfx::Rect(0, 440, 20, 60).ToString(), occlusion.occlusionFromO utsideTarget().ToString());
819 EXPECT_EQ(gfx::Rect(10, 430, 60, 70).ToString(), occlusion.occlusionFrom InsideTarget().ToString()); 767 EXPECT_EQ(gfx::Rect(10, 430, 60, 70).ToString(), occlusion.occlusionFrom InsideTarget().ToString());
(...skipping 30 matching lines...) Expand all
850 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 3 1, 60, 10)).IsEmpty()); 798 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 3 1, 60, 10)).IsEmpty());
851 799
852 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 4 0, 70, 60)).IsEmpty()); 800 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 4 0, 70, 60)).IsEmpty());
853 EXPECT_RECT_EQ(gfx::Rect(29, 40, 1, 60), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 40, 70, 60))); 801 EXPECT_RECT_EQ(gfx::Rect(29, 40, 1, 60), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 40, 70, 60)));
854 // This rect is mostly occluded by |child2|. 802 // This rect is mostly occluded by |child2|.
855 EXPECT_RECT_EQ(gfx::Rect(90, 39, 10, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(30, 39, 70, 60))); 803 EXPECT_RECT_EQ(gfx::Rect(90, 39, 10, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(30, 39, 70, 60)));
856 // This rect extends past top/right ends of |child2|. 804 // This rect extends past top/right ends of |child2|.
857 EXPECT_RECT_EQ(gfx::Rect(30, 29, 70, 11), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(30, 29, 70, 70))); 805 EXPECT_RECT_EQ(gfx::Rect(30, 29, 70, 11), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(30, 29, 70, 70)));
858 // This rect extends past left/right ends of |child2|. 806 // This rect extends past left/right ends of |child2|.
859 EXPECT_RECT_EQ(gfx::Rect(20, 39, 80, 60), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(20, 39, 80, 60))); 807 EXPECT_RECT_EQ(gfx::Rect(20, 39, 80, 60), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(20, 39, 80, 60)));
860 EXPECT_RECT_EQ(gfx::Rect(100, 40, 1, 60), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(31, 40, 70, 60))); 808 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(31, 40, 70, 60)));
861 EXPECT_RECT_EQ(gfx::Rect(30, 100, 70, 1), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(30, 41, 70, 60))); 809 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 41, 70, 60)));
862 810
863 /* Justification for the above occlusion from |layer|: 811 /* Justification for the above occlusion from |layer|:
864 100 812 100
865 +---------------------+ +-------- -------------+ 813 +---------------------+ +-------- -------------+
866 | | | |30 Visible region of |layer|: ///// 814 | | | |30 Visible region of |layer|: /////
867 | 30 | rotate(90) | 30 60 | |child2|: \\\\\ 815 | 30 | rotate(90) | 30 60 | |child2|: \\\\\
868 | 30 + ------------+--------------------+ | 30 +-- ----------+--------------------+ 816 | 30 + ------------+--------------------+ | 30 +-- ----------+--------------------+
869 100 | | 10 | | | ==> | |\\ \\\\\\\\\\| |10 | 817 100 | | 10 | | | ==> | |\\ \\\\\\\\\\| |10 |
870 | |10+----------|----------------------+ | +--|\\ \\\\\\\\\\|-----------------+ | 818 | |10+----------|----------------------+ | +--|\\ \\\\\\\\\\|-----------------+ |
871 | + ------------+ | | | | | +-- ----------+//| 420 | | 819 | + ------------+ | | | | | +-- ----------+//| 420 | |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 layerTransform.Translate(10, 10); 852 layerTransform.Translate(10, 10);
905 853
906 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::PointF(0, 0), gfx::Size(1000, 1000)); 854 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::PointF(0, 0), gfx::Size(1000, 1000));
907 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true); 855 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true);
908 typename Types::LayerType* child = this->createLayer(parent, childTransf orm, gfx::PointF(30, 30), gfx::Size(500, 500)); 856 typename Types::LayerType* child = this->createLayer(parent, childTransf orm, gfx::PointF(30, 30), gfx::Size(500, 500));
909 child->setMasksToBounds(true); 857 child->setMasksToBounds(true);
910 typename Types::ContentLayerType* layer = this->createDrawingLayer(child , layerTransform, gfx::PointF(0, 0), gfx::Size(500, 500), true); 858 typename Types::ContentLayerType* layer = this->createDrawingLayer(child , layerTransform, gfx::PointF(0, 0), gfx::Size(500, 500), true);
911 this->calcDrawEtc(root); 859 this->calcDrawEtc(root);
912 860
913 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 861 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
914 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
915 862
916 gfx::Rect clippedLayerInChild = MathUtil::mapClippedRect(layerTransform, layer->visibleContentRect()); 863 gfx::Rect clippedLayerInChild = MathUtil::mapClippedRect(layerTransform, layer->visibleContentRect());
917 864
918 this->visitLayer(layer, occlusion); 865 this->visitLayer(layer, occlusion);
919 this->enterContributingSurface(child, occlusion); 866 this->enterContributingSurface(child, occlusion);
920 867
921 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 868 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
922 EXPECT_EQ(clippedLayerInChild.ToString(), occlusion.occlusionFromInsideT arget().ToString()); 869 EXPECT_EQ(clippedLayerInChild.ToString(), occlusion.occlusionFromInsideT arget().ToString());
923 870
924 this->leaveContributingSurface(child, occlusion); 871 this->leaveContributingSurface(child, occlusion);
(...skipping 23 matching lines...) Expand all
948 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::PointF(0, 0), gfx::Size(1000, 1000)); 895 typename Types::ContentLayerType* root = this->createRoot(this->identity Matrix, gfx::PointF(0, 0), gfx::Size(1000, 1000));
949 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true); 896 typename Types::ContentLayerType* parent = this->createDrawingLayer(root , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true);
950 parent->setMasksToBounds(true); 897 parent->setMasksToBounds(true);
951 typename Types::ContentLayerType* child = this->createDrawingLayer(paren t, childTransform, gfx::PointF(30, 30), gfx::Size(500, 500), false); 898 typename Types::ContentLayerType* child = this->createDrawingLayer(paren t, childTransform, gfx::PointF(30, 30), gfx::Size(500, 500), false);
952 child->setMasksToBounds(true); 899 child->setMasksToBounds(true);
953 typename Types::ContentLayerType* layer1 = this->createDrawingLayer(chil d, this->identityMatrix, gfx::PointF(10, 10), gfx::Size(500, 500), true); 900 typename Types::ContentLayerType* layer1 = this->createDrawingLayer(chil d, this->identityMatrix, gfx::PointF(10, 10), gfx::Size(500, 500), true);
954 typename Types::ContentLayerType* layer2 = this->createDrawingLayer(chil d, this->identityMatrix, gfx::PointF(10, 450), gfx::Size(500, 60), true); 901 typename Types::ContentLayerType* layer2 = this->createDrawingLayer(chil d, this->identityMatrix, gfx::PointF(10, 450), gfx::Size(500, 60), true);
955 this->calcDrawEtc(root); 902 this->calcDrawEtc(root);
956 903
957 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 904 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
958 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
959 905
960 this->visitLayer(layer2, occlusion); 906 this->visitLayer(layer2, occlusion);
961 this->visitLayer(layer1, occlusion); 907 this->visitLayer(layer1, occlusion);
962 this->visitLayer(child, occlusion); 908 this->visitLayer(child, occlusion);
963 this->enterContributingSurface(child, occlusion); 909 this->enterContributingSurface(child, occlusion);
964 910
965 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 911 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
966 EXPECT_EQ(gfx::Rect(10, 430, 60, 70).ToString(), occlusion.occlusionFrom InsideTarget().ToString()); 912 EXPECT_EQ(gfx::Rect(10, 430, 60, 70).ToString(), occlusion.occlusionFrom InsideTarget().ToString());
967 913
968 EXPECT_TRUE(occlusion.occludedLayer(child, gfx::Rect(10, 430, 60, 70))); 914 EXPECT_TRUE(occlusion.occludedLayer(child, gfx::Rect(10, 430, 60, 70)));
(...skipping 16 matching lines...) Expand all
985 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 931 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
986 EXPECT_EQ(gfx::Rect(30, 40, 70, 60).ToString(), occlusion.occlusionFromI nsideTarget().ToString()); 932 EXPECT_EQ(gfx::Rect(30, 40, 70, 60).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
987 933
988 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 40, 70, 60))); 934 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(30, 40, 70, 60)));
989 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(29, 40, 70, 60))) ; 935 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(29, 40, 70, 60))) ;
990 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 39, 70, 60))) ; 936 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(30, 39, 70, 60))) ;
991 937
992 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 4 0, 70, 60)).IsEmpty()); 938 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 4 0, 70, 60)).IsEmpty());
993 EXPECT_RECT_EQ(gfx::Rect(29, 40, 1, 60), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 40, 70, 60))); 939 EXPECT_RECT_EQ(gfx::Rect(29, 40, 1, 60), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(29, 40, 70, 60)));
994 EXPECT_RECT_EQ(gfx::Rect(30, 39, 70, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(30, 39, 70, 60))); 940 EXPECT_RECT_EQ(gfx::Rect(30, 39, 70, 1), occlusion.unoccludedLayerConten tRect(parent, gfx::Rect(30, 39, 70, 60)));
995 EXPECT_RECT_EQ(gfx::Rect(100, 40, 1, 60), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(31, 40, 70, 60))); 941 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(31, 40, 70, 60)));
996 EXPECT_RECT_EQ(gfx::Rect(30, 100, 70, 1), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(30, 41, 70, 60))); 942 EXPECT_RECT_EQ(gfx::Rect(), occlusion.unoccludedLayerContentRect(parent, gfx::Rect(30, 41, 70, 60)));
997 943
998 /* Justification for the above occlusion from |layer1| and |layer2|: 944 /* Justification for the above occlusion from |layer1| and |layer2|:
999 945
1000 +---------------------+ 946 +---------------------+
1001 | |30 Visible region of |layer1|: ///// 947 | |30 Visible region of |layer1|: /////
1002 | | Visible region of |layer2|: \\\\\ 948 | | Visible region of |layer2|: \\\\\
1003 | +---------------------------------+ 949 | +---------------------------------+
1004 | | |10 | 950 | | |10 |
1005 | +---------------+-----------------+ | 951 | +---------------+-----------------+ |
1006 | | |\\\\\\\\\\\\|//| 420 | | 952 | | |\\\\\\\\\\\\|//| 420 | |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 1078
1133 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 100)); 1079 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 100));
1134 parent->setMasksToBounds(true); 1080 parent->setMasksToBounds(true);
1135 typename Types::LayerType* child1 = this->createSurface(parent, child1Tr ansform, gfx::PointF(30, 20), gfx::Size(10, 10)); 1081 typename Types::LayerType* child1 = this->createSurface(parent, child1Tr ansform, gfx::PointF(30, 20), gfx::Size(10, 10));
1136 typename Types::LayerType* child2 = this->createDrawingSurface(parent, c hild2Transform, gfx::PointF(20, 40), gfx::Size(10, 10), false); 1082 typename Types::LayerType* child2 = this->createDrawingSurface(parent, c hild2Transform, gfx::PointF(20, 40), gfx::Size(10, 10), false);
1137 typename Types::ContentLayerType* layer1 = this->createDrawingLayer(chil d1, this->identityMatrix, gfx::PointF(-10, -20), gfx::Size(510, 510), true); 1083 typename Types::ContentLayerType* layer1 = this->createDrawingLayer(chil d1, this->identityMatrix, gfx::PointF(-10, -20), gfx::Size(510, 510), true);
1138 typename Types::ContentLayerType* layer2 = this->createDrawingLayer(chil d2, this->identityMatrix, gfx::PointF(-10, -10), gfx::Size(510, 510), true); 1084 typename Types::ContentLayerType* layer2 = this->createDrawingLayer(chil d2, this->identityMatrix, gfx::PointF(-10, -10), gfx::Size(510, 510), true);
1139 this->calcDrawEtc(parent); 1085 this->calcDrawEtc(parent);
1140 1086
1141 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1087 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
1142 occlusion.setLayerClipRect(gfx::Rect(-30, -30, 1000, 1000));
1143 1088
1144 this->visitLayer(layer2, occlusion); 1089 this->visitLayer(layer2, occlusion);
1145 this->enterLayer(child2, occlusion); 1090 this->enterLayer(child2, occlusion);
1146 1091
1147 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 1092 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
1148 EXPECT_EQ(gfx::Rect(-10, 420, 70, 80).ToString(), occlusion.occlusionFro mInsideTarget().ToString()); 1093 EXPECT_EQ(gfx::Rect(-10, 420, 70, 80).ToString(), occlusion.occlusionFro mInsideTarget().ToString());
1149 1094
1150 this->leaveLayer(child2, occlusion); 1095 this->leaveLayer(child2, occlusion);
1151 this->enterContributingSurface(child2, occlusion); 1096 this->enterContributingSurface(child2, occlusion);
1152 1097
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 filters.append(WebKit::WebFilterOperation::createGrayscaleFilter(0.5)); 1169 filters.append(WebKit::WebFilterOperation::createGrayscaleFilter(0.5));
1225 opaqueLayer->setFilters(filters); 1170 opaqueLayer->setFilters(filters);
1226 1171
1227 filters.clear(); 1172 filters.clear();
1228 filters.append(WebKit::WebFilterOperation::createOpacityFilter(0.5)); 1173 filters.append(WebKit::WebFilterOperation::createOpacityFilter(0.5));
1229 opacityLayer->setFilters(filters); 1174 opacityLayer->setFilters(filters);
1230 1175
1231 this->calcDrawEtc(parent); 1176 this->calcDrawEtc(parent);
1232 1177
1233 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1178 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
1234 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
1235 1179
1236 // Opacity layer won't contribute to occlusion. 1180 // Opacity layer won't contribute to occlusion.
1237 this->visitLayer(opacityLayer, occlusion); 1181 this->visitLayer(opacityLayer, occlusion);
1238 this->enterContributingSurface(opacityLayer, occlusion); 1182 this->enterContributingSurface(opacityLayer, occlusion);
1239 1183
1240 EXPECT_TRUE(occlusion.occlusionFromOutsideTarget().IsEmpty()); 1184 EXPECT_TRUE(occlusion.occlusionFromOutsideTarget().IsEmpty());
1241 EXPECT_TRUE(occlusion.occlusionFromInsideTarget().IsEmpty()); 1185 EXPECT_TRUE(occlusion.occlusionFromInsideTarget().IsEmpty());
1242 1186
1243 // And has nothing to contribute to its parent surface. 1187 // And has nothing to contribute to its parent surface.
1244 this->leaveContributingSurface(opacityLayer, occlusion); 1188 this->leaveContributingSurface(opacityLayer, occlusion);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1283 protected: 1227 protected:
1284 OcclusionTrackerTestReplicaDoesOcclude(bool opaqueLayers) : OcclusionTracker Test<Types>(opaqueLayers) {} 1228 OcclusionTrackerTestReplicaDoesOcclude(bool opaqueLayers) : OcclusionTracker Test<Types>(opaqueLayers) {}
1285 void runMyTest() 1229 void runMyTest()
1286 { 1230 {
1287 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200)); 1231 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200));
1288 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 100), gfx::Size(50, 50), true); 1232 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 100), gfx::Size(50, 50), true);
1289 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(50, 50), gfx::Size()); 1233 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(50, 50), gfx::Size());
1290 this->calcDrawEtc(parent); 1234 this->calcDrawEtc(parent);
1291 1235
1292 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1236 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
1293 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
1294 1237
1295 this->visitLayer(surface, occlusion); 1238 this->visitLayer(surface, occlusion);
1296 1239
1297 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), occlusion.occlusionFromIns ideTarget().ToString()); 1240 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), occlusion.occlusionFromIns ideTarget().ToString());
1298 1241
1299 this->visitContributingSurface(surface, occlusion); 1242 this->visitContributingSurface(surface, occlusion);
1300 this->enterLayer(parent, occlusion); 1243 this->enterLayer(parent, occlusion);
1301 1244
1302 // The surface and replica should both be occluding the parent. 1245 // The surface and replica should both be occluding the parent.
1303 EXPECT_EQ(UnionRegions(gfx::Rect(0, 100, 50, 50), gfx::Rect(50, 150, 50, 50)).ToString(), occlusion.occlusionFromInsideTarget().ToString()); 1246 EXPECT_EQ(UnionRegions(gfx::Rect(0, 100, 50, 50), gfx::Rect(50, 150, 50, 50)).ToString(), occlusion.occlusionFromInsideTarget().ToString());
1304 } 1247 }
1305 }; 1248 };
1306 1249
1307 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestReplicaDoesOcclude); 1250 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestReplicaDoesOcclude);
1308 1251
1309 template<class Types> 1252 template<class Types>
1310 class OcclusionTrackerTestReplicaWithClipping : public OcclusionTrackerTest<Type s> { 1253 class OcclusionTrackerTestReplicaWithClipping : public OcclusionTrackerTest<Type s> {
1311 protected: 1254 protected:
1312 OcclusionTrackerTestReplicaWithClipping(bool opaqueLayers) : OcclusionTracke rTest<Types>(opaqueLayers) {} 1255 OcclusionTrackerTestReplicaWithClipping(bool opaqueLayers) : OcclusionTracke rTest<Types>(opaqueLayers) {}
1313 void runMyTest() 1256 void runMyTest()
1314 { 1257 {
1315 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 170)); 1258 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 170));
1316 parent->setMasksToBounds(true); 1259 parent->setMasksToBounds(true);
1317 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 100), gfx::Size(50, 50), true); 1260 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 100), gfx::Size(50, 50), true);
1318 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(50, 50), gfx::Size()); 1261 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(50, 50), gfx::Size());
1319 this->calcDrawEtc(parent); 1262 this->calcDrawEtc(parent);
1320 1263
1321 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1264 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
1322 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
1323 1265
1324 this->visitLayer(surface, occlusion); 1266 this->visitLayer(surface, occlusion);
1325 1267
1326 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), occlusion.occlusionFromIns ideTarget().ToString()); 1268 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), occlusion.occlusionFromIns ideTarget().ToString());
1327 1269
1328 this->visitContributingSurface(surface, occlusion); 1270 this->visitContributingSurface(surface, occlusion);
1329 this->enterLayer(parent, occlusion); 1271 this->enterLayer(parent, occlusion);
1330 1272
1331 // The surface and replica should both be occluding the parent. 1273 // The surface and replica should both be occluding the parent.
1332 EXPECT_EQ(UnionRegions(gfx::Rect(0, 100, 50, 50), gfx::Rect(50, 150, 50, 20)).ToString(), occlusion.occlusionFromInsideTarget().ToString()); 1274 EXPECT_EQ(UnionRegions(gfx::Rect(0, 100, 50, 50), gfx::Rect(50, 150, 50, 20)).ToString(), occlusion.occlusionFromInsideTarget().ToString());
1333 } 1275 }
1334 }; 1276 };
1335 1277
1336 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestReplicaWithClipping); 1278 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestReplicaWithClipping);
1337 1279
1338 template<class Types> 1280 template<class Types>
1339 class OcclusionTrackerTestReplicaWithMask : public OcclusionTrackerTest<Types> { 1281 class OcclusionTrackerTestReplicaWithMask : public OcclusionTrackerTest<Types> {
1340 protected: 1282 protected:
1341 OcclusionTrackerTestReplicaWithMask(bool opaqueLayers) : OcclusionTrackerTes t<Types>(opaqueLayers) {} 1283 OcclusionTrackerTestReplicaWithMask(bool opaqueLayers) : OcclusionTrackerTes t<Types>(opaqueLayers) {}
1342 void runMyTest() 1284 void runMyTest()
1343 { 1285 {
1344 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200)); 1286 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200));
1345 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 100), gfx::Size(50, 50), true); 1287 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 100), gfx::Size(50, 50), true);
1346 typename Types::LayerType* replica = this->createReplicaLayer(surface, t his->identityMatrix, gfx::PointF(50, 50), gfx::Size()); 1288 typename Types::LayerType* replica = this->createReplicaLayer(surface, t his->identityMatrix, gfx::PointF(50, 50), gfx::Size());
1347 this->createMaskLayer(replica, gfx::Size(10, 10)); 1289 this->createMaskLayer(replica, gfx::Size(10, 10));
1348 this->calcDrawEtc(parent); 1290 this->calcDrawEtc(parent);
1349 1291
1350 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1292 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
1351 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
1352 1293
1353 this->visitLayer(surface, occlusion); 1294 this->visitLayer(surface, occlusion);
1354 1295
1355 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), occlusion.occlusionFromIns ideTarget().ToString()); 1296 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), occlusion.occlusionFromIns ideTarget().ToString());
1356 1297
1357 this->visitContributingSurface(surface, occlusion); 1298 this->visitContributingSurface(surface, occlusion);
1358 this->enterLayer(parent, occlusion); 1299 this->enterLayer(parent, occlusion);
1359 1300
1360 // The replica should not be occluding the parent, since it has a mask a pplied to it. 1301 // The replica should not be occluding the parent, since it has a mask a pplied to it.
1361 EXPECT_EQ(gfx::Rect(0, 100, 50, 50).ToString(), occlusion.occlusionFromI nsideTarget().ToString()); 1302 EXPECT_EQ(gfx::Rect(0, 100, 50, 50).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
1362 } 1303 }
1363 }; 1304 };
1364 1305
1365 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestReplicaWithMask); 1306 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestReplicaWithMask);
1366 1307
1367 template<class Types> 1308 template<class Types>
1368 class OcclusionTrackerTestLayerClipRectOutsideChild : public OcclusionTrackerTes t<Types> { 1309 class OcclusionTrackerTestLayerClipRectOutsideChild : public OcclusionTrackerTes t<Types> {
1369 protected: 1310 protected:
1370 OcclusionTrackerTestLayerClipRectOutsideChild(bool opaqueLayers) : Occlusion TrackerTest<Types>(opaqueLayers) {} 1311 OcclusionTrackerTestLayerClipRectOutsideChild(bool opaqueLayers) : Occlusion TrackerTest<Types>(opaqueLayers) {}
1371 void runMyTest() 1312 void runMyTest()
1372 { 1313 {
1373 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300)); 1314 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300));
1374 typename Types::ContentLayerType* layer = this->createDrawingLayer(paren t, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true); 1315 typename Types::ContentLayerType* clip = this->createDrawingLayer(parent , this->identityMatrix, gfx::PointF(200, 100), gfx::Size(100, 100), false);
1316 clip->setMasksToBounds(true);
1317 typename Types::ContentLayerType* layer = this->createDrawingLayer(clip, this->identityMatrix, gfx::PointF(-200, -100), gfx::Size(200, 200), false);
1375 this->calcDrawEtc(parent); 1318 this->calcDrawEtc(parent);
1376 1319
1377 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1320 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
1378 occlusion.setLayerClipRect(gfx::Rect(200, 100, 100, 100));
1379 1321
1380 this->enterLayer(layer, occlusion); 1322 this->enterLayer(layer, occlusion);
1381 1323
1382 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100))); 1324 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
1383 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100))) ; 1325 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100))) ;
1384 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100))) ; 1326 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100))) ;
1385 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100) )); 1327 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100) ));
1386 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(200, 100, 100, 100 ))); 1328 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(200, 100, 100, 100 )));
1387 1329
1388 occlusion.useDefaultLayerClipRect(); 1330 this->leaveLayer(layer, occlusion);
1389 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(200, 100, 100, 100) )); 1331 this->enterLayer(clip, occlusion);
1390 occlusion.setLayerClipRect(gfx::Rect(200, 100, 100, 100));
1391 1332
1392 this->leaveLayer(layer, occlusion); 1333 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(-100, 0, 100, 100))) ;
1393 this->enterLayer(parent, occlusion); 1334 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(0, -100, 100, 100))) ;
1335 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(100, 0, 100, 100)));
1336 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(0, 100, 100, 100)));
1337 EXPECT_FALSE(occlusion.occludedLayer(clip, gfx::Rect(0, 0, 100, 100)));
1394 1338
1395 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 0, 100, 100))); 1339 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), occlusion.unoccludedLayerConte ntRect(clip, gfx::Rect(-100, -100, 300, 300)));
1396 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 100, 100, 100)) );
1397 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 0, 100, 100)) );
1398 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 100, 100, 100)) );
1399 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(200, 100, 100, 10 0)));
1400 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(200, 0, 100, 100)) );
1401 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 200, 100, 100)) );
1402 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 200, 100, 100 )));
1403 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(200, 200, 100, 100 )));
1404
1405 EXPECT_RECT_EQ(gfx::Rect(200, 100, 100, 100), occlusion.unoccludedLayerC ontentRect(parent, gfx::Rect(0, 0, 300, 300)));
1406 } 1340 }
1407 }; 1341 };
1408 1342
1409 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectOutsideChild); 1343 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectOutsideChild);
1410 1344
1411 template<class Types> 1345 template<class Types>
1412 class OcclusionTrackerTestViewportRectOutsideChild : public OcclusionTrackerTest <Types> { 1346 class OcclusionTrackerTestViewportRectOutsideChild : public OcclusionTrackerTest <Types> {
1413 protected: 1347 protected:
1414 OcclusionTrackerTestViewportRectOutsideChild(bool opaqueLayers) : OcclusionT rackerTest<Types>(opaqueLayers) {} 1348 OcclusionTrackerTestViewportRectOutsideChild(bool opaqueLayers) : OcclusionT rackerTest<Types>(opaqueLayers) {}
1415 void runMyTest() 1349 void runMyTest()
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1448 1382
1449 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectOutsideChild); 1383 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectOutsideChild);
1450 1384
1451 template<class Types> 1385 template<class Types>
1452 class OcclusionTrackerTestLayerClipRectOverChild : public OcclusionTrackerTest<T ypes> { 1386 class OcclusionTrackerTestLayerClipRectOverChild : public OcclusionTrackerTest<T ypes> {
1453 protected: 1387 protected:
1454 OcclusionTrackerTestLayerClipRectOverChild(bool opaqueLayers) : OcclusionTra ckerTest<Types>(opaqueLayers) {} 1388 OcclusionTrackerTestLayerClipRectOverChild(bool opaqueLayers) : OcclusionTra ckerTest<Types>(opaqueLayers) {}
1455 void runMyTest() 1389 void runMyTest()
1456 { 1390 {
1457 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300)); 1391 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300));
1458 typename Types::ContentLayerType* layer = this->createDrawingSurface(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true); 1392 typename Types::ContentLayerType* clip = this->createDrawingLayer(parent , this->identityMatrix, gfx::PointF(100, 100), gfx::Size(100, 100), false);
1393 clip->setMasksToBounds(true);
1394 typename Types::ContentLayerType* layer = this->createDrawingSurface(cli p, this->identityMatrix, gfx::PointF(-100, -100), gfx::Size(200, 200), true);
1459 this->calcDrawEtc(parent); 1395 this->calcDrawEtc(parent);
1460 1396
1461 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1397 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
1462 occlusion.setLayerClipRect(gfx::Rect(100, 100, 100, 100));
1463 1398
1464 this->enterLayer(layer, occlusion); 1399 this->enterLayer(layer, occlusion);
1465 1400
1466 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100))); 1401 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
1467 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100))) ; 1402 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100))) ;
1468 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100))) ; 1403 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100))) ;
1469 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100 ))); 1404 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100 )));
1470 1405
1471 this->leaveLayer(layer, occlusion); 1406 this->leaveLayer(layer, occlusion);
1472 this->visitContributingSurface(layer, occlusion); 1407 this->visitContributingSurface(layer, occlusion);
1473 this->enterLayer(parent, occlusion);
1474 1408
1475 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 0, 100, 100))); 1409 EXPECT_EQ(gfx::Rect(100, 100, 100, 100).ToString(), occlusion.occlusionF romInsideTarget().ToString());
1476 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 100, 100, 100)) );
1477 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 0, 100, 100)) );
1478 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 100, 100, 100 )));
1479 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(200, 100, 100, 100 )));
1480 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(200, 0, 100, 100)) );
1481 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 200, 100, 100)) );
1482 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 200, 100, 100 )));
1483 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(200, 200, 100, 100 )));
1484 1410
1485 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(0, 0, 300, 300)).IsEmpty()); 1411 this->enterLayer(clip, occlusion);
1412
1413 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(0, 0, 100, 100)));
1414 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(0, 100, 100, 100)));
1415 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(100, 0, 100, 100)));
1416 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(100, 100, 100, 100)) );
1417 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(200, 100, 100, 100)) );
1418 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(200, 0, 100, 100)));
1419 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(0, 200, 100, 100)));
1420 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(100, 200, 100, 100)) );
1421 EXPECT_TRUE(occlusion.occludedLayer(clip, gfx::Rect(200, 200, 100, 100)) );
1422
1423 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(clip, gfx::Rect(0, 0, 3 00, 300)).IsEmpty());
1486 } 1424 }
1487 }; 1425 };
1488 1426
1489 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectOverChild); 1427 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectOverChild);
1490 1428
1491 template<class Types> 1429 template<class Types>
1492 class OcclusionTrackerTestViewportRectOverChild : public OcclusionTrackerTest<Ty pes> { 1430 class OcclusionTrackerTestViewportRectOverChild : public OcclusionTrackerTest<Ty pes> {
1493 protected: 1431 protected:
1494 OcclusionTrackerTestViewportRectOverChild(bool opaqueLayers) : OcclusionTrac kerTest<Types>(opaqueLayers) {} 1432 OcclusionTrackerTestViewportRectOverChild(bool opaqueLayers) : OcclusionTrac kerTest<Types>(opaqueLayers) {}
1495 void runMyTest() 1433 void runMyTest()
1496 { 1434 {
1497 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300)); 1435 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300));
1498 typename Types::ContentLayerType* layer = this->createDrawingSurface(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true); 1436 typename Types::ContentLayerType* layer = this->createDrawingSurface(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true);
1499 this->calcDrawEtc(parent); 1437 this->calcDrawEtc(parent);
1500 1438
1501 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(100, 100, 100, 100)); 1439 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(100, 100, 100, 100));
1502 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
1503 1440
1504 this->enterLayer(layer, occlusion); 1441 this->enterLayer(layer, occlusion);
1505 1442
1506 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100))); 1443 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
1507 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100))) ; 1444 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100))) ;
1508 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100))) ; 1445 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100))) ;
1509 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100 ))); 1446 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100 )));
1510 1447
1511 this->leaveLayer(layer, occlusion); 1448 this->leaveLayer(layer, occlusion);
1512 this->visitContributingSurface(layer, occlusion); 1449 this->visitContributingSurface(layer, occlusion);
(...skipping 15 matching lines...) Expand all
1528 1465
1529 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectOverChild); 1466 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectOverChild);
1530 1467
1531 template<class Types> 1468 template<class Types>
1532 class OcclusionTrackerTestLayerClipRectPartlyOverChild : public OcclusionTracker Test<Types> { 1469 class OcclusionTrackerTestLayerClipRectPartlyOverChild : public OcclusionTracker Test<Types> {
1533 protected: 1470 protected:
1534 OcclusionTrackerTestLayerClipRectPartlyOverChild(bool opaqueLayers) : Occlus ionTrackerTest<Types>(opaqueLayers) {} 1471 OcclusionTrackerTestLayerClipRectPartlyOverChild(bool opaqueLayers) : Occlus ionTrackerTest<Types>(opaqueLayers) {}
1535 void runMyTest() 1472 void runMyTest()
1536 { 1473 {
1537 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300)); 1474 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300));
1538 typename Types::ContentLayerType* layer = this->createDrawingSurface(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true); 1475 typename Types::ContentLayerType* clip = this->createDrawingLayer(parent , this->identityMatrix, gfx::PointF(50, 50), gfx::Size(200, 200), false);
1476 clip->setMasksToBounds(true);
1477 typename Types::ContentLayerType* layer = this->createDrawingSurface(cli p, this->identityMatrix, gfx::PointF(-50, -50), gfx::Size(200, 200), true);
1539 this->calcDrawEtc(parent); 1478 this->calcDrawEtc(parent);
1540 1479
1541 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1480 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
1542 occlusion.setLayerClipRect(gfx::Rect(50, 50, 200, 200));
1543 1481
1544 this->enterLayer(layer, occlusion); 1482 this->enterLayer(layer, occlusion);
1545 1483
1546 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100))); 1484 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
1547 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100)) ); 1485 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100)) );
1548 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100)) ); 1486 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100)) );
1549 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100 ))); 1487 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100 )));
1550 1488
1489 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 50)));
1490 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 50, 100)));
1491 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 50)));
1492 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 50, 100)));
1493
1551 this->leaveLayer(layer, occlusion); 1494 this->leaveLayer(layer, occlusion);
1552 this->visitContributingSurface(layer, occlusion); 1495 this->visitContributingSurface(layer, occlusion);
1553 this->enterLayer(parent, occlusion); 1496 this->enterLayer(clip, occlusion);
1554 1497
1555 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 0, 100, 100))); 1498 EXPECT_EQ(gfx::Rect(50, 50, 150, 150).ToString(), occlusion.occlusionFro mInsideTarget().ToString());
1556 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 100, 100, 100)) );
1557 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 0, 100, 100)) );
1558 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 100, 100, 100 )));
1559 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(200, 100, 100, 10 0)));
1560 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(200, 0, 100, 100) ));
1561 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(0, 200, 100, 100) ));
1562 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(100, 200, 100, 10 0)));
1563 EXPECT_FALSE(occlusion.occludedLayer(parent, gfx::Rect(200, 200, 100, 10 0)));
1564
1565 EXPECT_RECT_EQ(gfx::Rect(50, 50, 200, 200), occlusion.unoccludedLayerCon tentRect(parent, gfx::Rect(0, 0, 300, 300)));
1566 EXPECT_RECT_EQ(gfx::Rect(200, 50, 50, 50), occlusion.unoccludedLayerCont entRect(parent, gfx::Rect(0, 0, 300, 100)));
1567 EXPECT_RECT_EQ(gfx::Rect(200, 100, 50, 100), occlusion.unoccludedLayerCo ntentRect(parent, gfx::Rect(0, 100, 300, 100)));
1568 EXPECT_RECT_EQ(gfx::Rect(200, 100, 50, 100), occlusion.unoccludedLayerCo ntentRect(parent, gfx::Rect(200, 100, 100, 100)));
1569 EXPECT_RECT_EQ(gfx::Rect(100, 200, 100, 50), occlusion.unoccludedLayerCo ntentRect(parent, gfx::Rect(100, 200, 100, 100)));
1570 } 1499 }
1571 }; 1500 };
1572 1501
1573 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectPartlyOverChild); 1502 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectPartlyOverChild);
1574 1503
1575 template<class Types> 1504 template<class Types>
1576 class OcclusionTrackerTestViewportRectPartlyOverChild : public OcclusionTrackerT est<Types> { 1505 class OcclusionTrackerTestViewportRectPartlyOverChild : public OcclusionTrackerT est<Types> {
1577 protected: 1506 protected:
1578 OcclusionTrackerTestViewportRectPartlyOverChild(bool opaqueLayers) : Occlusi onTrackerTest<Types>(opaqueLayers) {} 1507 OcclusionTrackerTestViewportRectPartlyOverChild(bool opaqueLayers) : Occlusi onTrackerTest<Types>(opaqueLayers) {}
1579 void runMyTest() 1508 void runMyTest()
1580 { 1509 {
1581 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300)); 1510 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300));
1582 typename Types::ContentLayerType* layer = this->createDrawingSurface(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true); 1511 typename Types::ContentLayerType* layer = this->createDrawingSurface(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true);
1583 this->calcDrawEtc(parent); 1512 this->calcDrawEtc(parent);
1584 1513
1585 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(50, 50, 200, 200)); 1514 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(50, 50, 200, 200));
1586 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
1587 1515
1588 this->enterLayer(layer, occlusion); 1516 this->enterLayer(layer, occlusion);
1589 1517
1590 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100))); 1518 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
1591 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100)) ); 1519 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100)) );
1592 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100)) ); 1520 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100)) );
1593 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100 ))); 1521 EXPECT_FALSE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100 )));
1594 1522
1595 this->leaveLayer(layer, occlusion); 1523 this->leaveLayer(layer, occlusion);
1596 this->visitContributingSurface(layer, occlusion); 1524 this->visitContributingSurface(layer, occlusion);
(...skipping 13 matching lines...) Expand all
1610 EXPECT_RECT_EQ(gfx::Rect(200, 50, 50, 50), occlusion.unoccludedLayerCont entRect(parent, gfx::Rect(0, 0, 300, 100))); 1538 EXPECT_RECT_EQ(gfx::Rect(200, 50, 50, 50), occlusion.unoccludedLayerCont entRect(parent, gfx::Rect(0, 0, 300, 100)));
1611 EXPECT_RECT_EQ(gfx::Rect(200, 100, 50, 100), occlusion.unoccludedLayerCo ntentRect(parent, gfx::Rect(0, 100, 300, 100))); 1539 EXPECT_RECT_EQ(gfx::Rect(200, 100, 50, 100), occlusion.unoccludedLayerCo ntentRect(parent, gfx::Rect(0, 100, 300, 100)));
1612 EXPECT_RECT_EQ(gfx::Rect(200, 100, 50, 100), occlusion.unoccludedLayerCo ntentRect(parent, gfx::Rect(200, 100, 100, 100))); 1540 EXPECT_RECT_EQ(gfx::Rect(200, 100, 50, 100), occlusion.unoccludedLayerCo ntentRect(parent, gfx::Rect(200, 100, 100, 100)));
1613 EXPECT_RECT_EQ(gfx::Rect(100, 200, 100, 50), occlusion.unoccludedLayerCo ntentRect(parent, gfx::Rect(100, 200, 100, 100))); 1541 EXPECT_RECT_EQ(gfx::Rect(100, 200, 100, 50), occlusion.unoccludedLayerCo ntentRect(parent, gfx::Rect(100, 200, 100, 100)));
1614 } 1542 }
1615 }; 1543 };
1616 1544
1617 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectPartlyOverChild); 1545 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectPartlyOverChild);
1618 1546
1619 template<class Types> 1547 template<class Types>
1620 class OcclusionTrackerTestLayerClipRectOverNothing : public OcclusionTrackerTest <Types> {
1621 protected:
1622 OcclusionTrackerTestLayerClipRectOverNothing(bool opaqueLayers) : OcclusionT rackerTest<Types>(opaqueLayers) {}
1623 void runMyTest()
1624 {
1625 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300));
1626 typename Types::ContentLayerType* layer = this->createDrawingSurface(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true);
1627 this->calcDrawEtc(parent);
1628
1629 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
1630 occlusion.setLayerClipRect(gfx::Rect(500, 500, 100, 100));
1631
1632 this->enterLayer(layer, occlusion);
1633
1634 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
1635 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100))) ;
1636 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100))) ;
1637 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100) ));
1638
1639 this->leaveLayer(layer, occlusion);
1640 this->visitContributingSurface(layer, occlusion);
1641 this->enterLayer(parent, occlusion);
1642
1643 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 0, 100, 100)));
1644 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 100, 100, 100)) );
1645 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 0, 100, 100)) );
1646 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 100, 100, 100 )));
1647 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(200, 100, 100, 100 )));
1648 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(200, 0, 100, 100)) );
1649 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(0, 200, 100, 100)) );
1650 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(100, 200, 100, 100 )));
1651 EXPECT_TRUE(occlusion.occludedLayer(parent, gfx::Rect(200, 200, 100, 100 )));
1652
1653 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(0, 0, 300, 300)).IsEmpty());
1654 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(0, 0, 300, 100)).IsEmpty());
1655 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(0, 10 0, 300, 100)).IsEmpty());
1656 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(200, 100, 100, 100)).IsEmpty());
1657 EXPECT_TRUE(occlusion.unoccludedLayerContentRect(parent, gfx::Rect(100, 200, 100, 100)).IsEmpty());
1658 }
1659 };
1660
1661 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectOverNothing);
1662
1663 template<class Types>
1664 class OcclusionTrackerTestViewportRectOverNothing : public OcclusionTrackerTest< Types> { 1548 class OcclusionTrackerTestViewportRectOverNothing : public OcclusionTrackerTest< Types> {
1665 protected: 1549 protected:
1666 OcclusionTrackerTestViewportRectOverNothing(bool opaqueLayers) : OcclusionTr ackerTest<Types>(opaqueLayers) {} 1550 OcclusionTrackerTestViewportRectOverNothing(bool opaqueLayers) : OcclusionTr ackerTest<Types>(opaqueLayers) {}
1667 void runMyTest() 1551 void runMyTest()
1668 { 1552 {
1669 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300)); 1553 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300));
1670 typename Types::ContentLayerType* layer = this->createDrawingSurface(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true); 1554 typename Types::ContentLayerType* layer = this->createDrawingSurface(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 200), true);
1671 this->calcDrawEtc(parent); 1555 this->calcDrawEtc(parent);
1672 1556
1673 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(500, 500, 100, 100)); 1557 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(500, 500, 100, 100));
1674 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
1675 1558
1676 this->enterLayer(layer, occlusion); 1559 this->enterLayer(layer, occlusion);
1677 1560
1678 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100))); 1561 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
1679 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100))) ; 1562 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(0, 100, 100, 100))) ;
1680 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100))) ; 1563 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 0, 100, 100))) ;
1681 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100) )); 1564 EXPECT_TRUE(occlusion.occludedLayer(layer, gfx::Rect(100, 100, 100, 100) ));
1682 1565
1683 this->leaveLayer(layer, occlusion); 1566 this->leaveLayer(layer, occlusion);
1684 this->visitContributingSurface(layer, occlusion); 1567 this->visitContributingSurface(layer, occlusion);
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
2008 1891
2009 // This test requires accumulating occlusion of 3d layers, which are skipped by the occlusion tracker on the main thread. So this test should run on the impl th read. 1892 // This test requires accumulating occlusion of 3d layers, which are skipped by the occlusion tracker on the main thread. So this test should run on the impl th read.
2010 IMPL_THREAD_TEST(OcclusionTrackerTestLargePixelsOccludeInsideClipRect); 1893 IMPL_THREAD_TEST(OcclusionTrackerTestLargePixelsOccludeInsideClipRect);
2011 1894
2012 template<class Types> 1895 template<class Types>
2013 class OcclusionTrackerTestAnimationOpacity1OnMainThread : public OcclusionTracke rTest<Types> { 1896 class OcclusionTrackerTestAnimationOpacity1OnMainThread : public OcclusionTracke rTest<Types> {
2014 protected: 1897 protected:
2015 OcclusionTrackerTestAnimationOpacity1OnMainThread(bool opaqueLayers) : Occlu sionTrackerTest<Types>(opaqueLayers) {} 1898 OcclusionTrackerTestAnimationOpacity1OnMainThread(bool opaqueLayers) : Occlu sionTrackerTest<Types>(opaqueLayers) {}
2016 void runMyTest() 1899 void runMyTest()
2017 { 1900 {
1901 // parent
1902 // +--layer
1903 // +--surface
1904 // | +--surfaceChild
1905 // | +--surfaceChild2
1906 // +--parent2
1907 // +--topmost
1908
2018 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300)); 1909 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(300, 300));
2019 typename Types::ContentLayerType* layer = this->createDrawingLayer(paren t, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(300, 300), true); 1910 typename Types::ContentLayerType* layer = this->createDrawingLayer(paren t, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(300, 300), true);
2020 typename Types::ContentLayerType* surface = this->createDrawingSurface(p arent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(300, 300), true); 1911 typename Types::ContentLayerType* surface = this->createDrawingSurface(p arent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(300, 300), true);
2021 typename Types::ContentLayerType* surfaceChild = this->createDrawingLaye r(surface, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 300), true); 1912 typename Types::ContentLayerType* surfaceChild = this->createDrawingLaye r(surface, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(200, 300), true);
2022 typename Types::ContentLayerType* surfaceChild2 = this->createDrawingLay er(surface, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 300), true); 1913 typename Types::ContentLayerType* surfaceChild2 = this->createDrawingLay er(surface, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 300), true);
2023 typename Types::ContentLayerType* parent2 = this->createDrawingLayer(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(300, 300), false); 1914 typename Types::ContentLayerType* parent2 = this->createDrawingLayer(par ent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(300, 300), false);
2024 typename Types::ContentLayerType* topmost = this->createDrawingLayer(par ent, this->identityMatrix, gfx::PointF(250, 0), gfx::Size(50, 300), true); 1915 typename Types::ContentLayerType* topmost = this->createDrawingLayer(par ent, this->identityMatrix, gfx::PointF(250, 0), gfx::Size(50, 300), true);
2025 1916
2026 addOpacityTransitionToController(*layer->layerAnimationController(), 10, 0, 1, false); 1917 addOpacityTransitionToController(*layer->layerAnimationController(), 10, 0, 1, false);
2027 addOpacityTransitionToController(*surface->layerAnimationController(), 1 0, 0, 1, false); 1918 addOpacityTransitionToController(*surface->layerAnimationController(), 1 0, 0, 1, false);
2028 this->calcDrawEtc(parent); 1919 this->calcDrawEtc(parent);
2029 1920
2030 EXPECT_TRUE(layer->drawOpacityIsAnimating()); 1921 EXPECT_TRUE(layer->drawOpacityIsAnimating());
2031 EXPECT_FALSE(surface->drawOpacityIsAnimating()); 1922 EXPECT_FALSE(surface->drawOpacityIsAnimating());
2032 EXPECT_TRUE(surface->renderSurface()->drawOpacityIsAnimating()); 1923 EXPECT_TRUE(surface->renderSurface()->drawOpacityIsAnimating());
2033 1924
2034 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1925 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2035 1926
2036 this->visitLayer(topmost, occlusion); 1927 this->visitLayer(topmost, occlusion);
2037 this->enterLayer(parent2, occlusion); 1928 this->enterLayer(parent2, occlusion);
2038 // This occlusion will affect all surfaces. 1929 // This occlusion will affect all surfaces.
2039 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedLayerConte ntRect(parent2, gfx::Rect(0, 0, 300, 300))); 1930 EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(), occlusion.occlusionFrom InsideTarget().ToString());
1931 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
1932 EXPECT_EQ(gfx::Rect(0, 0, 250, 300).ToString(), occlusion.unoccludedLaye rContentRect(parent2, gfx::Rect(0, 0, 300, 300)).ToString());
2040 this->leaveLayer(parent2, occlusion); 1933 this->leaveLayer(parent2, occlusion);
2041 1934
2042 this->visitLayer(surfaceChild2, occlusion); 1935 this->visitLayer(surfaceChild2, occlusion);
2043 this->enterLayer(surfaceChild, occlusion); 1936 this->enterLayer(surfaceChild, occlusion);
2044 EXPECT_RECT_EQ(gfx::Rect(100, 0, 100, 300), occlusion.unoccludedLayerCon tentRect(surfaceChild, gfx::Rect(0, 0, 300, 300))); 1937 EXPECT_EQ(gfx::Rect(0, 0, 100, 300).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
1938 EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(), occlusion.occlusionFrom OutsideTarget().ToString());
1939 EXPECT_RECT_EQ(gfx::Rect(100, 0, 100, 300), occlusion.unoccludedLayerCon tentRect(surfaceChild, gfx::Rect(0, 0, 200, 300)));
2045 this->leaveLayer(surfaceChild, occlusion); 1940 this->leaveLayer(surfaceChild, occlusion);
2046 this->enterLayer(surface, occlusion); 1941 this->enterLayer(surface, occlusion);
1942 EXPECT_EQ(gfx::Rect(0, 0, 200, 300).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
1943 EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(), occlusion.occlusionFrom OutsideTarget().ToString());
2047 EXPECT_RECT_EQ(gfx::Rect(200, 0, 50, 300), occlusion.unoccludedLayerCont entRect(surface, gfx::Rect(0, 0, 300, 300))); 1944 EXPECT_RECT_EQ(gfx::Rect(200, 0, 50, 300), occlusion.unoccludedLayerCont entRect(surface, gfx::Rect(0, 0, 300, 300)));
2048 this->leaveLayer(surface, occlusion); 1945 this->leaveLayer(surface, occlusion);
2049 1946
2050 this->enterContributingSurface(surface, occlusion); 1947 this->enterContributingSurface(surface, occlusion);
2051 // Occlusion within the surface is lost when leaving the animating surfa ce. 1948 // Occlusion within the surface is lost when leaving the animating surfa ce.
1949 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromInsideTarget(). ToString());
1950 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
2052 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedContributi ngSurfaceContentRect(surface, false, gfx::Rect(0, 0, 300, 300))); 1951 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedContributi ngSurfaceContentRect(surface, false, gfx::Rect(0, 0, 300, 300)));
2053 this->leaveContributingSurface(surface, occlusion); 1952 this->leaveContributingSurface(surface, occlusion);
2054 1953
1954 // Occlusion from outside the animating surface still exists.
1955 EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(), occlusion.occlusionFrom InsideTarget().ToString());
1956 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
1957
2055 this->visitLayer(layer, occlusion); 1958 this->visitLayer(layer, occlusion);
2056 this->enterLayer(parent, occlusion); 1959 this->enterLayer(parent, occlusion);
2057 1960
2058 // Occlusion is not added for the animating |layer|. 1961 // Occlusion is not added for the animating |layer|.
2059 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(0, 0, 300, 300))); 1962 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(0, 0, 300, 300)));
2060 } 1963 }
2061 }; 1964 };
2062 1965
2063 MAIN_THREAD_TEST(OcclusionTrackerTestAnimationOpacity1OnMainThread); 1966 MAIN_THREAD_TEST(OcclusionTrackerTestAnimationOpacity1OnMainThread);
2064 1967
(...skipping 17 matching lines...) Expand all
2082 1985
2083 EXPECT_TRUE(layer->drawOpacityIsAnimating()); 1986 EXPECT_TRUE(layer->drawOpacityIsAnimating());
2084 EXPECT_FALSE(surface->drawOpacityIsAnimating()); 1987 EXPECT_FALSE(surface->drawOpacityIsAnimating());
2085 EXPECT_TRUE(surface->renderSurface()->drawOpacityIsAnimating()); 1988 EXPECT_TRUE(surface->renderSurface()->drawOpacityIsAnimating());
2086 1989
2087 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 1990 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2088 1991
2089 this->visitLayer(topmost, occlusion); 1992 this->visitLayer(topmost, occlusion);
2090 this->enterLayer(parent2, occlusion); 1993 this->enterLayer(parent2, occlusion);
2091 // This occlusion will affect all surfaces. 1994 // This occlusion will affect all surfaces.
1995 EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(), occlusion.occlusionFrom InsideTarget().ToString());
1996 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
2092 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(0, 0, 300, 300))); 1997 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(0, 0, 300, 300)));
2093 this->leaveLayer(parent2, occlusion); 1998 this->leaveLayer(parent2, occlusion);
2094 1999
2095 this->visitLayer(surfaceChild2, occlusion); 2000 this->visitLayer(surfaceChild2, occlusion);
2096 this->enterLayer(surfaceChild, occlusion); 2001 this->enterLayer(surfaceChild, occlusion);
2097 EXPECT_RECT_EQ(gfx::Rect(100, 0, 100, 300), occlusion.unoccludedLayerCon tentRect(surfaceChild, gfx::Rect(0, 0, 300, 300))); 2002 EXPECT_EQ(gfx::Rect(0, 0, 100, 300).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
2003 EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(), occlusion.occlusionFrom OutsideTarget().ToString());
2004 EXPECT_RECT_EQ(gfx::Rect(100, 0, 100, 300), occlusion.unoccludedLayerCon tentRect(surfaceChild, gfx::Rect(0, 0, 200, 300)));
2098 this->leaveLayer(surfaceChild, occlusion); 2005 this->leaveLayer(surfaceChild, occlusion);
2099 this->enterLayer(surface, occlusion); 2006 this->enterLayer(surface, occlusion);
2007 EXPECT_EQ(gfx::Rect(0, 0, 200, 300).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
2008 EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(), occlusion.occlusionFrom OutsideTarget().ToString());
2100 EXPECT_RECT_EQ(gfx::Rect(200, 0, 50, 300), occlusion.unoccludedLayerCont entRect(surface, gfx::Rect(0, 0, 300, 300))); 2009 EXPECT_RECT_EQ(gfx::Rect(200, 0, 50, 300), occlusion.unoccludedLayerCont entRect(surface, gfx::Rect(0, 0, 300, 300)));
2101 this->leaveLayer(surface, occlusion); 2010 this->leaveLayer(surface, occlusion);
2102 2011
2103 this->enterContributingSurface(surface, occlusion); 2012 this->enterContributingSurface(surface, occlusion);
2104 // Occlusion within the surface is lost when leaving the animating surfa ce. 2013 // Occlusion within the surface is lost when leaving the animating surfa ce.
2014 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromInsideTarget(). ToString());
2015 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
2105 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedContributi ngSurfaceContentRect(surface, false, gfx::Rect(0, 0, 300, 300))); 2016 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedContributi ngSurfaceContentRect(surface, false, gfx::Rect(0, 0, 300, 300)));
2106 this->leaveContributingSurface(surface, occlusion); 2017 this->leaveContributingSurface(surface, occlusion);
2107 2018
2019 // Occlusion from outside the animating surface still exists.
2020 EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(), occlusion.occlusionFrom InsideTarget().ToString());
2021 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
2022
2108 this->visitLayer(layer, occlusion); 2023 this->visitLayer(layer, occlusion);
2109 this->enterLayer(parent, occlusion); 2024 this->enterLayer(parent, occlusion);
2110 2025
2111 // Occlusion is not added for the animating |layer|. 2026 // Occlusion is not added for the animating |layer|.
2112 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(0, 0, 300, 300))); 2027 EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300), occlusion.unoccludedLayerConte ntRect(parent, gfx::Rect(0, 0, 300, 300)));
2113 } 2028 }
2114 }; 2029 };
2115 2030
2116 MAIN_THREAD_TEST(OcclusionTrackerTestAnimationOpacity0OnMainThread); 2031 MAIN_THREAD_TEST(OcclusionTrackerTestAnimationOpacity0OnMainThread);
2117 2032
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2272 OcclusionTrackerTestReplicaOccluded(bool opaqueLayers) : OcclusionTrackerTes t<Types>(opaqueLayers) {} 2187 OcclusionTrackerTestReplicaOccluded(bool opaqueLayers) : OcclusionTrackerTes t<Types>(opaqueLayers) {}
2273 void runMyTest() 2188 void runMyTest()
2274 { 2189 {
2275 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200)); 2190 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200));
2276 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true); 2191 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true);
2277 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(0, 1 00), gfx::Size(100, 100)); 2192 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(0, 1 00), gfx::Size(100, 100));
2278 typename Types::LayerType* topmost = this->createDrawingLayer(parent, th is->identityMatrix, gfx::PointF(0, 100), gfx::Size(100, 100), true); 2193 typename Types::LayerType* topmost = this->createDrawingLayer(parent, th is->identityMatrix, gfx::PointF(0, 100), gfx::Size(100, 100), true);
2279 this->calcDrawEtc(parent); 2194 this->calcDrawEtc(parent);
2280 2195
2281 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2196 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2282 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2283 2197
2284 // |topmost| occludes the replica, but not the surface itself. 2198 // |topmost| occludes the replica, but not the surface itself.
2285 this->visitLayer(topmost, occlusion); 2199 this->visitLayer(topmost, occlusion);
2286 2200
2287 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 2201 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
2288 EXPECT_EQ(gfx::Rect(0, 100, 100, 100).ToString(), occlusion.occlusionFro mInsideTarget().ToString()); 2202 EXPECT_EQ(gfx::Rect(0, 100, 100, 100).ToString(), occlusion.occlusionFro mInsideTarget().ToString());
2289 2203
2290 this->visitLayer(surface, occlusion); 2204 this->visitLayer(surface, occlusion);
2291 2205
2292 EXPECT_EQ(gfx::Rect(0, 100, 100, 100).ToString(), occlusion.occlusionFro mOutsideTarget().ToString()); 2206 EXPECT_EQ(gfx::Rect(0, 100, 100, 100).ToString(), occlusion.occlusionFro mOutsideTarget().ToString());
(...skipping 14 matching lines...) Expand all
2307 OcclusionTrackerTestSurfaceWithReplicaUnoccluded(bool opaqueLayers) : Occlus ionTrackerTest<Types>(opaqueLayers) {} 2221 OcclusionTrackerTestSurfaceWithReplicaUnoccluded(bool opaqueLayers) : Occlus ionTrackerTest<Types>(opaqueLayers) {}
2308 void runMyTest() 2222 void runMyTest()
2309 { 2223 {
2310 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200)); 2224 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200));
2311 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true); 2225 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true);
2312 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(0, 1 00), gfx::Size(100, 100)); 2226 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(0, 1 00), gfx::Size(100, 100));
2313 typename Types::LayerType* topmost = this->createDrawingLayer(parent, th is->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 110), true); 2227 typename Types::LayerType* topmost = this->createDrawingLayer(parent, th is->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 110), true);
2314 this->calcDrawEtc(parent); 2228 this->calcDrawEtc(parent);
2315 2229
2316 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2230 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2317 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2318 2231
2319 // |topmost| occludes the surface, but not the entire surface's replica. 2232 // |topmost| occludes the surface, but not the entire surface's replica.
2320 this->visitLayer(topmost, occlusion); 2233 this->visitLayer(topmost, occlusion);
2321 2234
2322 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 2235 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
2323 EXPECT_EQ(gfx::Rect(0, 0, 100, 110).ToString(), occlusion.occlusionFromI nsideTarget().ToString()); 2236 EXPECT_EQ(gfx::Rect(0, 0, 100, 110).ToString(), occlusion.occlusionFromI nsideTarget().ToString());
2324 2237
2325 this->visitLayer(surface, occlusion); 2238 this->visitLayer(surface, occlusion);
2326 2239
2327 EXPECT_EQ(gfx::Rect(0, 0, 100, 110).ToString(), occlusion.occlusionFromO utsideTarget().ToString()); 2240 EXPECT_EQ(gfx::Rect(0, 0, 100, 110).ToString(), occlusion.occlusionFromO utsideTarget().ToString());
(...skipping 16 matching lines...) Expand all
2344 void runMyTest() 2257 void runMyTest()
2345 { 2258 {
2346 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200)); 2259 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(100, 200));
2347 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true); 2260 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true);
2348 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(0, 1 00), gfx::Size(100, 100)); 2261 this->createReplicaLayer(surface, this->identityMatrix, gfx::PointF(0, 1 00), gfx::Size(100, 100));
2349 typename Types::LayerType* overSurface = this->createDrawingLayer(parent , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(40, 100), true); 2262 typename Types::LayerType* overSurface = this->createDrawingLayer(parent , this->identityMatrix, gfx::PointF(0, 0), gfx::Size(40, 100), true);
2350 typename Types::LayerType* overReplica = this->createDrawingLayer(parent , this->identityMatrix, gfx::PointF(0, 100), gfx::Size(50, 100), true); 2263 typename Types::LayerType* overReplica = this->createDrawingLayer(parent , this->identityMatrix, gfx::PointF(0, 100), gfx::Size(50, 100), true);
2351 this->calcDrawEtc(parent); 2264 this->calcDrawEtc(parent);
2352 2265
2353 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2266 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2354 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2355 2267
2356 // These occlude the surface and replica differently, so we can test eac h one. 2268 // These occlude the surface and replica differently, so we can test eac h one.
2357 this->visitLayer(overReplica, occlusion); 2269 this->visitLayer(overReplica, occlusion);
2358 this->visitLayer(overSurface, occlusion); 2270 this->visitLayer(overSurface, occlusion);
2359 2271
2360 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 2272 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
2361 EXPECT_EQ(UnionRegions(gfx::Rect(0, 0, 40, 100), gfx::Rect(0, 100, 50, 1 00)).ToString(), occlusion.occlusionFromInsideTarget().ToString()); 2273 EXPECT_EQ(UnionRegions(gfx::Rect(0, 0, 40, 100), gfx::Rect(0, 100, 50, 1 00)).ToString(), occlusion.occlusionFromInsideTarget().ToString());
2362 2274
2363 this->visitLayer(surface, occlusion); 2275 this->visitLayer(surface, occlusion);
2364 2276
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
2477 // This test verifies that the surface cliprect does not end up empty an d clip away the entire unoccluded rect. 2389 // This test verifies that the surface cliprect does not end up empty an d clip away the entire unoccluded rect.
2478 2390
2479 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(80, 200)); 2391 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(80, 200));
2480 parent->setMasksToBounds(true); 2392 parent->setMasksToBounds(true);
2481 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true); 2393 typename Types::LayerType* surface = this->createDrawingSurface(parent, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), true);
2482 typename Types::LayerType* surfaceChild = this->createDrawingSurface(sur face, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), false); 2394 typename Types::LayerType* surfaceChild = this->createDrawingSurface(sur face, this->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 100), false);
2483 typename Types::LayerType* topmost = this->createDrawingLayer(parent, th is->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 50), true); 2395 typename Types::LayerType* topmost = this->createDrawingLayer(parent, th is->identityMatrix, gfx::PointF(0, 0), gfx::Size(100, 50), true);
2484 this->calcDrawEtc(parent); 2396 this->calcDrawEtc(parent);
2485 2397
2486 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2398 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2487 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2488 2399
2489 // |topmost| occludes everything partially so we know occlusion is happe ning at all. 2400 // |topmost| occludes everything partially so we know occlusion is happe ning at all.
2490 this->visitLayer(topmost, occlusion); 2401 this->visitLayer(topmost, occlusion);
2491 2402
2492 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 2403 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
2493 EXPECT_EQ(gfx::Rect(0, 0, 80, 50).ToString(), occlusion.occlusionFromIns ideTarget().ToString()); 2404 EXPECT_EQ(gfx::Rect(0, 0, 80, 50).ToString(), occlusion.occlusionFromIns ideTarget().ToString());
2494 2405
2495 // surfaceChild is not opaque and does not occlude, so we have a non-emp ty unoccluded area on surface. 2406 // surfaceChild is not opaque and does not occlude, so we have a non-emp ty unoccluded area on surface.
2496 this->visitLayer(surfaceChild, occlusion); 2407 this->visitLayer(surfaceChild, occlusion);
2497 2408
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2542 filters.append(WebKit::WebFilterOperation::createBlurFilter(10)); 2453 filters.append(WebKit::WebFilterOperation::createBlurFilter(10));
2543 filteredSurface->setBackgroundFilters(filters); 2454 filteredSurface->setBackgroundFilters(filters);
2544 2455
2545 // Save the distance of influence for the blur effect. 2456 // Save the distance of influence for the blur effect.
2546 int outsetTop, outsetRight, outsetBottom, outsetLeft; 2457 int outsetTop, outsetRight, outsetBottom, outsetLeft;
2547 filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft); 2458 filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft);
2548 2459
2549 this->calcDrawEtc(parent); 2460 this->calcDrawEtc(parent);
2550 2461
2551 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2462 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2552 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2553 2463
2554 // These layers occlude pixels directly beside the filteredSurface. Beca use filtered surface blends pixels in a radius, it will 2464 // These layers occlude pixels directly beside the filteredSurface. Beca use filtered surface blends pixels in a radius, it will
2555 // need to see some of the pixels (up to radius far) underneath the occl udingLayers. 2465 // need to see some of the pixels (up to radius far) underneath the occl udingLayers.
2556 this->visitLayer(occludingLayer5, occlusion); 2466 this->visitLayer(occludingLayer5, occlusion);
2557 this->visitLayer(occludingLayer4, occlusion); 2467 this->visitLayer(occludingLayer4, occlusion);
2558 this->visitLayer(occludingLayer3, occlusion); 2468 this->visitLayer(occludingLayer3, occlusion);
2559 this->visitLayer(occludingLayer2, occlusion); 2469 this->visitLayer(occludingLayer2, occlusion);
2560 this->visitLayer(occludingLayer1, occlusion); 2470 this->visitLayer(occludingLayer1, occlusion);
2561 2471
2562 Region expectedOcclusion; 2472 Region expectedOcclusion;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
2666 filteredSurface1->setBackgroundFilters(filters); 2576 filteredSurface1->setBackgroundFilters(filters);
2667 filteredSurface2->setBackgroundFilters(filters); 2577 filteredSurface2->setBackgroundFilters(filters);
2668 2578
2669 // Save the distance of influence for the blur effect. 2579 // Save the distance of influence for the blur effect.
2670 int outsetTop, outsetRight, outsetBottom, outsetLeft; 2580 int outsetTop, outsetRight, outsetBottom, outsetLeft;
2671 filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft); 2581 filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft);
2672 2582
2673 this->calcDrawEtc(root); 2583 this->calcDrawEtc(root);
2674 2584
2675 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2585 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2676 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2677 2586
2678 this->visitLayer(occludingLayerAbove, occlusion); 2587 this->visitLayer(occludingLayerAbove, occlusion);
2679 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 2588 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
2680 EXPECT_EQ(gfx::Rect(100 / 2, 100 / 2, 50 / 2, 50 / 2).ToString(), occlus ion.occlusionFromInsideTarget().ToString()); 2589 EXPECT_EQ(gfx::Rect(100 / 2, 100 / 2, 50 / 2, 50 / 2).ToString(), occlus ion.occlusionFromInsideTarget().ToString());
2681 2590
2682 this->visitLayer(filteredSurface2, occlusion); 2591 this->visitLayer(filteredSurface2, occlusion);
2683 this->visitContributingSurface(filteredSurface2, occlusion); 2592 this->visitContributingSurface(filteredSurface2, occlusion);
2684 this->visitLayer(filteredSurface1, occlusion); 2593 this->visitLayer(filteredSurface1, occlusion);
2685 this->visitContributingSurface(filteredSurface1, occlusion); 2594 this->visitContributingSurface(filteredSurface1, occlusion);
2686 2595
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2720 filters.append(WebKit::WebFilterOperation::createBlurFilter(12)); 2629 filters.append(WebKit::WebFilterOperation::createBlurFilter(12));
2721 filteredSurface->setBackgroundFilters(filters); 2630 filteredSurface->setBackgroundFilters(filters);
2722 2631
2723 // Save the distance of influence for the blur effect. 2632 // Save the distance of influence for the blur effect.
2724 int outsetTop, outsetRight, outsetBottom, outsetLeft; 2633 int outsetTop, outsetRight, outsetBottom, outsetLeft;
2725 filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft); 2634 filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft);
2726 2635
2727 this->calcDrawEtc(parent); 2636 this->calcDrawEtc(parent);
2728 2637
2729 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2638 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2730 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2731 2639
2732 // These layers occlude pixels directly beside the filteredSurface. Beca use filtered surface blends pixels in a radius, it will 2640 // These layers occlude pixels directly beside the filteredSurface. Beca use filtered surface blends pixels in a radius, it will
2733 // need to see some of the pixels (up to radius far) underneath the occl udingLayers. 2641 // need to see some of the pixels (up to radius far) underneath the occl udingLayers.
2734 this->visitLayer(occludingLayer5, occlusion); 2642 this->visitLayer(occludingLayer5, occlusion);
2735 this->visitLayer(occludingLayer4, occlusion); 2643 this->visitLayer(occludingLayer4, occlusion);
2736 this->visitLayer(occludingLayer3, occlusion); 2644 this->visitLayer(occludingLayer3, occlusion);
2737 this->visitLayer(occludingLayer2, occlusion); 2645 this->visitLayer(occludingLayer2, occlusion);
2738 this->visitLayer(occludingLayer1, occlusion); 2646 this->visitLayer(occludingLayer1, occlusion);
2739 2647
2740 Region expectedOcclusion; 2648 Region expectedOcclusion;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
2849 this->createReplicaLayer(filteredSurface, this->identityMatrix, gfx::Poi ntF(300, 0), gfx::Size()); 2757 this->createReplicaLayer(filteredSurface, this->identityMatrix, gfx::Poi ntF(300, 0), gfx::Size());
2850 2758
2851 // Filters make the layer own a surface. 2759 // Filters make the layer own a surface.
2852 WebKit::WebFilterOperations filters; 2760 WebKit::WebFilterOperations filters;
2853 filters.append(WebKit::WebFilterOperation::createBlurFilter(3)); 2761 filters.append(WebKit::WebFilterOperation::createBlurFilter(3));
2854 filteredSurface->setBackgroundFilters(filters); 2762 filteredSurface->setBackgroundFilters(filters);
2855 2763
2856 this->calcDrawEtc(parent); 2764 this->calcDrawEtc(parent);
2857 2765
2858 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2766 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2859 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2860 2767
2861 // The surface has a background blur, so it blurs non-opaque pixels belo w it. 2768 // The surface has a background blur, so it blurs non-opaque pixels belo w it.
2862 this->visitLayer(filteredSurface, occlusion); 2769 this->visitLayer(filteredSurface, occlusion);
2863 this->visitContributingSurface(filteredSurface, occlusion); 2770 this->visitContributingSurface(filteredSurface, occlusion);
2864 2771
2865 this->visitLayer(behindReplicaLayer, occlusion); 2772 this->visitLayer(behindReplicaLayer, occlusion);
2866 this->visitLayer(behindSurfaceLayer, occlusion); 2773 this->visitLayer(behindSurfaceLayer, occlusion);
2867 2774
2868 // The layers behind the surface are not blurred, and their occlusion do es not change, until we leave the surface. 2775 // The layers behind the surface are not blurred, and their occlusion do es not change, until we leave the surface.
2869 // So it should not be modified by the filter here. 2776 // So it should not be modified by the filter here.
(...skipping 28 matching lines...) Expand all
2898 typename Types::LayerType* aboveReplicaLayer = this->createDrawingLayer( parent, this->identityMatrix, gfx::PointF(200, 50), gfx::Size(50, 50), true); 2805 typename Types::LayerType* aboveReplicaLayer = this->createDrawingLayer( parent, this->identityMatrix, gfx::PointF(200, 50), gfx::Size(50, 50), true);
2899 2806
2900 // Filters make the layer own a surface. 2807 // Filters make the layer own a surface.
2901 WebKit::WebFilterOperations filters; 2808 WebKit::WebFilterOperations filters;
2902 filters.append(WebKit::WebFilterOperation::createBlurFilter(3)); 2809 filters.append(WebKit::WebFilterOperation::createBlurFilter(3));
2903 filteredSurface->setBackgroundFilters(filters); 2810 filteredSurface->setBackgroundFilters(filters);
2904 2811
2905 this->calcDrawEtc(parent); 2812 this->calcDrawEtc(parent);
2906 2813
2907 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2814 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2908 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2909 2815
2910 this->visitLayer(aboveReplicaLayer, occlusion); 2816 this->visitLayer(aboveReplicaLayer, occlusion);
2911 this->visitLayer(aboveSurfaceLayer, occlusion); 2817 this->visitLayer(aboveSurfaceLayer, occlusion);
2912 2818
2913 this->visitLayer(filteredSurface, occlusion); 2819 this->visitLayer(filteredSurface, occlusion);
2914 2820
2915 { 2821 {
2916 // The layers above the filtered surface occlude from outside. 2822 // The layers above the filtered surface occlude from outside.
2917 gfx::Rect occlusionAboveSurface = gfx::Rect(0, 0, 50, 50); 2823 gfx::Rect occlusionAboveSurface = gfx::Rect(0, 0, 50, 50);
2918 gfx::Rect occlusionAboveReplica = gfx::Rect(150, 0, 50, 50); 2824 gfx::Rect occlusionAboveReplica = gfx::Rect(150, 0, 50, 50);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2964 filters.append(WebKit::WebFilterOperation::createBlurFilter(3)); 2870 filters.append(WebKit::WebFilterOperation::createBlurFilter(3));
2965 filteredSurface->setBackgroundFilters(filters); 2871 filteredSurface->setBackgroundFilters(filters);
2966 2872
2967 // Save the distance of influence for the blur effect. 2873 // Save the distance of influence for the blur effect.
2968 int outsetTop, outsetRight, outsetBottom, outsetLeft; 2874 int outsetTop, outsetRight, outsetBottom, outsetLeft;
2969 filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft); 2875 filters.getOutsets(outsetTop, outsetRight, outsetBottom, outsetLeft);
2970 2876
2971 this->calcDrawEtc(parent); 2877 this->calcDrawEtc(parent);
2972 2878
2973 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2879 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
2974 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
2975 2880
2976 this->visitLayer(besideReplicaLayer, occlusion); 2881 this->visitLayer(besideReplicaLayer, occlusion);
2977 this->visitLayer(besideSurfaceLayer, occlusion); 2882 this->visitLayer(besideSurfaceLayer, occlusion);
2978 this->visitLayer(aboveReplicaLayer, occlusion); 2883 this->visitLayer(aboveReplicaLayer, occlusion);
2979 this->visitLayer(aboveSurfaceLayer, occlusion); 2884 this->visitLayer(aboveSurfaceLayer, occlusion);
2980 2885
2981 // The surface has a background blur, so it blurs non-opaque pixels belo w it. 2886 // The surface has a background blur, so it blurs non-opaque pixels belo w it.
2982 this->visitLayer(filteredSurface, occlusion); 2887 this->visitLayer(filteredSurface, occlusion);
2983 this->visitContributingSurface(filteredSurface, occlusion); 2888 this->visitContributingSurface(filteredSurface, occlusion);
2984 2889
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
3019 { 2924 {
3020 gfx::Size trackingSize(100, 100); 2925 gfx::Size trackingSize(100, 100);
3021 gfx::Size belowTrackingSize(99, 99); 2926 gfx::Size belowTrackingSize(99, 99);
3022 2927
3023 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(400, 400)); 2928 typename Types::ContentLayerType* parent = this->createRoot(this->identi tyMatrix, gfx::PointF(0, 0), gfx::Size(400, 400));
3024 typename Types::LayerType* large = this->createDrawingLayer(parent, this ->identityMatrix, gfx::PointF(0, 0), trackingSize, true); 2929 typename Types::LayerType* large = this->createDrawingLayer(parent, this ->identityMatrix, gfx::PointF(0, 0), trackingSize, true);
3025 typename Types::LayerType* small = this->createDrawingLayer(parent, this ->identityMatrix, gfx::PointF(0, 0), belowTrackingSize, true); 2930 typename Types::LayerType* small = this->createDrawingLayer(parent, this ->identityMatrix, gfx::PointF(0, 0), belowTrackingSize, true);
3026 this->calcDrawEtc(parent); 2931 this->calcDrawEtc(parent);
3027 2932
3028 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000)); 2933 TestOcclusionTrackerWithClip<typename Types::LayerType, typename Types:: RenderSurfaceType> occlusion(gfx::Rect(0, 0, 1000, 1000));
3029 occlusion.setLayerClipRect(gfx::Rect(0, 0, 1000, 1000));
3030 occlusion.setMinimumTrackingSize(trackingSize); 2934 occlusion.setMinimumTrackingSize(trackingSize);
3031 2935
3032 // The small layer is not tracked because it is too small. 2936 // The small layer is not tracked because it is too small.
3033 this->visitLayer(small, occlusion); 2937 this->visitLayer(small, occlusion);
3034 2938
3035 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString()); 2939 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromOutsideTarget() .ToString());
3036 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromInsideTarget(). ToString()); 2940 EXPECT_EQ(gfx::Rect().ToString(), occlusion.occlusionFromInsideTarget(). ToString());
3037 2941
3038 // The large layer is tracked as it is large enough. 2942 // The large layer is tracked as it is large enough.
3039 this->visitLayer(large, occlusion); 2943 this->visitLayer(large, occlusion);
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
3146 hasOcclusionFromOutsideTargetSurface = false; 3050 hasOcclusionFromOutsideTargetSurface = false;
3147 EXPECT_RECT_EQ(gfx::Rect(0, 0, 50, 50), occlusion.unoccludedContributing SurfaceContentRect(smaller, false, gfx::Rect(0, 0, 100, 100), &hasOcclusionFromO utsideTargetSurface)); 3051 EXPECT_RECT_EQ(gfx::Rect(0, 0, 50, 50), occlusion.unoccludedContributing SurfaceContentRect(smaller, false, gfx::Rect(0, 0, 100, 100), &hasOcclusionFromO utsideTargetSurface));
3148 EXPECT_FALSE(hasOcclusionFromOutsideTargetSurface); 3052 EXPECT_FALSE(hasOcclusionFromOutsideTargetSurface);
3149 } 3053 }
3150 }; 3054 };
3151 3055
3152 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipIsExternalOcclusion) 3056 ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipIsExternalOcclusion)
3153 3057
3154 } // namespace 3058 } // namespace
3155 } // namespace cc 3059 } // namespace cc
OLDNEW
« no previous file with comments | « cc/occlusion_tracker.cc ('k') | cc/quad_culler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698