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

Side by Side Diff: cc/occlusion_tracker.cc

Issue 11308153: Migrate most of cc/ from WebKit::WebTransformationMatrix to gfx::Transform (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Patch for landing Created 8 years 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.h ('k') | cc/occlusion_tracker_unittest.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 <algorithm> 7 #include <algorithm>
8 8
9 #include "cc/layer.h" 9 #include "cc/layer.h"
10 #include "cc/layer_impl.h" 10 #include "cc/layer_impl.h"
11 #include "cc/math_util.h" 11 #include "cc/math_util.h"
12 #include "cc/overdraw_metrics.h" 12 #include "cc/overdraw_metrics.h"
13 #include "ui/gfx/quad_f.h" 13 #include "ui/gfx/quad_f.h"
14 #include "ui/gfx/rect_conversions.h" 14 #include "ui/gfx/rect_conversions.h"
15 15
16 using namespace std; 16 using namespace std;
17 using WebKit::WebTransformationMatrix;
18 17
19 namespace cc { 18 namespace cc {
20 19
21 template<typename LayerType, typename RenderSurfaceType> 20 template<typename LayerType, typename RenderSurfaceType>
22 OcclusionTrackerBase<LayerType, RenderSurfaceType>::OcclusionTrackerBase(gfx::Re ct rootTargetRect, bool recordMetricsForFrame) 21 OcclusionTrackerBase<LayerType, RenderSurfaceType>::OcclusionTrackerBase(gfx::Re ct rootTargetRect, bool recordMetricsForFrame)
23 : m_rootTargetRect(rootTargetRect) 22 : m_rootTargetRect(rootTargetRect)
24 , m_overdrawMetrics(OverdrawMetrics::create(recordMetricsForFrame)) 23 , m_overdrawMetrics(OverdrawMetrics::create(recordMetricsForFrame))
25 , m_occludingScreenSpaceRects(0) 24 , m_occludingScreenSpaceRects(0)
26 , m_nonOccludingScreenSpaceRects(0) 25 , m_nonOccludingScreenSpaceRects(0)
27 { 26 {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 m_stack.back().occlusionInTarget.Clear(); 113 m_stack.back().occlusionInTarget.Clear();
115 } else { 114 } else {
116 if (!surfaceTransformsToTargetKnown(surface)) 115 if (!surfaceTransformsToTargetKnown(surface))
117 m_stack.back().occlusionInTarget.Clear(); 116 m_stack.back().occlusionInTarget.Clear();
118 if (!surfaceTransformsToScreenKnown(surface)) 117 if (!surfaceTransformsToScreenKnown(surface))
119 m_stack.back().occlusionInScreen.Clear(); 118 m_stack.back().occlusionInScreen.Clear();
120 } 119 }
121 } 120 }
122 121
123 template<typename RenderSurfaceType> 122 template<typename RenderSurfaceType>
124 static inline Region transformSurfaceOpaqueRegion(const RenderSurfaceType* surfa ce, const Region& region, const WebTransformationMatrix& transform) 123 static inline Region transformSurfaceOpaqueRegion(const RenderSurfaceType* surfa ce, const Region& region, const gfx::Transform& transform)
125 { 124 {
126 // Verify that rects within the |surface| will remain rects in its target su rface after applying |transform|. If this is true, then 125 // Verify that rects within the |surface| will remain rects in its target su rface after applying |transform|. If this is true, then
127 // apply |transform| to each rect within |region| in order to transform the entire Region. 126 // apply |transform| to each rect within |region| in order to transform the entire Region.
128 127
129 bool clipped; 128 bool clipped;
130 gfx::QuadF transformedBoundsQuad = MathUtil::mapQuad(transform, gfx::QuadF(r egion.bounds()), clipped); 129 gfx::QuadF transformedBoundsQuad = MathUtil::mapQuad(transform, gfx::QuadF(r egion.bounds()), clipped);
131 // FIXME: Find a rect interior to each transformed quad. 130 // FIXME: Find a rect interior to each transformed quad.
132 if (clipped || !transformedBoundsQuad.IsRectilinear()) 131 if (clipped || !transformedBoundsQuad.IsRectilinear())
133 return Region(); 132 return Region();
134 133
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 int shrinkRight = occlusionRect.right() == affectedArea.right() ? 0 : -e xpandedPixel.x(); 174 int shrinkRight = occlusionRect.right() == affectedArea.right() ? 0 : -e xpandedPixel.x();
176 int shrinkBottom = occlusionRect.bottom() == affectedArea.bottom() ? 0 : -expandedPixel.y(); 175 int shrinkBottom = occlusionRect.bottom() == affectedArea.bottom() ? 0 : -expandedPixel.y();
177 176
178 occlusionRect.Inset(shrinkLeft, shrinkTop, shrinkRight, shrinkBottom); 177 occlusionRect.Inset(shrinkLeft, shrinkTop, shrinkRight, shrinkBottom);
179 178
180 occlusion.Union(occlusionRect); 179 occlusion.Union(occlusionRect);
181 } 180 }
182 } 181 }
183 182
184 template<typename LayerType> 183 template<typename LayerType>
185 static void reduceOcclusionBelowSurface(LayerType* contributingLayer, const gfx: :Rect& surfaceRect, const WebTransformationMatrix& surfaceTransform, LayerType* renderTarget, Region& occlusionInTarget, Region& occlusionInScreen) 184 static void reduceOcclusionBelowSurface(LayerType* contributingLayer, const gfx: :Rect& surfaceRect, const gfx::Transform& surfaceTransform, LayerType* renderTar get, Region& occlusionInTarget, Region& occlusionInScreen)
186 { 185 {
187 if (surfaceRect.IsEmpty()) 186 if (surfaceRect.IsEmpty())
188 return; 187 return;
189 188
190 gfx::Rect boundsInTarget = gfx::ToEnclosingRect(MathUtil::mapClippedRect(sur faceTransform, gfx::RectF(surfaceRect))); 189 gfx::Rect boundsInTarget = gfx::ToEnclosingRect(MathUtil::mapClippedRect(sur faceTransform, gfx::RectF(surfaceRect)));
191 if (!contributingLayer->renderSurface()->clipRect().IsEmpty()) 190 if (!contributingLayer->renderSurface()->clipRect().IsEmpty())
192 boundsInTarget.Intersect(contributingLayer->renderSurface()->clipRect()) ; 191 boundsInTarget.Intersect(contributingLayer->renderSurface()->clipRect()) ;
193 192
194 int outsetTop, outsetRight, outsetBottom, outsetLeft; 193 int outsetTop, outsetRight, outsetBottom, outsetLeft;
195 contributingLayer->backgroundFilters().getOutsets(outsetTop, outsetRight, ou tsetBottom, outsetLeft); 194 contributingLayer->backgroundFilters().getOutsets(outsetTop, outsetRight, ou tsetBottom, outsetLeft);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 241
243 if (oldTarget->backgroundFilters().hasFilterThatMovesPixels()) { 242 if (oldTarget->backgroundFilters().hasFilterThatMovesPixels()) {
244 reduceOcclusionBelowSurface(oldTarget, unoccludedSurfaceRect, oldSurface ->drawTransform(), newTarget, m_stack.back().occlusionInTarget, m_stack.back().o cclusionInScreen); 243 reduceOcclusionBelowSurface(oldTarget, unoccludedSurfaceRect, oldSurface ->drawTransform(), newTarget, m_stack.back().occlusionInTarget, m_stack.back().o cclusionInScreen);
245 if (oldTarget->hasReplica()) 244 if (oldTarget->hasReplica())
246 reduceOcclusionBelowSurface(oldTarget, unoccludedReplicaRect, oldSur face->replicaDrawTransform(), newTarget, m_stack.back().occlusionInTarget, m_sta ck.back().occlusionInScreen); 245 reduceOcclusionBelowSurface(oldTarget, unoccludedReplicaRect, oldSur face->replicaDrawTransform(), newTarget, m_stack.back().occlusionInTarget, m_sta ck.back().occlusionInScreen);
247 } 246 }
248 } 247 }
249 248
250 // FIXME: Remove usePaintTracking when paint tracking is on for paint culling. 249 // FIXME: Remove usePaintTracking when paint tracking is on for paint culling.
251 template<typename LayerType> 250 template<typename LayerType>
252 static inline void addOcclusionBehindLayer(Region& region, const LayerType* laye r, const WebTransformationMatrix& transform, const Region& opaqueContents, const gfx::Rect& clipRectInTarget, const gfx::Size& minimumTrackingSize, std::vector< gfx::Rect>* occludingScreenSpaceRects, std::vector<gfx::Rect>* nonOccludingScree nSpaceRects) 251 static inline void addOcclusionBehindLayer(Region& region, const LayerType* laye r, const gfx::Transform& transform, const Region& opaqueContents, const gfx::Rec t& clipRectInTarget, const gfx::Size& minimumTrackingSize, std::vector<gfx::Rect >* occludingScreenSpaceRects, std::vector<gfx::Rect>* nonOccludingScreenSpaceRec ts)
253 { 252 {
254 DCHECK(layer->visibleContentRect().Contains(opaqueContents.bounds())); 253 DCHECK(layer->visibleContentRect().Contains(opaqueContents.bounds()));
255 254
256 bool clipped; 255 bool clipped;
257 gfx::QuadF visibleTransformedQuad = MathUtil::mapQuad(transform, gfx::QuadF( layer->visibleContentRect()), clipped); 256 gfx::QuadF visibleTransformedQuad = MathUtil::mapQuad(transform, gfx::QuadF( layer->visibleContentRect()), clipped);
258 // FIXME: Find a rect interior to each transformed quad. 257 // FIXME: Find a rect interior to each transformed quad.
259 if (clipped || !visibleTransformedQuad.IsRectilinear()) 258 if (clipped || !visibleTransformedQuad.IsRectilinear())
260 return; 259 return;
261 260
262 for (Region::Iterator opaqueContentRects(opaqueContents); opaqueContentRects .has_rect(); opaqueContentRects.next()) { 261 for (Region::Iterator opaqueContentRects(opaqueContents); opaqueContentRects .has_rect(); opaqueContentRects.next()) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 return; 301 return;
303 302
304 gfx::Rect clipRectInTarget = layerClipRectInTarget(layer); 303 gfx::Rect clipRectInTarget = layerClipRectInTarget(layer);
305 if (layerTransformsToTargetKnown(layer)) 304 if (layerTransformsToTargetKnown(layer))
306 addOcclusionBehindLayer<LayerType>(m_stack.back().occlusionInTarget, lay er, layer->drawTransform(), opaqueContents, clipRectInTarget, m_minimumTrackingS ize, 0, 0); 305 addOcclusionBehindLayer<LayerType>(m_stack.back().occlusionInTarget, lay er, layer->drawTransform(), opaqueContents, clipRectInTarget, m_minimumTrackingS ize, 0, 0);
307 306
308 // We must clip the occlusion within the layer's clipRectInTarget within scr een space as well. If the clip rect can't be moved to screen space and 307 // We must clip the occlusion within the layer's clipRectInTarget within scr een space as well. If the clip rect can't be moved to screen space and
309 // remain rectilinear, then we don't add any occlusion in screen space. 308 // remain rectilinear, then we don't add any occlusion in screen space.
310 309
311 if (layerTransformsToScreenKnown(layer)) { 310 if (layerTransformsToScreenKnown(layer)) {
312 WebTransformationMatrix targetToScreenTransform = m_stack.back().target- >renderSurface()->screenSpaceTransform(); 311 gfx::Transform targetToScreenTransform = m_stack.back().target->renderSu rface()->screenSpaceTransform();
313 bool clipped; 312 bool clipped;
314 gfx::QuadF clipQuadInScreen = MathUtil::mapQuad(targetToScreenTransform, gfx::QuadF(clipRectInTarget), clipped); 313 gfx::QuadF clipQuadInScreen = MathUtil::mapQuad(targetToScreenTransform, gfx::QuadF(clipRectInTarget), clipped);
315 // FIXME: Find a rect interior to the transformed clip quad. 314 // FIXME: Find a rect interior to the transformed clip quad.
316 if (clipped || !clipQuadInScreen.IsRectilinear()) 315 if (clipped || !clipQuadInScreen.IsRectilinear())
317 return; 316 return;
318 gfx::Rect clipRectInScreen = gfx::IntersectRects(m_rootTargetRect, gfx:: ToEnclosedRect(clipQuadInScreen.BoundingBox())); 317 gfx::Rect clipRectInScreen = gfx::IntersectRects(m_rootTargetRect, gfx:: ToEnclosedRect(clipQuadInScreen.BoundingBox()));
319 addOcclusionBehindLayer<LayerType>(m_stack.back().occlusionInScreen, lay er, layer->screenSpaceTransform(), opaqueContents, clipRectInScreen, m_minimumTr ackingSize, m_occludingScreenSpaceRects, m_nonOccludingScreenSpaceRects); 318 addOcclusionBehindLayer<LayerType>(m_stack.back().occlusionInScreen, lay er, layer->screenSpaceTransform(), opaqueContents, clipRectInScreen, m_minimumTr ackingSize, m_occludingScreenSpaceRects, m_nonOccludingScreenSpaceRects);
320 } 319 }
321 } 320 }
322 321
323 static inline bool testContentRectOccluded(const gfx::Rect& contentRect, const W ebTransformationMatrix& contentSpaceTransform, const gfx::Rect& clipRectInTarget , const Region& occlusion) 322 static inline bool testContentRectOccluded(const gfx::Rect& contentRect, const g fx::Transform& contentSpaceTransform, const gfx::Rect& clipRectInTarget, const R egion& occlusion)
324 { 323 {
325 gfx::RectF transformedRect = MathUtil::mapClippedRect(contentSpaceTransform, gfx::RectF(contentRect)); 324 gfx::RectF transformedRect = MathUtil::mapClippedRect(contentSpaceTransform, gfx::RectF(contentRect));
326 // Take the gfx::ToEnclosingRect, as we want to include partial pixels in th e test. 325 // Take the gfx::ToEnclosingRect, as we want to include partial pixels in th e test.
327 gfx::Rect targetRect = gfx::IntersectRects(gfx::ToEnclosingRect(transformedR ect), clipRectInTarget); 326 gfx::Rect targetRect = gfx::IntersectRects(gfx::ToEnclosingRect(transformedR ect), clipRectInTarget);
328 return occlusion.Contains(targetRect); 327 return occlusion.Contains(targetRect);
329 } 328 }
330 329
331 template<typename LayerType, typename RenderSurfaceType> 330 template<typename LayerType, typename RenderSurfaceType>
332 bool OcclusionTrackerBase<LayerType, RenderSurfaceType>::occluded(const LayerTyp e* renderTarget, const gfx::Rect& contentRect, const WebKit::WebTransformationMa trix& drawTransform, bool implDrawTransformIsUnknown, const gfx::Rect& clippedRe ctInTarget, bool* hasOcclusionFromOutsideTargetSurface) const 331 bool OcclusionTrackerBase<LayerType, RenderSurfaceType>::occluded(const LayerTyp e* renderTarget, const gfx::Rect& contentRect, const gfx::Transform& drawTransfo rm, bool implDrawTransformIsUnknown, const gfx::Rect& clippedRectInTarget, bool* hasOcclusionFromOutsideTargetSurface) const
333 { 332 {
334 if (hasOcclusionFromOutsideTargetSurface) 333 if (hasOcclusionFromOutsideTargetSurface)
335 *hasOcclusionFromOutsideTargetSurface = false; 334 *hasOcclusionFromOutsideTargetSurface = false;
336 335
337 DCHECK(!m_stack.empty()); 336 DCHECK(!m_stack.empty());
338 if (m_stack.empty()) 337 if (m_stack.empty())
339 return false; 338 return false;
340 if (contentRect.IsEmpty()) 339 if (contentRect.IsEmpty())
341 return true; 340 return true;
342 341
(...skipping 18 matching lines...) Expand all
361 static inline gfx::Rect rectSubtractRegion(const gfx::Rect& rect, const Region& region) 360 static inline gfx::Rect rectSubtractRegion(const gfx::Rect& rect, const Region& region)
362 { 361 {
363 if (region.IsEmpty()) 362 if (region.IsEmpty())
364 return rect; 363 return rect;
365 364
366 Region rectRegion(rect); 365 Region rectRegion(rect);
367 rectRegion.Subtract(region); 366 rectRegion.Subtract(region);
368 return rectRegion.bounds(); 367 return rectRegion.bounds();
369 } 368 }
370 369
371 static inline gfx::Rect computeUnoccludedContentRect(const gfx::Rect& contentRec t, const WebTransformationMatrix& contentSpaceTransform, const gfx::Rect& clipRe ctInTarget, const Region& occlusion) 370 static inline gfx::Rect computeUnoccludedContentRect(const gfx::Rect& contentRec t, const gfx::Transform& contentSpaceTransform, const gfx::Rect& clipRectInTarge t, const Region& occlusion)
372 { 371 {
373 if (!contentSpaceTransform.isInvertible()) 372 if (!contentSpaceTransform.IsInvertible())
374 return contentRect; 373 return contentRect;
375 374
376 // Take the ToEnclosingRect at each step, as we want to contain any unocclud ed partial pixels in the resulting Rect. 375 // Take the ToEnclosingRect at each step, as we want to contain any unocclud ed partial pixels in the resulting Rect.
377 gfx::RectF transformedRect = MathUtil::mapClippedRect(contentSpaceTransform, gfx::RectF(contentRect)); 376 gfx::RectF transformedRect = MathUtil::mapClippedRect(contentSpaceTransform, gfx::RectF(contentRect));
378 gfx::Rect shrunkRect = rectSubtractRegion(gfx::IntersectRects(gfx::ToEnclosi ngRect(transformedRect), clipRectInTarget), occlusion); 377 gfx::Rect shrunkRect = rectSubtractRegion(gfx::IntersectRects(gfx::ToEnclosi ngRect(transformedRect), clipRectInTarget), occlusion);
379 gfx::Rect unoccludedRect = gfx::ToEnclosingRect(MathUtil::projectClippedRect (contentSpaceTransform.inverse(), gfx::RectF(shrunkRect))); 378 gfx::Rect unoccludedRect = gfx::ToEnclosingRect(MathUtil::projectClippedRect (MathUtil::inverse(contentSpaceTransform), gfx::RectF(shrunkRect)));
380 // The rect back in content space is a bounding box and may extend outside o f the original contentRect, so clamp it to the contentRectBounds. 379 // The rect back in content space is a bounding box and may extend outside o f the original contentRect, so clamp it to the contentRectBounds.
381 return gfx::IntersectRects(unoccludedRect, contentRect); 380 return gfx::IntersectRects(unoccludedRect, contentRect);
382 } 381 }
383 382
384 template<typename LayerType, typename RenderSurfaceType> 383 template<typename LayerType, typename RenderSurfaceType>
385 gfx::Rect OcclusionTrackerBase<LayerType, RenderSurfaceType>::unoccludedContentR ect(const LayerType* renderTarget, const gfx::Rect& contentRect, const WebKit::W ebTransformationMatrix& drawTransform, bool implDrawTransformIsUnknown, const gf x::Rect& clippedRectInTarget, bool* hasOcclusionFromOutsideTargetSurface) const 384 gfx::Rect OcclusionTrackerBase<LayerType, RenderSurfaceType>::unoccludedContentR ect(const LayerType* renderTarget, const gfx::Rect& contentRect, const gfx::Tran sform& drawTransform, bool implDrawTransformIsUnknown, const gfx::Rect& clippedR ectInTarget, bool* hasOcclusionFromOutsideTargetSurface) const
386 { 385 {
387 DCHECK(!m_stack.empty()); 386 DCHECK(!m_stack.empty());
388 if (m_stack.empty()) 387 if (m_stack.empty())
389 return contentRect; 388 return contentRect;
390 if (contentRect.IsEmpty()) 389 if (contentRect.IsEmpty())
391 return contentRect; 390 return contentRect;
392 391
393 DCHECK(renderTarget->renderTarget() == renderTarget); 392 DCHECK(renderTarget->renderTarget() == renderTarget);
394 DCHECK(renderTarget->renderSurface()); 393 DCHECK(renderTarget->renderSurface());
395 DCHECK(renderTarget == m_stack.back().target); 394 DCHECK(renderTarget == m_stack.back().target);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 gfx::Rect surfaceClipRect = surface->clipRect(); 431 gfx::Rect surfaceClipRect = surface->clipRect();
433 if (surfaceClipRect.IsEmpty()) { 432 if (surfaceClipRect.IsEmpty()) {
434 const LayerType* contributingSurfaceRenderTarget = layer->parent()->rend erTarget(); 433 const LayerType* contributingSurfaceRenderTarget = layer->parent()->rend erTarget();
435 surfaceClipRect = gfx::IntersectRects(contributingSurfaceRenderTarget->r enderSurface()->contentRect(), gfx::ToEnclosingRect(surface->drawableContentRect ())); 434 surfaceClipRect = gfx::IntersectRects(contributingSurfaceRenderTarget->r enderSurface()->contentRect(), gfx::ToEnclosingRect(surface->drawableContentRect ()));
436 } 435 }
437 436
438 // A contributing surface doesn't get occluded by things inside its own surf ace, so only things outside the surface can occlude it. That occlusion is 437 // A contributing surface doesn't get occluded by things inside its own surf ace, so only things outside the surface can occlude it. That occlusion is
439 // found just below the top of the stack (if it exists). 438 // found just below the top of the stack (if it exists).
440 bool hasOcclusion = m_stack.size() > 1; 439 bool hasOcclusion = m_stack.size() > 1;
441 440
442 const WebTransformationMatrix& transformToScreen = forReplica ? surface->rep licaScreenSpaceTransform() : surface->screenSpaceTransform(); 441 const gfx::Transform& transformToScreen = forReplica ? surface->replicaScree nSpaceTransform() : surface->screenSpaceTransform();
443 const WebTransformationMatrix& transformToTarget = forReplica ? surface->rep licaDrawTransform() : surface->drawTransform(); 442 const gfx::Transform& transformToTarget = forReplica ? surface->replicaDrawT ransform() : surface->drawTransform();
444 443
445 gfx::Rect unoccludedInScreen = contentRect; 444 gfx::Rect unoccludedInScreen = contentRect;
446 if (surfaceTransformsToScreenKnown(surface)) { 445 if (surfaceTransformsToScreenKnown(surface)) {
447 if (hasOcclusion) { 446 if (hasOcclusion) {
448 const StackObject& secondLast = m_stack[m_stack.size() - 2]; 447 const StackObject& secondLast = m_stack[m_stack.size() - 2];
449 unoccludedInScreen = computeUnoccludedContentRect(contentRect, trans formToScreen, m_rootTargetRect, secondLast.occlusionInScreen); 448 unoccludedInScreen = computeUnoccludedContentRect(contentRect, trans formToScreen, m_rootTargetRect, secondLast.occlusionInScreen);
450 } else 449 } else
451 unoccludedInScreen = computeUnoccludedContentRect(contentRect, trans formToScreen, m_rootTargetRect, Region()); 450 unoccludedInScreen = computeUnoccludedContentRect(contentRect, trans formToScreen, m_rootTargetRect, Region());
452 } 451 }
453 452
(...skipping 18 matching lines...) Expand all
472 // FIXME: we could remove this helper function, but unit tests currently ove rride this 471 // FIXME: we could remove this helper function, but unit tests currently ove rride this
473 // function, and they need to be verified/adjusted before this can be removed. 472 // function, and they need to be verified/adjusted before this can be removed.
474 return layer->drawableContentRect(); 473 return layer->drawableContentRect();
475 } 474 }
476 475
477 // Instantiate (and export) templates here for the linker. 476 // Instantiate (and export) templates here for the linker.
478 template class OcclusionTrackerBase<Layer, RenderSurface>; 477 template class OcclusionTrackerBase<Layer, RenderSurface>;
479 template class OcclusionTrackerBase<LayerImpl, RenderSurfaceImpl>; 478 template class OcclusionTrackerBase<LayerImpl, RenderSurfaceImpl>;
480 479
481 } // namespace cc 480 } // namespace cc
OLDNEW
« no previous file with comments | « cc/occlusion_tracker.h ('k') | cc/occlusion_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698