OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "config.h" | |
6 | |
7 #include "cc/tiled_layer.h" | 5 #include "cc/tiled_layer.h" |
8 | 6 |
9 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "build/build_config.h" |
10 #include "cc/geometry.h" | 9 #include "cc/geometry.h" |
11 #include "cc/layer_impl.h" | 10 #include "cc/layer_impl.h" |
12 #include "cc/layer_tree_host.h" | 11 #include "cc/layer_tree_host.h" |
13 #include "cc/overdraw_metrics.h" | 12 #include "cc/overdraw_metrics.h" |
14 #include "cc/tiled_layer_impl.h" | 13 #include "cc/tiled_layer_impl.h" |
15 #include "third_party/khronos/GLES2/gl2.h" | 14 #include "third_party/khronos/GLES2/gl2.h" |
16 #include "ui/gfx/rect_conversions.h" | 15 #include "ui/gfx/rect_conversions.h" |
17 | 16 |
18 using namespace std; | 17 using namespace std; |
19 using WebKit::WebTransformationMatrix; | 18 using WebKit::WebTransformationMatrix; |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 | 253 |
255 scoped_ptr<UpdatableTile> tile(UpdatableTile::create(updater()->createResour
ce(resourceManager()))); | 254 scoped_ptr<UpdatableTile> tile(UpdatableTile::create(updater()->createResour
ce(resourceManager()))); |
256 tile->managedResource()->setDimensions(m_tiler->tileSize(), m_textureFormat)
; | 255 tile->managedResource()->setDimensions(m_tiler->tileSize(), m_textureFormat)
; |
257 | 256 |
258 UpdatableTile* addedTile = tile.get(); | 257 UpdatableTile* addedTile = tile.get(); |
259 m_tiler->addTile(tile.PassAs<LayerTilingData::Tile>(), i, j); | 258 m_tiler->addTile(tile.PassAs<LayerTilingData::Tile>(), i, j); |
260 | 259 |
261 addedTile->dirtyRect = m_tiler->tileRect(addedTile); | 260 addedTile->dirtyRect = m_tiler->tileRect(addedTile); |
262 | 261 |
263 // Temporary diagnostic crash. | 262 // Temporary diagnostic crash. |
264 if (!addedTile) | 263 CHECK(addedTile); |
265 CRASH(); | 264 CHECK(tileAt(i, j)); |
266 if (!tileAt(i, j)) | |
267 CRASH(); | |
268 | 265 |
269 return addedTile; | 266 return addedTile; |
270 } | 267 } |
271 | 268 |
272 void TiledLayer::setNeedsDisplayRect(const gfx::RectF& dirtyRect) | 269 void TiledLayer::setNeedsDisplayRect(const gfx::RectF& dirtyRect) |
273 { | 270 { |
274 invalidateContentRect(layerRectToContentRect(dirtyRect)); | 271 invalidateContentRect(layerRectToContentRect(dirtyRect)); |
275 ContentsScalingLayer::setNeedsDisplayRect(dirtyRect); | 272 ContentsScalingLayer::setNeedsDisplayRect(dirtyRect); |
276 } | 273 } |
277 | 274 |
278 void TiledLayer::setUseLCDText(bool useLCDText) | 275 void TiledLayer::setUseLCDText(bool useLCDText) |
279 { | 276 { |
280 ContentsScalingLayer::setUseLCDText(useLCDText); | 277 ContentsScalingLayer::setUseLCDText(useLCDText); |
281 | 278 |
282 LayerTilingData::BorderTexelOption borderTexelOption; | 279 LayerTilingData::BorderTexelOption borderTexelOption; |
283 #if OS(ANDROID) | 280 #if defined(OS_ANDROID) |
284 // Always want border texels and GL_LINEAR due to pinch zoom. | 281 // Always want border texels and GL_LINEAR due to pinch zoom. |
285 borderTexelOption = LayerTilingData::HasBorderTexels; | 282 borderTexelOption = LayerTilingData::HasBorderTexels; |
286 #else | 283 #else |
287 borderTexelOption = useLCDText ? LayerTilingData::NoBorderTexels : LayerTili
ngData::HasBorderTexels; | 284 borderTexelOption = useLCDText ? LayerTilingData::NoBorderTexels : LayerTili
ngData::HasBorderTexels; |
288 #endif | 285 #endif |
289 setBorderTexelOption(borderTexelOption); | 286 setBorderTexelOption(borderTexelOption); |
290 } | 287 } |
291 | 288 |
292 void TiledLayer::invalidateContentRect(const gfx::Rect& contentRect) | 289 void TiledLayer::invalidateContentRect(const gfx::Rect& contentRect) |
293 { | 290 { |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 | 480 |
484 tile->updateRect = sourceRect; | 481 tile->updateRect = sourceRect; |
485 | 482 |
486 if (sourceRect.IsEmpty()) | 483 if (sourceRect.IsEmpty()) |
487 continue; | 484 continue; |
488 | 485 |
489 const gfx::Point anchor = m_tiler->tileRect(tile).origin(); | 486 const gfx::Point anchor = m_tiler->tileRect(tile).origin(); |
490 | 487 |
491 // Calculate tile-space rectangle to upload into. | 488 // Calculate tile-space rectangle to upload into. |
492 gfx::Vector2d destOffset = sourceRect.origin() - anchor; | 489 gfx::Vector2d destOffset = sourceRect.origin() - anchor; |
493 if (destOffset.x() < 0) | 490 CHECK(destOffset.x() >= 0); |
494 CRASH(); | 491 CHECK(destOffset.y() >= 0); |
495 if (destOffset.y() < 0) | |
496 CRASH(); | |
497 | 492 |
498 // Offset from paint rectangle to this tile's dirty rectangle. | 493 // Offset from paint rectangle to this tile's dirty rectangle. |
499 gfx::Vector2d paintOffset = sourceRect.origin() - paintRect.origin()
; | 494 gfx::Vector2d paintOffset = sourceRect.origin() - paintRect.origin()
; |
500 if (paintOffset.x() < 0) | 495 CHECK(paintOffset.x() >= 0); |
501 CRASH(); | 496 CHECK(paintOffset.y() >= 0); |
502 if (paintOffset.y() < 0) | 497 CHECK(paintOffset.x() + sourceRect.width() <= paintRect.width()); |
503 CRASH(); | 498 CHECK(paintOffset.y() + sourceRect.height() <= paintRect.height()); |
504 if (paintOffset.x() + sourceRect.width() > paintRect.width()) | |
505 CRASH(); | |
506 if (paintOffset.y() + sourceRect.height() > paintRect.height()) | |
507 CRASH(); | |
508 | 499 |
509 tile->updaterResource()->update(queue, sourceRect, destOffset, tile-
>partialUpdate, stats); | 500 tile->updaterResource()->update(queue, sourceRect, destOffset, tile-
>partialUpdate, stats); |
510 if (occlusion) | 501 if (occlusion) |
511 occlusion->overdrawMetrics().didUpload(WebTransformationMatrix()
, sourceRect, tile->opaqueRect()); | 502 occlusion->overdrawMetrics().didUpload(WebTransformationMatrix()
, sourceRect, tile->opaqueRect()); |
512 | 503 |
513 } | 504 } |
514 } | 505 } |
515 } | 506 } |
516 | 507 |
517 namespace { | 508 namespace { |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
776 gfx::Rect prepaintRect = visibleContentRect(); | 767 gfx::Rect prepaintRect = visibleContentRect(); |
777 prepaintRect.Inset(-m_tiler->tileSize().width() * prepaintColumns, | 768 prepaintRect.Inset(-m_tiler->tileSize().width() * prepaintColumns, |
778 -m_tiler->tileSize().height() * prepaintRows); | 769 -m_tiler->tileSize().height() * prepaintRows); |
779 gfx::Rect contentRect(gfx::Point(), contentBounds()); | 770 gfx::Rect contentRect(gfx::Point(), contentBounds()); |
780 prepaintRect.Intersect(contentRect); | 771 prepaintRect.Intersect(contentRect); |
781 | 772 |
782 return prepaintRect; | 773 return prepaintRect; |
783 } | 774 } |
784 | 775 |
785 } // namespace cc | 776 } // namespace cc |
OLD | NEW |