Index: cc/tile_manager.cc |
diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc |
index 75deebe77f563a0b24f85aada10f30534458311d..cec7123e84451b2dfbd910ffd744b9edfc917828 100644 |
--- a/cc/tile_manager.cc |
+++ b/cc/tile_manager.cc |
@@ -11,6 +11,7 @@ |
#include "base/logging.h" |
#include "base/threading/sequenced_worker_pool.h" |
#include "cc/platform_color.h" |
+#include "cc/rendering_stats.h" |
#include "cc/resource_pool.h" |
#include "cc/tile.h" |
#include "third_party/skia/include/core/SkDevice.h" |
@@ -19,7 +20,8 @@ namespace { |
void RasterizeTile(cc::PicturePileImpl* picture_pile, |
uint8_t* mapped_buffer, |
- const gfx::Rect& rect) { |
+ const gfx::Rect& rect, |
+ cc::RenderingStats* stats) { |
TRACE_EVENT0("cc", "RasterizeTile"); |
DCHECK(mapped_buffer); |
DCHECK(picture_pile); |
@@ -28,7 +30,7 @@ void RasterizeTile(cc::PicturePileImpl* picture_pile, |
bitmap.setPixels(mapped_buffer); |
SkDevice device(bitmap); |
SkCanvas canvas(&device); |
- picture_pile->Raster(&canvas, rect); |
+ picture_pile->Raster(&canvas, rect, stats); |
} |
const int kMaxRasterThreads = 1; |
@@ -217,6 +219,12 @@ void TileManager::ManageTiles() { |
DispatchMoreRasterTasks(); |
} |
+void TileManager::renderingStats(RenderingStats* stats) { |
+ stats->totalRasterizeTimeInSeconds = |
+ rendering_stats_.totalRasterizeTimeInSeconds; |
+ stats->totalPixelsRasterized = rendering_stats_.totalPixelsRasterized; |
+} |
+ |
void TileManager::AssignGpuMemoryToTiles() { |
TRACE_EVENT0("cc", "TileManager::AssignGpuMemoryToTiles"); |
// Some memory cannot be released. Figure out which. |
@@ -301,6 +309,8 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) { |
managed_tile_state.resource_id_is_being_initialized = true; |
managed_tile_state.can_be_freed = false; |
+ RenderingStats* stats = new RenderingStats(); |
+ |
++pending_raster_tasks_; |
worker_pool_->GetTaskRunnerWithShutdownBehavior( |
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)->PostTaskAndReply( |
@@ -309,21 +319,29 @@ void TileManager::DispatchOneRasterTask(scoped_refptr<Tile> tile) { |
base::Unretained(cloned_picture_pile.get()), |
resource_pool_->resource_provider()->mapPixelBuffer( |
resource_id), |
- tile->rect_inside_picture_), |
+ tile->rect_inside_picture_, |
+ stats), |
base::Bind(&TileManager::OnRasterTaskCompleted, |
base::Unretained(this), |
tile, |
resource_id, |
- cloned_picture_pile)); |
+ cloned_picture_pile, |
+ stats)); |
} |
void TileManager::OnRasterTaskCompleted( |
scoped_refptr<Tile> tile, |
ResourceProvider::ResourceId resource_id, |
- scoped_refptr<PicturePileImpl> cloned_picture_pile) { |
+ scoped_refptr<PicturePileImpl> cloned_picture_pile, |
+ RenderingStats* stats) { |
TRACE_EVENT0("cc", "TileManager::OnRasterTaskCompleted"); |
--pending_raster_tasks_; |
+ rendering_stats_.totalRasterizeTimeInSeconds += |
+ stats->totalRasterizeTimeInSeconds; |
+ rendering_stats_.totalPixelsRasterized += stats->totalPixelsRasterized; |
+ delete stats; |
+ |
// Release raster resources. |
resource_pool_->resource_provider()->unmapPixelBuffer(resource_id); |