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

Side by Side Diff: cc/resources/tile_manager.cc

Issue 219963005: cc: Add support for partial swaps when using impl-side painting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: WIP - move damage tracking to DamageTracker Created 6 years, 8 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 // 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/resources/tile_manager.h" 5 #include "cc/resources/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/json/json_writer.h" 12 #include "base/json/json_writer.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/metrics/histogram.h" 14 #include "base/metrics/histogram.h"
15 #include "cc/base/math_util.h"
15 #include "cc/debug/devtools_instrumentation.h" 16 #include "cc/debug/devtools_instrumentation.h"
16 #include "cc/debug/traced_value.h" 17 #include "cc/debug/traced_value.h"
17 #include "cc/layers/picture_layer_impl.h" 18 #include "cc/layers/picture_layer_impl.h"
18 #include "cc/resources/direct_raster_worker_pool.h" 19 #include "cc/resources/direct_raster_worker_pool.h"
19 #include "cc/resources/image_raster_worker_pool.h" 20 #include "cc/resources/image_raster_worker_pool.h"
20 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 21 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
21 #include "cc/resources/raster_worker_pool_delegate.h" 22 #include "cc/resources/raster_worker_pool_delegate.h"
22 #include "cc/resources/tile.h" 23 #include "cc/resources/tile.h"
23 #include "skia/ext/paint_simplifier.h" 24 #include "skia/ext/paint_simplifier.h"
24 #include "third_party/skia/include/core/SkBitmap.h" 25 #include "third_party/skia/include/core/SkBitmap.h"
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 rendering_stats_instrumentation_(rendering_stats_instrumentation), 456 rendering_stats_instrumentation_(rendering_stats_instrumentation),
456 did_initialize_visible_tile_(false), 457 did_initialize_visible_tile_(false),
457 did_check_for_completed_tasks_since_last_schedule_tasks_(true), 458 did_check_for_completed_tasks_since_last_schedule_tasks_(true),
458 use_rasterize_on_demand_(use_rasterize_on_demand) { 459 use_rasterize_on_demand_(use_rasterize_on_demand) {
459 RasterWorkerPool* raster_worker_pools[NUM_RASTER_WORKER_POOL_TYPES] = { 460 RasterWorkerPool* raster_worker_pools[NUM_RASTER_WORKER_POOL_TYPES] = {
460 raster_worker_pool_.get(), // RASTER_WORKER_POOL_TYPE_DEFAULT 461 raster_worker_pool_.get(), // RASTER_WORKER_POOL_TYPE_DEFAULT
461 direct_raster_worker_pool_.get() // RASTER_WORKER_POOL_TYPE_DIRECT 462 direct_raster_worker_pool_.get() // RASTER_WORKER_POOL_TYPE_DIRECT
462 }; 463 };
463 raster_worker_pool_delegate_ = RasterWorkerPoolDelegate::Create( 464 raster_worker_pool_delegate_ = RasterWorkerPoolDelegate::Create(
464 this, raster_worker_pools, arraysize(raster_worker_pools)); 465 this, raster_worker_pools, arraysize(raster_worker_pools));
466 damage_rect_ = gfx::Rect(0, 0, 0, 0);
465 } 467 }
466 468
467 TileManager::~TileManager() { 469 TileManager::~TileManager() {
468 // Reset global state and manage. This should cause 470 // Reset global state and manage. This should cause
469 // our memory usage to drop to zero. 471 // our memory usage to drop to zero.
470 global_state_ = GlobalStateThatImpactsTilePriority(); 472 global_state_ = GlobalStateThatImpactsTilePriority();
471 473
472 CleanUpReleasedTiles(); 474 CleanUpReleasedTiles();
473 DCHECK_EQ(0u, tiles_.size()); 475 DCHECK_EQ(0u, tiles_.size());
474 476
475 RasterTaskQueue empty[NUM_RASTER_WORKER_POOL_TYPES]; 477 RasterTaskQueue empty[NUM_RASTER_WORKER_POOL_TYPES];
476 raster_worker_pool_delegate_->ScheduleTasks(empty); 478 raster_worker_pool_delegate_->ScheduleTasks(empty);
477 orphan_raster_tasks_.clear(); 479 orphan_raster_tasks_.clear();
478 480
479 // This should finish all pending tasks and release any uninitialized 481 // This should finish all pending tasks and release any uninitialized
480 // resources. 482 // resources.
481 raster_worker_pool_delegate_->Shutdown(); 483 raster_worker_pool_delegate_->Shutdown();
482 raster_worker_pool_delegate_->CheckForCompletedTasks(); 484 raster_worker_pool_delegate_->CheckForCompletedTasks();
483 485
484 DCHECK_EQ(0u, bytes_releasable_); 486 DCHECK_EQ(0u, bytes_releasable_);
485 DCHECK_EQ(0u, resources_releasable_); 487 DCHECK_EQ(0u, resources_releasable_);
486 488
487 for (std::vector<PictureLayerImpl*>::iterator it = layers_.begin(); 489 for (std::vector<PictureLayerImpl*>::iterator it = layers_.begin();
488 it != layers_.end(); 490 it != layers_.end();
489 ++it) { 491 ++it) {
490 (*it)->DidUnregisterLayer(); 492 (*it)->DidUnregisterLayer();
491 } 493 }
492 layers_.clear(); 494 layers_.clear();
495 tilemap_.clear();
493 } 496 }
494 497
495 void TileManager::Release(Tile* tile) { 498 void TileManager::Release(Tile* tile) {
496 prioritized_tiles_dirty_ = true; 499 prioritized_tiles_dirty_ = true;
497 released_tiles_.push_back(tile); 500 released_tiles_.push_back(tile);
498 } 501 }
499 502
503 void TileManager::ResetTileRectLayerMap() {
504 for (std::map<int, gfx::Rect>::iterator it = tilemap_.begin();
505 it != tilemap_.end();
506 ++it) {
507 it->second = gfx::Rect(0, 0, 0, 0);
508 }
509 }
reveman 2014/04/11 18:11:34 all this tilemap stuff is confusing and inefficien
sohanjg 2014/04/14 10:16:11 Done.
510
511 std::map<int, gfx::Rect> TileManager::GetTileRectLayerMap() { return tilemap_; }
512
500 void TileManager::DidChangeTilePriority(Tile* tile) { 513 void TileManager::DidChangeTilePriority(Tile* tile) {
501 prioritized_tiles_dirty_ = true; 514 prioritized_tiles_dirty_ = true;
502 } 515 }
503 516
504 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const { 517 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const {
505 return global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY; 518 return global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY;
506 } 519 }
507 520
508 void TileManager::CleanUpReleasedTiles() { 521 void TileManager::CleanUpReleasedTiles() {
509 for (std::vector<Tile*>::iterator it = released_tiles_.begin(); 522 for (std::vector<Tile*>::iterator it = released_tiles_.begin();
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
1225 DCHECK(tile_version.raster_task_); 1238 DCHECK(tile_version.raster_task_);
1226 orphan_raster_tasks_.push_back(tile_version.raster_task_); 1239 orphan_raster_tasks_.push_back(tile_version.raster_task_);
1227 tile_version.raster_task_ = NULL; 1240 tile_version.raster_task_ = NULL;
1228 1241
1229 if (was_canceled) { 1242 if (was_canceled) {
1230 ++update_visible_tiles_stats_.canceled_count; 1243 ++update_visible_tiles_stats_.canceled_count;
1231 resource_pool_->ReleaseResource(resource.Pass()); 1244 resource_pool_->ReleaseResource(resource.Pass());
1232 return; 1245 return;
1233 } 1246 }
1234 1247
1248 // Maintain a map of unioned intialized tile rect and layer-id.
1249 tilemap_[tile->layer_id()] =
1250 gfx::UnionRects(tilemap_[tile->layer_id()], tile->content_rect());
1251
1235 ++update_visible_tiles_stats_.completed_count; 1252 ++update_visible_tiles_stats_.completed_count;
1236 1253
1237 tile_version.set_has_text(analysis.has_text); 1254 tile_version.set_has_text(analysis.has_text);
1238 if (analysis.is_solid_color) { 1255 if (analysis.is_solid_color) {
1239 tile_version.set_solid_color(analysis.solid_color); 1256 tile_version.set_solid_color(analysis.solid_color);
1240 resource_pool_->ReleaseResource(resource.Pass()); 1257 resource_pool_->ReleaseResource(resource.Pass());
1241 } else { 1258 } else {
1242 tile_version.set_use_resource(); 1259 tile_version.set_use_resource();
1243 tile_version.resource_ = resource.Pass(); 1260 tile_version.resource_ = resource.Pass();
1244 1261
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1526 b_tile->priority(b_pair.second), 1543 b_tile->priority(b_pair.second),
1527 false /* prioritize low res */); 1544 false /* prioritize low res */);
1528 } 1545 }
1529 1546
1530 NOTREACHED(); 1547 NOTREACHED();
1531 // Keep the compiler happy. 1548 // Keep the compiler happy.
1532 return false; 1549 return false;
1533 } 1550 }
1534 1551
1535 } // namespace cc 1552 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698