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

Side by Side Diff: Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp

Issue 9697001: Merge 109263 - [chromium] Don't let invalidation for next frame prevent tile upload (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1025/
Patch Set: Created 8 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 LayerTextureUpdater::Texture* texture() { return m_texture.get(); } 58 LayerTextureUpdater::Texture* texture() { return m_texture.get(); }
59 ManagedTexture* managedTexture() { return m_texture->texture(); } 59 ManagedTexture* managedTexture() { return m_texture->texture(); }
60 60
61 bool isDirty() const { return !m_dirtyRect.isEmpty(); } 61 bool isDirty() const { return !m_dirtyRect.isEmpty(); }
62 void copyAndClearDirty() 62 void copyAndClearDirty()
63 { 63 {
64 m_updateRect = m_dirtyRect; 64 m_updateRect = m_dirtyRect;
65 m_dirtyRect = IntRect(); 65 m_dirtyRect = IntRect();
66 } 66 }
67 bool isDirtyForCurrentFrame() { return !m_dirtyRect.isEmpty() && m_updateRec t.isEmpty(); }
67 68
68 IntRect m_dirtyRect; 69 IntRect m_dirtyRect;
69 IntRect m_updateRect; 70 IntRect m_updateRect;
70 IntRect m_opaqueRect; 71 IntRect m_opaqueRect;
71 private: 72 private:
72 OwnPtr<LayerTextureUpdater::Texture> m_texture; 73 OwnPtr<LayerTextureUpdater::Texture> m_texture;
73 }; 74 };
74 75
75 TiledLayerChromium::TiledLayerChromium() 76 TiledLayerChromium::TiledLayerChromium()
76 : LayerChromium() 77 : LayerChromium()
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 Vector<UpdatableTile*> invalidTiles; 268 Vector<UpdatableTile*> invalidTiles;
268 269
269 for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler->tiles().begi n(); iter != m_tiler->tiles().end(); ++iter) { 270 for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler->tiles().begi n(); iter != m_tiler->tiles().end(); ++iter) {
270 int i = iter->first.first; 271 int i = iter->first.first;
271 int j = iter->first.second; 272 int j = iter->first.second;
272 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second.get()); 273 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second.get());
273 if (!tile->managedTexture()->isValid(m_tiler->tileSize(), m_textureForma t)) { 274 if (!tile->managedTexture()->isValid(m_tiler->tileSize(), m_textureForma t)) {
274 invalidTiles.append(tile); 275 invalidTiles.append(tile);
275 continue; 276 continue;
276 } 277 }
277 if (tile->isDirty()) 278 if (tile->isDirtyForCurrentFrame())
278 continue; 279 continue;
279 280
280 tiledLayer->pushTileProperties(i, j, tile->managedTexture()->textureId() , tile->m_opaqueRect); 281 tiledLayer->pushTileProperties(i, j, tile->managedTexture()->textureId() , tile->m_opaqueRect);
281 } 282 }
282 for (Vector<UpdatableTile*>::const_iterator iter = invalidTiles.begin(); ite r != invalidTiles.end(); ++iter) 283 for (Vector<UpdatableTile*>::const_iterator iter = invalidTiles.begin(); ite r != invalidTiles.end(); ++iter)
283 m_tiler->takeTile((*iter)->i(), (*iter)->j()); 284 m_tiler->takeTile((*iter)->i(), (*iter)->j());
284 } 285 }
285 286
286 TextureManager* TiledLayerChromium::textureManager() const 287 TextureManager* TiledLayerChromium::textureManager() const
287 { 288 {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 if (!tile || !tile->managedTexture()->isValid(m_tiler->tileSize(), m _textureFormat)) 359 if (!tile || !tile->managedTexture()->isValid(m_tiler->tileSize(), m _textureFormat))
359 continue; 360 continue;
360 361
361 tile->managedTexture()->reserve(m_tiler->tileSize(), m_textureFormat ); 362 tile->managedTexture()->reserve(m_tiler->tileSize(), m_textureFormat );
362 } 363 }
363 } 364 }
364 } 365 }
365 366
366 void TiledLayerChromium::prepareToUpdateTiles(bool idle, int left, int top, int right, int bottom) 367 void TiledLayerChromium::prepareToUpdateTiles(bool idle, int left, int top, int right, int bottom)
367 { 368 {
368 // Reset m_updateRect for all tiles.
369 for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler->tiles().begi n(); iter != m_tiler->tiles().end(); ++iter) {
370 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second.get());
371 tile->m_updateRect = IntRect();
372 }
373
374 // Create tiles as needed, expanding a dirty rect to contain all 369 // Create tiles as needed, expanding a dirty rect to contain all
375 // the dirty regions currently being drawn. All dirty tiles that are to be p ainted 370 // the dirty regions currently being drawn. All dirty tiles that are to be p ainted
376 // get their m_updateRect set to m_dirtyRect and m_dirtyRect cleared. This w ay if 371 // get their m_updateRect set to m_dirtyRect and m_dirtyRect cleared. This w ay if
377 // invalidateRect is invoked during prepareToUpdate we don't lose the reques t. 372 // invalidateRect is invoked during prepareToUpdate we don't lose the reques t.
378 IntRect dirtyLayerRect; 373 IntRect dirtyLayerRect;
379 for (int j = top; j <= bottom; ++j) { 374 for (int j = top; j <= bottom; ++j) {
380 for (int i = left; i <= right; ++i) { 375 for (int i = left; i <= right; ++i) {
381 UpdatableTile* tile = tileAt(i, j); 376 UpdatableTile* tile = tileAt(i, j);
382 if (!tile) 377 if (!tile)
383 tile = createTile(i, j); 378 tile = createTile(i, j);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 476
482 if (!tile->managedTexture()->isValid(m_tiler->tileSize(), m_textureF ormat)) 477 if (!tile->managedTexture()->isValid(m_tiler->tileSize(), m_textureF ormat))
483 tile->m_dirtyRect = m_tiler->tileRect(tile); 478 tile->m_dirtyRect = m_tiler->tileRect(tile);
484 479
485 if (!tile->managedTexture()->reserve(m_tiler->tileSize(), m_textureF ormat)) 480 if (!tile->managedTexture()->reserve(m_tiler->tileSize(), m_textureF ormat))
486 return; 481 return;
487 } 482 }
488 } 483 }
489 } 484 }
490 485
486 void TiledLayerChromium::resetUpdateState()
487 {
488 // Reset m_updateRect for all tiles.
489 CCLayerTilingData::TileMap::const_iterator end = m_tiler->tiles().end();
490 for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler->tiles().begi n(); iter != end; ++iter) {
491 UpdatableTile* tile = static_cast<UpdatableTile*>(iter->second.get());
492 tile->m_updateRect = IntRect();
493 }
494 }
495
491 void TiledLayerChromium::prepareToUpdate(const IntRect& layerRect) 496 void TiledLayerChromium::prepareToUpdate(const IntRect& layerRect)
492 { 497 {
493 m_skipsDraw = false; 498 m_skipsDraw = false;
494 m_skipsIdlePaint = false; 499 m_skipsIdlePaint = false;
495 m_requestedUpdateTilesRect = IntRect(); 500 m_requestedUpdateTilesRect = IntRect();
496 m_paintRect = IntRect(); 501 m_paintRect = IntRect();
497 502
498 updateBounds(); 503 updateBounds();
499 504
505 resetUpdateState();
506
500 if (layerRect.isEmpty() || !m_tiler->numTiles()) 507 if (layerRect.isEmpty() || !m_tiler->numTiles())
501 return; 508 return;
502 509
503 int left, top, right, bottom; 510 int left, top, right, bottom;
504 m_tiler->layerRectToTileIndices(layerRect, left, top, right, bottom); 511 m_tiler->layerRectToTileIndices(layerRect, left, top, right, bottom);
505 512
506 prepareToUpdateTiles(false, left, top, right, bottom); 513 prepareToUpdateTiles(false, left, top, right, bottom);
507 } 514 }
508 515
509 void TiledLayerChromium::prepareToUpdateIdle(const IntRect& layerRect) 516 void TiledLayerChromium::prepareToUpdateIdle(const IntRect& layerRect)
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 // - only reserve idle paint tiles up to a memory reclaim threshold and 593 // - only reserve idle paint tiles up to a memory reclaim threshold and
587 // - insure we play nicely with other layers 594 // - insure we play nicely with other layers
588 prepaintRect.inflateX(m_tiler->tileSize().width()); 595 prepaintRect.inflateX(m_tiler->tileSize().width());
589 prepaintRect.inflateY(m_tiler->tileSize().height()); 596 prepaintRect.inflateY(m_tiler->tileSize().height());
590 prepaintRect.intersect(IntRect(IntPoint::zero(), contentBounds())); 597 prepaintRect.intersect(IntRect(IntPoint::zero(), contentBounds()));
591 return prepaintRect; 598 return prepaintRect;
592 } 599 }
593 600
594 } 601 }
595 #endif // USE(ACCELERATED_COMPOSITING) 602 #endif // USE(ACCELERATED_COMPOSITING)
OLDNEW
« no previous file with comments | « Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h ('k') | Source/WebKit/chromium/ChangeLog » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698